尽管使用了 mod_evasive,IP 还是会被淹没吗?

尽管使用了 mod_evasive,IP 还是会被淹没吗?

我有一个运行 PHP5、prefork MPM、eaccelerator 和 modevasive 的 Apache 2 服务器。

我的服务器有时会宕机,显然是由于某些 IP 的泛滥造成的。至少这是我通过运行 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 确实会将此 IP 记录在其日志中,但根本无法阻止此问题!

即使我重新启动 apache2 和网络,服务器仍然会再次卡在达到其 maxclients 设置的位置。

知道我能做什么吗?

我的模式化配置是:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 20
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10

答案1

低限

您的限制可能太低了。您的限制是每秒 20 次。如果攻击者的攻击次数低于此限制,则不会触发拦截。

如果他们访问的资源是进程密集型的(例如搜索功能),那么非常低的请求率可能会导致系统崩溃。

您可能需要根据攻击模式对块进行微调。

mod_evasive 中包含一个 test.pl 脚本,请尝试一下,看看是否可以触发阻止。

目标网址

另外,IP 访问的是什么?尝试在 Apache 中打开服务器状态并检查 URL。这将让您知道他们访问的是同一个页面还是不同的页面。这将让您知道 PageCount 或 SiteCount 是否更合适。

检查日志中的 IP,看看它们的连接速率。使用它来调整限制。请注意,限制是针对每个子进程的。不能保证它们会命中相同的子进程。

洪水泛滥

最后,我见过攻击者一次发起数十个连接的洪水攻击。在这种情况下,dos evasive 可能没有时间做出响应。它会阻止未来的请求,但如果已经发起了 100 个请求,那就太晚了。在这些情况下,使用 mod_dosevasive 的功能调用 iptables 并在防火墙处执行完全丢弃。

每个孩子的最大请求数

您的 Apache 的 MaxRequestPerChild 设置是什么?速率限制是按每个子级进行的。我见过 MaxRequestPerChild 太低而导致 mod_evasive 无法工作的情况。通常这不是问题,但需要检查一个方面。

相关内容