为什么 NginX 和 Lighttpd 不受 Slowloris 的影响?

The*_*can 27 web-server denial-of-service malware lighttpd apache-2.2

我正在调查Slowloris的漏洞,我想我了解这种攻击的工作原理和原因。

我不明白的是为什么 Lighttpd 和 NginX 不受影响(根据上面链接的同一篇文章)。它们有什么不同?

Smu*_*dge 27

Apache 有一个“最大客户端”理论

这是它可以处理的同时连接数。IE 如果 apache 服务器的“最大客户端”限制为 100,并且每个请求需要 1 秒才能完成,则它每秒最多可以处理 100 个请求。

像 SlowLoris 这样的应用程序会用连接淹没服务器,在我们的例子中,如果 SlowLoris 每秒发送 200 个连接,而 Apache 每秒只能处理 100 个连接,则连接队列将不断变大并用尽机器上的所有内存,将其带到一拖。这类似于 Anonymous 的 LOIC 的工作方式。

NGINX 和 Lighttpd(以及其他)没有最大连接数,而是使用工作线程,因此理论上,它们可以处理的连接数没有限制。
如果您监控您的 Apache 连接,您将看到大多数活动连接是从客户端“发送”或“接收”数据。在 NGINX/Lighttpd 中,他们只是忽略这些请求并让它们在后台运行,而不是耗尽系统资源,它只需要处理正在进行的连接(解析响应、从后端服务器读取数据等)

我今天下午实际上回答了一个类似的问题,所以那里的信息可能对你也很有趣Reducing Apache request queueing

  • 小更正:nginx 不使用工作线程来实现高连接数。来自 [nginx.org](http://wiki.nginx.org/Main):“Nginx 不依赖线程来处理请求。相反,它使用了更具可扩展性的事件驱动(异步)架构” (8认同)
  • 尽管可能有副作用,但Slowloris 的意图不是“用完机器上的所有内存”,而是耗尽最大连接容量,拒绝后续连接成功。 (2认同)

小智 16

Nginx 实际上很容易受到slowloris 攻击。稀缺资源是同时工作连接的最大数量。这个数字可以计算为worker_connections * worker_processes并且在默认 nginx 配置中等于 512。因此,使用goloris 之类的工具可以很容易地删除未受保护的 nginx 。


Ngu*_*Tan 10

应该接受 valyala 的评论作为答案。

大多数nginx服务器使用默认配置,因此容易受到slowloris攻击。我使用slowloris 仅使用我的笔记本电脑就删除了我朋友的一些nginx 网站,通常只用了不到5 分钟(我的朋友向我提出挑战)。

正如 valyala 所说,从技术上讲,nginx 不易受到慢速病毒的攻击,但默认配置限制了最大连接数,因此当连接数超过该数量时,nginx 会丢弃新请求,从而导致拒绝服务。

保护 nginx 免受 slowloris 攻击的已知方法包括限制来自同一 IP 的连接数,以及增加 worker_connections 配置。攻击仍然有效,但会变得更难(可能需要 5 分钟以上?:D)