如何最好地防御针对Apache Web服务器的“slowloris”DOS攻击?

最近一个叫“slowloris”的剧本受到了关注。 slowloris所做的基本概念并不是新的攻击,但是鉴于最近的关注,我看到一些Apache网站的攻击略有增加。

目前似乎没有任何100%的防御措施。

我们已经确定(迄今为止)的最佳解决scheme是增加MaxClients。

这当然不过是增加了攻击者的计算机的要求,并没有实际上保护服务器100%。

另一份报告指出,在Apache服务器前使用反向代理(如Perlbal)可以帮助防止攻击。

使用mod_evasive来限制来自一个主机的连接数,并使用mod_security来拒绝看起来像由slowloris发布的请求似乎是迄今为止最好的防御。

有没有人在ServerFault遇到这样的攻击? 如果是的话,你采取了什么措施来防卫/防范呢?

注:这个问题是为Apache服务器,因为我的理解是Windows IIS服务器不受影响。

我经历过这样的袭击……在仲夏(六月二十三日)的中间,你应该在乡下喝啤酒:

我把我的Apache放在了Varnish的后面,它不仅能够防止slowloris,而且也加速了Web请求。

另外, iptables帮助了我:

 iptables -I INPUT -p tcp --dport 80 \ -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP 

此规则将一台主机限制为20个到80端口的连接,这不会影响非恶意用户,但会导致一台主机无法使用。

mod_antiloris ,就这么简单。

如果你所有的apache模块都是线程安全的,只要切换到事件或工作者MPM,slowloris就可以被击败。 ref: 这里

现在看来,没有什么更多的限制每个IP在服务器上的最大并发连接数。

有一个用户补丁,你可以尝试。 它根据服务器的负载情况修改超时时间,但考虑到其状态,您可能不想在生产计算机上使用它,而无需进行严重的testing。 看看这里。

基于iptable的防火墙应该保护您免受1个ip的多个连接。

如果这可以帮助其他人,那么有时候可以用Apache 2.2.15或更高版本来解决这个问题,具体configuration如下:

 LoadModule reqtimeout_module modules/mod_reqtimeout.so RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 

更多信息: https : //httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html