我有一个运行PHP5的Apache 2服务器,prefork MPM,eaccelerator和modevasive。
我的服务器有时会下降,显然是由于某些IP泛滥。 至less这是我从运行netstat的理解。 我得到这样的事情:
tcp 0 0 my.ip.is.here:80 88.160.126.117:55864 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:57073 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:56989 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57813 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57695 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:57274 ESTABLISHED tcp 602 0 my.ip.is.here:80 80.214.0.41:51131 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:57513 ESTABLISHED tcp 0 0 my.ip.is.here:80 77.88.31.248:64551 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:55131 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57565 ESTABLISHED tcp 357 0 my.ip.is.here:80 209.85.228.92:51134 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57817 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:53902 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:57060 ESTABLISHED tcp 718 0 my.ip.is.here:80 82.252.2.103:49506 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57553 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57692 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:55571 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57762 ESTABLISHED tcp 639 0 my.ip.is.here:80 88.160.126.117:57771 ESTABLISHED tcp 1750 0 my.ip.is.here:80 41.105.112.207:19940 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:57187 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:56782 ESTABLISHED tcp 668 0 my.ip.is.here:80 86.72.212.166:64263 ESTABLISHED tcp 750 0 my.ip.is.here:80 88.160.126.117:57681 ESTABLISHED tcp 0 0 my.ip.is.here:80 88.160.126.117:56741 ESTABLISHED
所以看起来像88.160.126.117是泛滥我的服务器。 (每次都是不同的IP,所以我不能手动阻止它)Mod_evasive会在日志中logging这个IP,但是根本不能阻止这个问题!
即使当我重新启动apache2,networking,服务器再次卡住达到其maxclients设置。
任何想法我可以做什么?
我的modevasiveconfiguration是:
DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 20 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10
低限
你的限制可能太低。 你的限制是20 /秒。 如果攻击者低于这个限制,那么该块将不会触发。
如果他们正在访问的资源是过程密集的(例如searchfunction),则非常低的请求速率可能会使系统失效。
您可能需要根据攻击模式对块进行微调。
有一个包含在mod_evasive中的test.pl脚本,试试看看你是否可以触发一个块。
目标url
另外什么是IP访问? 尝试在Apache中打开服务器状态并检查URL。 这会让你知道他们是否在同一页面或不同的页面。 这会让你知道SiteCount的PageCount是否更合适。
检查日志中的IP,查看它们连接的速率。 使用它来find调整的限制。 注意限制是每个孩子。 他们不能保证他们会碰到同一个孩子的过程。
快速洪水
最后,我看到了攻击者立即进行数十次连接的洪水。 在这种情况下,DOS回避可能没有时间来回应。 这将阻止未来的要求,但是如果已经有100个,那就太迟了。 在这些情况下,使用mod_dosevasive的function来调用iptables,并在防火墙上完全丢弃。
MaxRequestPerChild
你的Apache的MaxRequestPerChild设置是什么? 限速是以每个孩子为基础的。 我见过MaxRequestPerChild太低而无法使mod_evasive工作的情况。 通常不是问题,而是检查的一个方面。