我有一个网站,其中:
- 我们目前有很多机器人试图从中国、乌克兰等地获取我们的内容(这是一个商业目录)......
- 根据 AWStats 的数据,5% 的 IP 地址“未解析”
因此我的想法是限制每个 IP 的 HTTP 请求数量(知名机器人除外,例如 Google Bot):
- 这将解决我最大的问题(机器人)
- 但这也会阻止所有“未解析 IP”流量
-> 封锁所有“未解析”的 IP 是个好主意吗?我要封锁一些合法流量吗?
答案1
仅限制每个地址的 HTTP 请求数量不会导致阻止“未解析”的 IP 地址。
实时找出“未解析”的地址将强制每个访问者至少进行一次反向 DNS 查找。这最多会增加您的初始 HTTP 响应时间,并在名称服务器不可用和超时时创建近乎 DoS 的情况 - 您确实不希望出现这种情况。
一般来说,试图保护公开内容不被机器人抓取是一项永无止境的任务——您肯定不会让每个访问者在进入您的网站之前都通过图灵测试。任何可用的方法都只能降低您的网络服务器的负载,而不能完全防止抓取。此外,与所有基于统计的区分方法一样,减少能够访问您的内容的机器人数量不可避免地会增加因您的阻止规则而感到不便的普通人类用户的数量。
答案2
我不了解 awstats 的详细信息,但我认为“未解析”状态确实适用于所有没有反向 DNS 记录的 IP 地址。阻止所有来自没有反向记录的 IP 地址的流量将杀死大量正常访问者。
尝试通过检查网站日志来选择性地阻止机器人。您可以使用 fail2ban 以自动方式阻止此流量。fail2ban 基于日志文件分析,因此您只需在 access.log 中找到一个模式并相应地配置 fail2ban。
答案3
你的提议是基于 5% 的地址相同的地址窃取您的内容 - 但您没有说是否如此。当然,我预计您会阻止大量合法流量。
我同意 syneticon-dj 所说的大部分内容,但是还有更有效的反盗链方法(试着在谷歌上搜索该术语)。检查 referer、要求会话 ID、使用 CSRF 保护但将令牌传递到 cookie 而不是表单字段中。这提供了一种识别盗链者的机制 - 就阻止他们而言,您确实希望尽早完成此操作 - 即当您从此类 IP 获得 SYN 数据包时。这意味着在防火墙上阻止他们。Fail2ban 提供了一种基于日志条目动态重新配置防火墙的方法。但请注意,iptables 规则的长链会影响延迟,进而影响吞吐量。