我正在调查慢蜂我想我了解这种攻击是如何以及为什么会发生的。
我不明白的是,为什么 Lighttpd 和 NginX 不受影响(根据上面链接的同一篇文章)。它们有什么不同?
答案1
Apache 有一个“最大客户端”理论
这就是它可以处理的同时连接数。例如,如果 Apache 服务器的“最大客户端数”限制为 100,并且每个请求需要 1 秒才能完成,则它每秒最多可以处理 100 个请求。
像 SlowLoris 这样的应用程序会向服务器发送大量连接,在我们的例子中,如果 SlowLoris 每秒发送 200 个连接,而 Apache 每秒只能处理 100 个连接,则连接队列会变得越来越大,并耗尽机器上的所有内存,导致服务器停止运行。这与 Anonymous 的 LOIC 的工作方式类似。
NGINX 和 Lighttpd(以及其他)没有最大连接数限制,而是使用工作线程,因此理论上它们可以处理的连接数没有限制。
如果您监控 Apache 连接,您会发现大多数活动连接都在“发送”或“接收”来自客户端的数据。在 NGINX/Lighttpd 中,它们只是忽略这些请求并让它们在后台运行,不会占用系统资源,并且它只需处理正在进行的连接(解析响应、从后端服务器读取数据等)。
我今天下午实际上回答过一个类似的问题,所以那里面的信息可能也会让你感兴趣减少 Apache 请求排队
答案2
Nginx 实际上很容易受到 slowloris 攻击。稀缺资源是同时运行的最大工作连接数。此数字可以计算为worker_connections * worker_processes在默认的 nginx 配置中等于 512。因此,使用以下工具很容易关闭未受保护的 nginx:戈洛里斯。
答案3
valyala 的评论应该被接受为答案。
大多数 nginx 服务器使用默认配置,因此容易受到 slowloris 攻击。我曾使用 slowloris 仅用我的笔记本电脑就搞垮了我朋友的一些 nginx 网站,通常只需不到 5 分钟(我的朋友向我挑战)。
正如 valyala 所说,从技术上讲,nginx 不易受到 slowloris 攻击,但默认配置限制了最大连接数,因此当连接数超过该数量时,nginx 会丢弃新请求,从而导致拒绝服务。
保护 nginx 免受 slowloris 攻击的已知方法包括限制来自同一 IP 的连接数,以及增加 worker_connections 配置。攻击仍然有效,但难度会加大(可能需要超过 5 分钟?:D)