我正在尝试在 CentOS 上为 Apache 2.4.6 配置 mod_evasive,版本 7.5.1804。我全新安装了 CentOS,全新安装了 Apache,无需提供任何页面或任何东西(只是示例索引.html说你好世界(,我使用本教程安装了mod_evasive:https://www.digitalocean.com/community/tutorials/how-to-protect-against-dos-and-ddos-with-mod_evasive-for-apache-on-centos-7
一切正常,除非我必须运行测试脚本,该脚本应将请求发送到服务器并因mod_evasive而出现 403 错误。相反,我收到 400 个错误请求。
我为 IPtables 切换了防火墙,并且我打开了端口 80,实际上,示例页面在浏览器中工作正常。此外,SELinux 模式设置为宽松。
有什么建议吗?
您很可能必须更改 perl 脚本(通常保存在/usr/share/doc/libapache2-mod-evasive/examples/test.pl
中(才能完成这项工作,例如
原行:
print $SOCKET "GET /?$_ HTTP/1.0nn";
返工线:
print $SOCKET "GET /?$_ HTTP/1.0rnHost: 127.0.0.1rnrn";
从 https://centosfaq.org/centos/apache-mod_evasive-problem-with-testpl/
问题不在于mod_evasive或其配置。就我而言,我不得不像下面这样调整mpm_prefork_module配置mod_evasive以使配置正常工作:
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxRequestWorkers 80
MaxConnectionsPerChild 0
基本上通过设置StartServers = MinSpareServers = MaxSpareServers = {your_magic_number}
和设置MaxConnectionsPerChild=0
将服务器数量固定为常量,这样就不会产生新的服务器进程,也不会发生连接的重新循环,允许Child持有无限多个并发连接。
希望这能挽救你的一天!
几天后,我发现mod_evasive提供的测试脚本出错...
我更正了它,发现安装没问题。