我如何检测 Slowloris?

我如何检测 Slowloris?

我确信我受到了 Slowloris 攻击。我设置了一条 iptables 规则来限制到我的网络服务器的最大连接数,但我想知道如何确定这是否真的是 Slowloris 攻击,如果是,我如何找到攻击者的 IP 地址。我真的很想将日志传递给他的 ISP。

谢谢

答案1

Slowloris 攻击的工作原理是尽可能慢地发送请求数据。因此,如果您可以测量每个 IP 地址的带宽使用情况,那么如果它低于某个阈值(通过测量已知 slowloris 攻击中的带宽发现),那么您就知道您受到了攻击。

为了防止攻击,我建议更换你的网络服务器软件。我使用 cherokee,它的默认配置具有抗攻击性。我无法确定 nginx 是否易受攻击,但 lighttpd 是。我也不能确定使用具有抗攻击性的网络服务器作为代理会有什么不同。

以下是更多信息:http://ha.ckers.org/blog/20090617/slowloris-http-dos/

答案2

级别 1:简单的 slowloris DOS


为了找到 slowloris 攻击者的 IP 地址,我使用以下命令行:

netstat -ntu -4 -6 |  awk '/^tcp/{ print $5 }' | sed -r 's/:[0-9]+$//' |  sort | uniq -c | sort -n

这将为您提供每个连接 IP 的活动连接数

如果您遭受简单的 DOS 攻击,一个拥有一个或几个 IP 的小子,拥有 50-100 个连接(或更多)的小子很可能是您可以丢弃的 slowloris 攻击者。

如果您在攻击期间连接到服务器,这将“实时”检测并丢弃(使用 iptables 或您首选的 hlfw)它们。

在 Apache 日志中添加处理时间(%D 或 %T 参数)也可能有助于通过分析日志来“事后”检测 slowloris 攻击,如果您的日志中没有此信息,您将无法找到任何有趣的东西。请参阅http://httpd.apache.org/docs/current/mod/mod_log_config.html用于日志配置。

第 2 级:真正的大型 Slowloris DDOS


netstat(使用 watch netstat 进行刷新)仍然可以帮助您看到某些 IP 始终处于连接状态

为了对抗 slowloris,在 apache 上安装 reqtimeout 模块并进行设置,例如:

http://pastebin.com/3BNNwfyb

此后,您在 access_log 中看到的每个 408 都有 99.999% 的概率确定是 slowloris 攻击者的 IP。

使用 reqtimeout apache 模块,你可以轻松地在一台不错的专用服务器上应对数千个 ip 和每秒数千个数据包

Iptables 还可以提供一些帮助,例如:

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j DROP

相关内容