问题:
我pipe理一个拥有很多dynamic生成页面的网站。 Google,Yahoo和其他search引擎每天都会下载100K以上的页面。 有时候,我也遇到了“黑客”试图大规模下载整个网站的问题。
我想阻止“黑客”的IP地址,同时保持search引擎漫游器爬行页面。 做这个的最好方式是什么 ?
注意:
现在我正在解决这个问题如下。 每隔X秒将每个页面请求的ip保存到一个文件中。 我有一个crontab脚本,每30分钟计算重复的IP。 对于重复次数过多的IP,脚本会检查一个主机名 – 如果它不属于Google / Yahoo / Bing /等,那么我们有一个被禁止的候选人。 但我并不喜欢我的解决scheme,认为自动禁止可以做得更好,或者使用一些开箱即用的解决scheme。
你没有说明你的操作系统,所以我会高兴地告诉你OpenBSD的版本:在pf.conf在你的规则集中放置如下内容(对于每10秒最多100个conns):
表<bad_hosts>仍然存在
从<bad_hosts>快速阻止
传入$ ext_if proto tcp到$ webserver port www keep state \
(max-src-conn-rate 100/10,重载<bad_hosts> flush global)
您可以在一两天后添加白名单和cron作业从bad_hosts踢地址。
我会认为fail2ban是答案。
您可以使用白名单来阻止search引擎被阻止。
看看简单事件相关器 。 它可以自动运行命令(即添加一个块到iptables )后,一段时间内看到一定数量的正则expression式匹配的行。 它也可以定义一个到期的“上下文”。 当上下文到期时,您可以解除阻塞的IP(即从iptables删除)。