保护自己免受Dos攻击

时间:2009-06-22 21:03:41

标签: webserver protection denial-of-service

这可能更适合Serverfault,但许多只来这里的网络开发者可能会从这个问题的可能答案中受益。

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

在阅读article

后,我问自己

对于那些不熟悉的人,以下是我记得的内容:DoS攻击会通过反复向您的服务器发送虚假标头来尝试占用您的所有连接。

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

维基百科提供了更多信息:http://en.wikipedia.org/wiki/Denial_of_service

4 个答案:

答案 0 :(得分:46)

没有灵丹妙药,但通过以下某些方法可以使DoS攻击变得更加困难:

  • 不代表未经身份验证的客户(​​或限制您的意愿)代表未经身份验证的客户进行昂贵的操作
  • 节流身份验证尝试
  • 代表每个经过身份验证的客户端执行节流操作,如果他们在太短的时间内执行了太多操作,则将其帐户置于临时锁定状态
  • 为所有未经身份验证的客户端设置类似的全局限制,并准备在检测到正在进行的攻击时降低此设置
  • 在攻击期间可以使用标记来禁用所有未经身份验证的访问
  • 不代表未经身份验证的客户端存储内容,并使用配额限制每个经过身份验证的客户端的存储
  • 一般情况下,尽快拒绝所有格式错误,不合理复杂或不合理的巨大请求(并记录下来以帮助检测攻击)
  • 如果来自未经身份验证的客户端的请求可能导致从该缓存中删除内容,请不要使用纯LRU缓存,因为您将受到缓存中毒攻击(恶意客户端要求许多不常使用的东西,导致您从你的缓存中驱逐所有有用的东西,并需要做更多的工作来为你的合法客户服务)

请记住,彻底拒绝限制请求(例如,使用HTTP 503: Service Unavailable响应或适合您正在使用的任何协议的类似响应)而不是排队限制请求非常重要。如果你对它们进行排队,队列就会占用你所有的内存,DoS攻击至少和没有限制时一样有效。

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

  • 确保您的网络服务器配置为拒绝POST邮件而没有附带的Content-Length标头,并拒绝超过规定Content-Length的请求(并限制违规客户端),以及拒绝Content-Length POST(或PUT)针对的服务不合理地长的请求

答案 1 :(得分:1)

对于此特定攻击(只要请求是GET),基于负载均衡器或WAF只会根据Web服务器的完整请求生效。

当使用GET POST而不是GET POST时,问题就开始了(这很容易),因为你无法知道这是一个恶意的POST,还是只是用户上传的速度很慢。

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

答案 2 :(得分:1)

例如,异步服务器或多或少地对这种特定形式的攻击免疫。例如,我使用Nginx反向代理服务我的Django应用程序,攻击似乎并没有影响它的操作。另一个流行的异步服务器是lighttpd。

请注意,这种攻击很危险,因为它甚至可以通过连接速度慢的单台机器执行。但是,常见的DDoS攻击会使您的服务器受到大量机器攻击,并且您无法保护自己免受这些攻击。

答案 3 :(得分:0)

简短回答:

你无法保护自己免受DoS的攻击。<​​/ p>

我并不同意它属于serverfault,因为DoS被归类为安全问题,并且与编程明确相关