我尝试找到有关此问题的所有信息,并且了解当服务器处于 mpm_prefork 模式(而不是工作模式)时 mod_evasive 不工作的问题。
不过,我可以通过降低
StartServers
MinSpareServers
MaxSpareServers
在配置文件中。所以我的问题是:如果我配置mpm_prefork.conf
:
StartServers 1
MinSpareServers 0
MaxSpareServers 0
MaxRequestWorkers 150
MaxConnectionsPerChild 0
这基本上等同于一个实例正在运行(就像‘worker’一样),在这种情况下 mod_evasive 仍会运行,就好像服务器作为‘worker’运行一样?
这样的设置是否存在任何潜在问题?(例如许多合法请求未被处理等)?还有其他选项可以满足我的基本要求吗(mod_security 是否有用?)
我知道这不是减轻攻击的最佳方法,但我只是在寻找针对自定义爬虫的基本安全性,这些爬虫偶尔会使我的服务器每秒超载数十个请求。
答案1
看起来 mod_evasive 使用的计数器未在进程之间共享。因此每次 mpm_prefork 产生新进程时,计数器都会回到 0。
使 mod_evasive 与 mpm_prefork 协同工作的一种方法是:
- StartServers = MaxRequestWorkers = MaxSpareServers(因此所有进程都在启动时创建,不会创建或终止任何新进程)
MaxConnectionsPerChild 0
(因此进程不会被回收。然而,如果发生内存泄漏,这可能会很危险,所以您应该使用一个较大的值而不是 0)- 将 DOSPageCount 和 DOSSiteCount 除以服务器进程数
这仅基于我在自己的服务器上观察到的行为,应该仔细测试。