我在负载均衡器后面有两个 Apache 实例,根据请求类型将请求传输到其中。
现在我想要的是:当我从某个 IP 地址收到太多事务时,我想阻止该 IP 几秒钟,并向客户端发回一些响应,表明您发送了太多请求。
现在的问题是:有什么方法可以在负载均衡器上处理这种情况,而不是调用我的实例。
我该如何在 Apache 上处理这个问题?我使用的是 Apache 2.2 版本。
答案1
我建议您在 Apache 中设置 mod_evasive。
mod_evasive 是 Apache 的规避策略模块,可在发生 HTTP DoS 攻击或暴力攻击时提供规避操作。它还被设计为一种检测和网络管理工具,并且可以轻松配置为与 ipchains、防火墙、路由器等进行通信。 mod_evasive 目前通过电子邮件和系统日志工具报告滥用行为。
要在 Debian 中安装它:
apt-get install libapache2-mod-evasive
然后编辑 mods-available/evasive.conf。您的值可能会有所不同,具体取决于服务器上拥有的虚拟主机数量。
<IfModule mod_evasive20.c>
DOSHashTableSize 2048
DOSPageCount 50 <---- visites to site in the given time
DOSSiteCount 500 <---- to pages
DOSPageInterval 2.0 <---- 2 seconds
DOSSiteInterval 1.0
DOSBlockingPeriod 600.0 <--- seconds
DOSLogDir /var/log/apache2/evasive
DOSWhitelist 127.0.0.1
DOSWhitelist x.x.x.*
</IfModule>
要启用新mod_evasive
配置,您必须重新启动 Apache。