2009-06-22 128 views
17

这可能更适合于Serverfault,但许多只有在这里才能访问的web开发者可能会从这个问题的可能答案中受益。保护自己免受Dos攻击

问题是:如何有效地保护自己免受针对您的网络服务器的拒绝服务攻击?

我问自己这个阅读本article

对于那些不熟悉之后,这是我记得这件事:一个DoS攻击会试图通过反复发送伪报头到您的服务器占据所有连接。

通过这样做,您的服务器将达到可能的同时连接的限制,因此,普通用户无法再访问您的站点。

Wikipedia提供一些更多的信息:http://en.wikipedia.org/wiki/Denial_of_service

回答

43

有没有灵丹妙药,但你可以使DoS攻击更难做以下一些:

  • 不要(或限制你愿意)代表未经验证的客户做昂贵的操作
  • 油门认证试图代表每个认证客户端的执行
  • 油门操作,并把他们的帐户上的临时锁定,如果他们做太多的事情在太短的时间
  • 有一个类似的全球油门所有unauthentica泰德的客户,并准备以降低此设置,如果你检测到正在进行的攻击
  • 有可以攻击过程中使用禁用所有未经验证的访问
  • 事情不要存储代表未认证用户的标志和使用配额限制每个认证的客户
  • 一般的存储,尽可能快地拒绝所有的格式不正确,不合理地复杂,或者无理巨额请求(和记录他们在检测到攻击的帮助)
  • 不要使用一个纯粹的LRU缓存,如果来自未经身份验证的客户端的请求可能导致从该缓存中驱逐事物,因为您将遭受缓存中毒攻击(其中恶意客户请求大量不同不常使用的东西,使您从缓存中驱逐所有有用的东西,需要做更多的工作,以满足您的合法客户端)

记住,重要的是要彻底拒绝节流请求(例如,与HTTP 503: Service Unavailable响应或类似的响应适合您正在使用的任何协议),而不是排队扼杀请求。如果将它们排队,队列就会吞噬你的所有内存,并且DoS攻击的效果至少与没有限制的效果一样。

的HTTP服务器的一些更具体的建议:

  • 确保您的网络服务器配置为拒绝POST消息没有伴随Content-Length头,并拒绝请求(油门有问题的客户端),这超过声明Content-Length,并拒绝与Content-Length这是不合理长的POST(或PUT)旨在
0

简短的回答:

你不能保护自己免受DoS攻击。

,我不同意这属于对serverfault,因为DoS攻击(只要该请求是GET)基于负载均衡或WAF归类为一个安全问题,并definetly与编程相关

+0

的服务请求,只是因为它是一个安全问题做这并不意味着它不属于ServerFault。编程仅解决这些安全问题的一小部分。 – ProfK 2014-11-28 04:38:51

1

对于这个特定的攻击只有基于Web服务器的完整请求才能工作。

由于您无法知道这是一个恶意的POST还是仅仅是从用户上传的一些非常慢的上传,所以会使用(而非简单)代替GET POST的问题。

从DoS本身来说,由于一个简单的事实,您无法真正保护您的Web应用程序。您的资源有限,而攻击者可能拥有无限的时间和资源来执行DoS。而且大多数情况下,攻击者执行所需步骤很便宜。例如上面提到的这种攻击有几百个缓慢运行的连接 - >没有问题

1

例如,异步服务器或多或少不受这种特殊形式的攻击的影响。例如,我使用Nginx反向代理服务我的Django应用程序,并且这种攻击似乎不会影响其操作。另一种流行的异步服务器是lighttpd。

请注意,这种攻击是危险的,因为它甚至可以通过连接速度慢的单台机器来执行。然而,普通的DDoS攻击会让你的服务器对抗一大群机器,并且你很难保护自己免受这些攻击。

相关问题