Apache:是否限制每个IP的请求/流量?


12

我只想允许一个IP每天最多使用1GB的流量,如果超出该限制,则该IP的所有请求都将被丢弃,直到第二天。但是,如果有一个简单的解决方案,即在一定数量的请求后断开连接,就足够了。

已经有某种可以执行此操作的模块了吗?还是我可以通过iptables之类的东西来实现这一目标?

谢谢


Apache版本?
pehrs'Apr 11'10

2.2-填充字符限制

Answers:


5

如果您想要一个纯Apache解决方案,则Apache 2.0适用于bw_mod,Apache 1.3适用于mod_bandwidth。它们可以限制服务器的带宽以限制带宽使用。

还有mod_limitipconn,它可以防止一个用户与您的服务器建立大量连接。mod_cband是另一种选择,但我从未使用过。

如果您不想弄乱Apache的安装,可以将一个鱿鱼代理放在Apache的前面。它还使您可以进一步控制节流。

但是,在大多数情况下,当您要限制每个IP的带宽时,问题是几个大对象,并且当用户拉入过多数据并阻止他时,您会给出合理的错误消息。在这种情况下,编写PHP脚本并将访问信息存储在数据库的临时表中可能会更容易。


2
感谢您的建议。我已经研究过bw_mod和mod_limitipconn,但是(据我所知)都没有实现我想要的功能。mod_limitipconn只将它们一次限制为一个连接,而bw_mod仅允许我限制每个IP的下载速率。我想在一定数量的数据传输/请求后阻止它们。我实际上是在试图防御某些需要爬网我的整个网站并下载所有内容的用户。我来看看鱿鱼代理,听起来很有趣。如果那没有解决,我认为我将诉诸于修改bw_mod源。

您是否已将robots.txt设置为禁止蜘蛛?
pehrs'Apr 11'10

1
robots.txt的问题在于,(就​​像RFC 3514一样)只有好的机器人才会尊重它。
Scott Pack

是的,但是您会发现,搜寻您的网站的大多数人都使用标准工具。其中许多工具(如wget)都尊重robots.txt。Robots.txt也是通知用户您不希望他们爬网的正确方法。
pehrs'Apr 11'10

1
我已经尝试过了。起初,robots.txt就足够了,然后他们告诉Wget忽略robots.txt,所以我诉诸于阻止“无法识别的”用户代理,但随后他们欺骗了用户代理。他们倾向于发出大量的head请求,而合法的浏览器则不会,因此我可能会考虑限制head请求或完全禁用它(不太理想)。

5

这是我针对此类问题的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

解释:

  1. iptables检查源IP是否在600秒间隔内在/ proc / net / ipt_recent / ATACK文件中列出5次或多次,以及是否为新请求。如果是,请拒绝;其他

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

可以满足我的需求。


3

您是否看过类似fail2ban的工具?如果对您来说可能有点麻烦,但这将使您限制任何给定IP所允许的请求数量。它可以通过查看日志来工作,并且您可以设置允许每次违规次数的规则,因此对您而言每天可能是请求。一旦他们过去了,它可以做一些事情,例如使用ipchains阻止他们。

我已经使用它非常成功地阻止了对邮件服务器的DDoS攻击。但是,它可能会消耗大量的处理器功率。


当前;您将自己实施此操作。希望它能起作用
Dark Star1 '11

1

尝试mod_dosevasivemod_security

mod_dosevasive 可以配置为在指定时间范围内向站点指定数量或页面请求后禁止IP。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.