如何启用DDoS保护?

DDoS(分布式拒绝服务攻击)通常在服务器级别被阻止?

有没有办法阻止它在PHP级别,或者至less减less它?

如果不是,停止DDoS攻击最快,最常用的方法是什么?

DDOS是一系列的攻击,它们压倒了数据中心的关键系统,包括:

  • 托pipe中心的networking连接到互联网
  • 托pipe中心的内部networking和路由器
  • 您的防火墙和负载平衡器
  • 您的Web服务器,应用程序服务器和数据库

在开始构buildDDOS防御之前,请考虑最糟糕的风险价值是什么。 对于一个小型社区的非重要,免费使用的服务,风险的总价值可能是花生。 对于已build立数十亿美元的业务而言,这是一个付费的,面向公众的关键任务系统,其价值可能就是公司的价值。 在后一种情况下,你不应该使用StackExchange :)无论如何,为了抵御DDOS,你需要一个防御深入的方法:

  1. 与您的托pipe中心合作 ,了解他们提供的服务,包括通过互联网连接的IP和端口过滤以及他们提供的防火墙服务。 这是至关重要的: 托pipe公司将互联网上许多站点从托pipe公司处理到由一个客户导致的数据中心DDOS所造成的中断。 此外,在DDOS攻击期间,您将与托pipe中心的工作人员密切合作,了解他们的紧急事件并与他们保持良好的关系:)他们应该能够阻止整个国际区域,完全阻止特定的服务或networking协议和其他广泛的防御措施,或者只允许列入白名单的IP(取决于您的业务模式)
  2. 在托pipe中心 – 使用内容交付networking来分发(主要是静态)服务靠近您的最终用户,并从DDOS架构师隐藏您的真实服务器。 完整的CDN对DDOS来说太大了,无法拿出所有国家的所有节点; 如果DDOS集中在一个国家,至less其他用户还是可以的。
  3. 保持所有的系统和软件包与最新的安全补丁更新 – 我的意思是所有的人:

    • pipe理交换机 – 这些有时需要更新
    • 路由器
    • 防火墙
    • 负载平衡器
    • 操作系统
    • Web服务器
    • 语言和他们的图书馆
  4. 确保您有一个良好的防火墙或安全设备设置, 并由合格的安全专家定期审查 。 防火墙上的强大规则可以很好地防御许多简单的攻击。 能够pipe理每个打开的服务的可用带宽也是有用的。

  5. 有良好的networking监控工具 – 这可以帮助您了解:

    • 你受到攻击而不是简单地承受沉重的负担
    • 攻击来自何处(可能包括您通常不会与之打交道的国家)
    • 攻击实际上是什么(端口,服务,协议,IP和数据包内容)
  6. 这种攻击可能只是大量使用合法的网站服务(例如,打击运行查询或插入/更新/删除数据的“合法”URI) – 来自数千至数百万个不同IP地址的成千上万或数百万的请求将使网站膝盖。 或者,某些服务可能运行起来非常昂贵,只有less数几个请求会导致一个DOS – 认为这是一个非常昂贵的报告。 因此,您需要良好的应用程序级别的监视

    • 哪些服务被调用,哪些参数/数据被发送(即login你的应用程序)
    • 哪些用户正在调用和从哪些IP(即login您的应用程序)
    • 什么查询和插入/更新/删除数据库正在执行
    • 负载平均,CPU利用率,磁盘I / O,系统中所有计算机(和VM)上的networkingstream量
    • 确保所有这些信息都容易检索,并且可以关联来自不同计算机和服务的日志(即确保所有计算机使用ntp进行时间同步)。
  7. 明显的限制和限制在你的应用程序 。 例如,您可能会:

    • 使用负载平衡器中的QoSfunction将所有匿名会话发送到群集中的单独应用程序服务器,而login用户使用另一个群集。 这可以防止应用程序级的匿名DDOS拿出有价值的客户
    • 使用强大的CAPCHA来保护匿名服务
    • 会话超时
    • 对某些types的请求(例如报告)具有会话限制或速率限制。 确保您可以根据需要closures匿名访问
    • 确保用户对并发会话数量有限制(防止黑客login百万次)
    • 为不同的服务提供不同的数据库应用程序用户(例如事务使用和报告使用),并使用数据库资源pipe理来防止一种types的Web请求压倒所有其他
    • 如果可能的话,使这些约束是dynamic的,或至less是可configuration的。 这样,当你受到攻击时,你可以设置激进的临时限制(“限制”攻击),比如每个用户只有一个会话,并且没有匿名访问。 这对你的客户来说肯定不是很好,但比没有服务要好得多。
  8. 最后但并非最不重要的是,编写DOS响应计划文档,并由所有相关方(业务,pipe理,软件开发团队,IT团队和安全专家)进行内部审查。 编写文档的过程将使您和您的团队思考问题,并帮助您做好准备,如果最糟糕的情况发生在凌晨3点。 文件应包括(除其他外):

    • 什么是风险和成本的业务
    • 为保护资产而采取的措施
    • 如何检测到攻击
    • 计划的响应和升级程序
    • 保持系统和本文件最新的stream程

所以,序言一边,这里有一些具体的答案:

DDOS通常在服务器级别被阻塞,对吧?

并非如此 – 绝大多数最严重的DDOS攻击都是低级的(在IP数据包级别),并且由路由规则,防火墙以及用于处理DDOS攻击的安全设备来处理。

有没有办法阻止它在PHP级别,或者至less减less它?

一些DDOS攻击针对应用程序本身,发送有效的URI和HTTP请求。 当请求率上升时,您的服务器开始挣扎,您将会遇到SLA中断。 在这种情况下,您可以在PHP级别执行以下操作:

  • 应用程序级别监视:确保每个服务/页面都以一种可以看到正在发生的事情的方式logging请求(以便采取措施减轻攻击)。 一些想法:

    • 有一个日志格式,您可以轻松加载到日志工具(或Excel或类似的),并与命令行工具(grep,sed,awk)parsing。 请记住,DDOS将会生成数百万行日志。 您可能需要对日志进行分割(特别是在URI,时间,IP和用户方面)以确定发生了什么事情,并需要生成以下数据:

      • 什么URI被访问
      • 哪些URI以较高的速率失败(可能是攻击者攻击的特定URI的指示符)
      • 哪些用户正在访问该服务
      • 每个用户访问该服务的IP数量
      • 匿名用户访问哪些URI
      • 什么论据正在用于一个给定的服务
      • 审核特定用户的操作
    • logging每个请求的IP地址。 不要反向DNS – 具有讽刺意味的是,这样做的成本使攻击者更容易使用DDOS

    • logging整个URI和HTTP方法,例如“GET http://example.com/path/to/service?arg1=ddos
    • logging用户ID(如果存在)
    • logging重要的HTTP参数
  • 明显的速率限制:您可以对特定IP或用户在给定时间内可以做出的请求数量进行限制。 一个合法的客户每秒可以做出10个以上的请求吗? 匿名用户可以访问昂贵的报告吗?

  • 用于匿名访问的CAPTCHA:为所有匿名请求实施CAPTCHA,以validation用户是一个人,而不是DDOS bot。

什么是阻止DDOS攻击最快最常用的方法?

最快的可能是屈服于勒索,虽然这可能是不可取的。

否则,你要做的第一件事是联系你的主机和/或CDN提供商,并与他们一起工作(如果他们还没有联系你,已经问过究竟是怎么回事了…)。 当发生DDOS时,它可能会对托pipe服务提供商的其他客户造成间接影响,并且提供商可能承受相当大的压力,为了保护自己的资源而closures您的站点。 准备与提供者分享您的日志(任何和所有信息); 这些日志与其networking监视器结合在一起可以提供足够的信息来阻止/减轻攻击。

如果你期待一个DDOS,这是一个非常好的主意,让你的托pipe服务提供商能够提供的保护级别。 他们应该有DDOS经验和工具来缓解它 – 了解他们的工具,stream程和升级程序。 同时询问托pipe服务提供商上游提供商的支持。 这些服务可能意味着更多的前期或每月费用,但将其视为保险政策。

在受到攻击时,您需要抓取您的日志并挖掘它们 – 尝试制定攻击模式。 您应该考虑closures匿名访问并限制遭受攻击的服务(即降低应用程序对服务的速率限制)。

如果幸运的话,你有一个小的,固定的客户群,你可能能够确定你的有效客户的IP地址。 如果是这种情况,可以暂时切换到白名单方式。 确保你所有的客户知道这一切正在进行,所以他们可以打电话,如果他们需要从一个新的IP访问:)


Doug McClean在https://stackoverflow.com/a/1029613/1395668有一些很好的build议;

根据PHP部分的问题;

虽然我不依赖于PHP,但可以实现,但需要考虑所有这些可能性或更多;

  1. 攻击者可能会为每个请求更改IP
  2. 攻击者可以将parameter passing给目标站点不关心这些参数的URI,
  3. 攻击者可能会在到期前重启会话…

简单的伪;

<?php // Assuming session is already started $uri = md5($_SERVER['REQUEST_URI']); $exp = 3; // 3 seconds $hash = $uri .'|'. time(); if (!isset($_SESSION['ddos'])) { $_SESSION['ddos'] = $hash; } list($_uri, $_exp) = explode('|', $_SESSION['ddos']); if ($_uri == $uri && time() - $_exp < $exp) { header('HTTP/1.1 503 Service Unavailable'); // die('Easy!'); die; } // Save last request $_SESSION['ddos'] = $hash; ?> 

请求链中的php级别太晚了。

将您的apache服务器放在开源设备之后可能对您来说是个不错的select。

http://tengine.taobao.org/有一些文档和源代码更多的模块旨在防止DDOS。; 这是nginx的扩展,所以你可以很容易地将它设置为你的apache实例的反向代理。

请参阅: http : //blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/如何对抗碰撞有DoS攻击。

也完全忘了, http://www.cloudflare.com是一个免费的networking应用程序防火墙,他们有免费和付费的计划,并将保存你的屁股从DDOS我们使用它的很多我们的高stream量网站只是为了它的cachingfunction。; 这太棒了!

DDoS最好由非常昂贵的专用networking设备来处理。 主机一般不擅长DDoS防护,因为它们性能相对较低,状态耗尽,带宽有限等。如果您无法访问DDoS缓解硬件,则使用iptables,apache mods和类似服务可以在某些情况下提供帮助或者DDoS缓解服务,但是这是远远不够理想的,仍然有可能遭受攻击。

你不能在PHP级别这样做。 DDOS是一种向您的networking服务器发送太多请求的攻击。 您的networking服务器在调用您的PHP脚本之前将拒绝请求。

如果你使用的是Apache,下面是Apache的一些技巧: http : //httpd.apache.org/docs/trunk/misc/security_tips.html

有一些插件可以在apache中用于ddos / dos。 好的开始在这里http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html

如果你在LEMP,你可以在这里检查。 http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

这些都是不错的起点。

在PHP方面这样的事情呢?

 //if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second $limitps = 10; if (!isset($_SESSION['first_request'])){ $_SESSION['requests'] = 0; $_SESSION['first_request'] = $_SERVER['REQUEST_TIME']; } $_SESSION['requests']++; if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){ //write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP $_SESSION['banip']==1; }elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){ $_SESSION['requests'] = 0; $_SESSION['first_request'] = $_SERVER['REQUEST_TIME']; } if ($_SESSION['banip']==1) { header('HTTP/1.1 503 Service Unavailable'); die; } 

不要使用基于PHP的保护,这是可怕的,几乎不会有任何影响! configuration你的networking服务器来限制请求的速度,例如在Nginx中使用limit_req模块( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

虽然,我会build议使用CloudFlare来对抗第4层 – 但是除非您愿意支付,否则不是基于第7层的攻击。

反DDOS步骤:

  • 首先重要的是首先确定ddos攻击。 更早地识别ddos攻击意味着对您的服务器更好。
  • 获得更好的带宽可用于您的服务器。 始终保持足够的带宽,这是您的服务器所需要的。 这不会阻止DDOS攻击,但需要更长的时间。 你将得到一些额外的时间来采取行动。
  • 如果你拥有自己的networking服务器,那么你可以通过限制你的路由器的networking参数进行防御,添加filter将数据包丢弃到不同的攻击源,更积极地超时半开连接。 同时设置较低的SYN,ICMP和UDP泛滥降低阈值。
  • 如果您对这些事情不太了解,请立即联系您的托pipe服务提供商。 他们可以尽力防止DDOS攻击。
  • 还有Cloudflare和其他公司提供的特殊DDOS缓解服务。 通过它们可以帮助你防止DDOS攻击。 还有很多公司提供廉价的ddos保护dos保护

更多http://buckydroid.com/ddos-attack-protection-mitigation/(http://buckydroid.com/ddos-attack-protection-mitigation/

DDOS通常在服务器级别被阻塞,请在服务器级别启用DDOS保护。 请查看以下有关DDOS保护的说明。

可帮助防止DDOS问题的Apache HTTP Serverconfiguration设置:

RequestReadTimeout指令允许限制客户端发送请求的时间。

允许10秒钟接收请求,包括标题和接收请求主体30秒:

 RequestReadTimeout header=10 body=30 

允许至less10秒钟接收请求主体。 如果客户端发送数据,则将收到的每1000个字节的超时时间增加1秒,没有超时上限(LimitRequestBody间接给出的限制除外):

 RequestReadTimeout body=10,MinRate=1000 RequestReadTimeout header=10-30,MinRate=500 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 

在受到DoS攻击的网站上,KeepAliveTimeout指令也可能会降低。 有些网站甚至通过KeepAlive完全closuresKeepalive,当然这在性能上也有其他的缺陷。 应该检查其他模块提供的各种与超时有关的指令的值。

应该仔细configurationLimitRequestBody,LimitRequestFields,LimitRequestFieldSize,LimitRequestLine和LimitXMLRequestBody指令以限制由客户端input触发的资源消耗。 调整MaxRequestWorkers指令以允许服务器处理最大数量的并发连接,而​​不会耗尽资源。