我们最近开始遇到麻烦,因为网络爬虫/DDoS 服务 80legs 每周都会因为其滥用抓取行为而导致我们的服务器瘫痪几次。最初,我们只是在受影响网站的文件底部放入以下内容.htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*80legs
RewriteRule .* - [F,L]
</IfModule>
然而,我们现在只需要在所有服务器的服务器级别上阻止它们。
根据 Apache 文档,此配置可以有效地放置在服务器配置部分中,即httpd.conf
,但这样做没有效果。在启用了虚拟主机的 Apache 服务器上,我们是否可以采取一种特定的方法来根据服务器级别的用户代理阻止/拒绝/重定向请求?
注意:无法在防火墙级别阻止此操作,因为:
- 80legs 使用本质上是选择加入的僵尸网络来抓取网页。他们最近的“事件”涉及来自世界各地大约 900 个不同网络/IP 块的 5250 个唯一 IP。
- 我们目前还没有能力进行深度包检测。
答案1
根据http://www.80legs.com/spider.html他们的用户代理字符串是008
,而不是您使用的“80legs”。
此外,他们说他们的爬虫尊重robots.txt
文件,所以你应该尝试一下。
更新您的 robots.txt 以包含:
User-agent: 008
Disallow: /
答案2
抱歉,但我不知道您说的“we just need to block them at the server level across all servers
如果不是”是什么意思block this at the firewall
。
确实,这正是我要阻止他们的地方。使用 fail2ban。
他们最近的一次“事件”涉及来自世界各地大约 900 个不同网络/IP 块的 5250 个唯一 IP
没关系 - 编写操作脚本以将阻止设置为(例如)8 位网络很简单 - 或者如果您喜欢冒险,可以绘制出 ASN 并阻止它。使用非常长的规则链会影响性能(但听起来比允许流量通过要小得多),但您只需调整禁令的持续时间即可防止这种情况发生。
我们目前还没有能力进行深度数据包检测
不需要 - 您使用 Apache 来处理 HTTP 流量并重定向到触发 fail2ban 来执行其操作的脚本。