Apache:限制每个IP的请求数/stream量数?

我想只允许一个IP每天使用高达1GB的stream量,如果超过了这个限制,则来自该IP的所有请求将被丢弃,直到第二天。 然而,在一定数量的请求之后连接被丢弃的更简单的解决scheme就足够了。

是否有某种模块可以做到这一点? 或者也许我可以通过像iptables这样的东西来实现这一点?

谢谢

如果你想要Apache 2.0的纯Apache解决schemebw_mod和Apache 1.3的mod_bandwidth。 他们可以限制服务器的带宽以限制带宽使用。

还有mod_limitipconn,它可以防止一个用户连接到你的服务器。 mod_cband是另一种select,但我从来没有使用过它。

如果你不想搞砸你的Apache安装,你可以把一个鱿鱼代理放在Apache前面。 它也给你更多的控制节制。

但是,在大多数情况下,当您想要限制每个IP的带宽时,问题就会出现在一些大的对象上,而当用户拉太多的数据并阻止他时,您希望给出一个明智的错误消息。 在这种情况下,编写PHP脚本并将访问信息存储在数据库的临时表中可能会更容易。

这是我的这种问题的iptables解决scheme。 调整 – --seconds --hitcount根据你的需要,还iptables表。

 iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT 

解释:

  1. iptables检查源IP是否在600秒的时间间隔内在/ proc / net / ipt_recent / ATACK文件上列出5次或5次以上,如果是新请求。 如果是的话,做一个拒绝; 其他

  2. iptables检查请求是否到达端口80.如果是,打印IP和时间戳到/ proc / net / ipt_recent / ATACK和转发数据包。

它适合我的需求。

你看过像fail2ban这样的工具吗? 如果可能会让你感到有些压力,但它可以让你限制任何给定的IP被允许的请求数量。 它通过查看日志来工作,并且设置每个时间允许多less次违规的规则,所以对于你来说可能是每天的请求。 一旦他们过去了,就可以使用ipchains来阻止他们。

我已经用它来非常成功地阻止对邮件服务器的DDoS攻击。 它可以消耗大量的处理器能力。

尝试mod_dosevasivemod_security

可以将mod_dosevasiveconfiguration为在指定的数字或页面在指定的时间范围内请求到某个站点后禁止IP。