如何在IP基础上对Apache服务器进行速率限制?

我目前在PHP / MySQL中有一个自定义的实现,它跟踪网页点击,并阻止那些超过一定速率的同一个IP。 也就是说,如果一个给定的源IP在最近的Y秒内超过X次,服务器将被redirect到预定义的位置Z,并且正常的请求处理将被中止。

它工作正常,但是对MySQL有很大的压力。

所以我想知道是否有一个特殊的工具可用? 也许一个Apache模块或某种filter?

最好的

  • mod_evasive (更多地关注减lessDoS暴露)
  • mod_cband (最好的“普通”带宽控制function)

剩下的

  • mod_limitipconn
  • mod_bw
  • mod_bwshare

还有一个选项 – mod_qos

configuration不简单 – 但function强大。

http://opensource.adnovum.ch/mod_qos/

你可能可以用iptables在一个较低的水平,绕过apache / mysql一起….匹配并转发到另一个主机/端口? 我只是放弃了:

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 6 -j DROP