21

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

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

看完这篇文章我问自己这个

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

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

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

4

4 回答 4

50

没有灵丹妙药,但您可以通过执行以下一些操作来使 DoS 攻击更加困难:

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

请记住,重要的是彻底拒绝受限制的请求(例如,使用HTTP 503:服务不可用响应或适合您使用的任何协议的类似响应)而不是排队受限制的请求。如果你对它们进行排队,队列只会吃掉你所有的内存,并且 DoS 攻击将至少与没有节流的情况下一样有效。

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

  • 确保您的 Web 服务器配置为拒绝POST没有随附Content-Length标头的消息,并拒绝超过规定的请求(并限制违规客户端)Content-Length,并拒绝对于(或)Content-Length的服务而言过长的请求目的是POSTPUT
于 2009-06-22T21:57:52.087 回答
1

对于这种特定的攻击(只要请求是 GET),基于负载均衡器或仅基于对 Web 服务器的完整请求的 WAF 将起作用。

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

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

于 2009-06-22T21:32:04.867 回答
1

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

请注意,这种攻击很危险,因为它甚至可以由连接速度较慢的单台机器执行。但是,常见的 DDoS 攻击会使您的服务器与大量机器相抗衡,您几乎无法保护自己免受攻击。

于 2009-06-22T21:55:38.487 回答
-1

简短的回答:

您无法保护自己免受 DoS 攻击。

而且我不同意它属于服务器故障,因为 DoS 被归类为安全问题,并且与编程明确相关

于 2009-06-22T21:17:01.527 回答