我如何检测Slowloris?

我很确定我是在Slowloris攻击下。 我build立了一个iptables规则来限制与我的networking服务器的最大连接,但是我想知道如何确定它是否是一个Slowloris攻击,如果是的话,我如何find攻击者的IP地址。 我真的想把日志传递给他的ISP。

谢谢

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

为了防止攻击,我build议切换您的networking服务器软件。 我使用的是默认configuration的耐磨的切诺基。 我无法确定nginx是否易受攻击,但是lighttpd是。 我也不能确定使用一个耐用的web服务器作为代理将有所作为。

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

等级1:简单的slowloris DOS


要findslowloris攻击者的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“postmortem”攻击,如果您没有在日志中logging此信息,则无法find任何有趣的内容。 有关日志configuration,请参阅http://httpd.apache.org/docs/current/mod/mod_log_config.html

等级2:真正的大slowloris DDOS


netstat(使用watch netstat刷新)仍然可以帮助你看到一些IP只是总是连接

为了在apache上与slowloris作斗争,安装reqtimeout模块并设置它,例如:

http://pastebin.com/3BNNwfyb

在那之后,你在access_log中看到的每一个408都是99.999%,肯定是slowloris攻击者的ip。

使用reqtimeout apache模块,您可以很容易站在一个体面的专用服务器上数以千计ips和数千包/秒

iptables也可以帮助一些像这样的东西:

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