Answers:
如果您想要一个纯Apache解决方案,则Apache 2.0适用于bw_mod,Apache 1.3适用于mod_bandwidth。它们可以限制服务器的带宽以限制带宽使用。
还有mod_limitipconn,它可以防止一个用户与您的服务器建立大量连接。mod_cband是另一种选择,但我从未使用过。
如果您不想弄乱Apache的安装,可以将一个鱿鱼代理放在Apache的前面。它还使您可以进一步控制节流。
但是,在大多数情况下,当您要限制每个IP的带宽时,问题是几个大对象,并且当用户拉入过多数据并阻止他时,您会给出合理的错误消息。在这种情况下,编写PHP脚本并将访问信息存储在数据库的临时表中可能会更容易。
这是我针对此类问题的iptables解决方案。--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
解释:
iptables
检查源IP是否在600秒间隔内在/ proc / net / ipt_recent / ATACK文件中列出5次或多次,以及是否为新请求。如果是,请拒绝;其他
iptables
检查请求是否发往端口80。如果是,则将IP和时间戳打印到/ proc / net / ipt_recent / ATACK并转发数据包。
可以满足我的需求。
您是否看过类似fail2ban的工具?如果对您来说可能有点麻烦,但这将使您限制任何给定IP所允许的请求数量。它可以通过查看日志来工作,并且您可以设置允许每次违规次数的规则,因此对您而言每天可能是请求。一旦他们过去了,它可以做一些事情,例如使用ipchains阻止他们。
我已经使用它非常成功地阻止了对邮件服务器的DDoS攻击。但是,它可能会消耗大量的处理器功率。