在识别和限制机器人速率时我应该考虑哪些事情?

在识别和限制机器人速率时我应该考虑哪些事情?

// 不确定这个问题是否最适合 serverfault 或 webmasters stack exchange...

我正在考虑对我的网站进行访问限制,因为识别和阻止恶意机器人占用了我大部分的时间。

例如,我的网站有机器人通过 vpn/代理访问,每个 IP 每 1-2 小时发出 10k - 15k 个请求,然后我才发现并阻止它们。每天我都会看到大约 100-200 个这样的机器人。它们会减慢网站速度,甚至可能试图复制内容(不确定它们的目的是什么)。

由于速率限制措施有点极端,而且有很多事情可能出错,因此我希望找出原因:

  • 阻止恶意机器人的一些最佳实践/技术/方法
  • 哪些事情可能会出错?总是有更多 :)

我的想法是识别过去 24 小时内对某些内容页面(例如非图像)的超过 x 个请求(来自同一 IP),如果 24 小时内请求超过 100 个,则显示带有速率限制响应代码的验证码。

然后,为了允许“良好/已知机器人”,我想通过它们的 IP 主机名来识别它们(如果主机名 IP 验证回相同的 IP),我发现 90% 的已知机器人使用正确的主机名(例如crawl-[foo].googlebot.com

这样我就可以将 Google、Yandex、Bing 等列入白名单。

列入白名单.google.com(不是.googlebot.com)不是一个好主意,因为有些主机像google-proxy-[foo].google.comrate-limited-proxy-[foo].google.com被一些应用程序(如谷歌翻译)使用,有些人使用/滥用它们来阅读被阻止的网站。

我无法阻止这些 Google 服务 IP/主机名,因为我认为它们也被 Gmail 使用,当我发送包含来自我的网站图像的电子邮件时,Gmail 可能会使用这些主机名访问该网站。

无法阻止非住宅 IP eider(例如数据中心),因为...很难,并且一些普通用户使用具有类似 IP 的 VPN。

按用户代理阻止 = 0;按主机名阻止 = 0如果主机名未验证是否为相同的 IP。

  • 还有哪些类似的事情需要考虑?我不想冒险降低搜索结果或阻止普通用户。

Cloudflare 帮不上什么忙,1)他们可能会将我网站的缓存请求提供给抓取工具,而我却无法看到/阻止该请求。2)他们没有阻止我现在收到的许多可疑请求 3)很多时候他们都会当我没有从该 IP 发出自动/可疑请求时,我会在各个网站上进行验证码,因此我认为尽管他们拥有大量有关 IP 信誉和用户行为的数据,但他们仍无法正确识别不良流量。

在此处输入图片描述

答案1

识别和阻止恶意机器人占用了我大部分的时间。

通常,当我看到这样的评论时,我会认为管理员有太多空闲时间并且可能关注了错误的问题。

机器人是互联网背景噪音的一部分,当它们没有以拒绝服务级别的速率运行时,您可能会看到的任何“问题”包括:

  • 信噪比较差的结果 - 您的网站看到的“真实”访问者太少,以至于通常水平的机器人活动看起来比客观上更为重要。
  • 由于代码不良以及网站(后端)优化太少或没有优化而导致的。

当然凡事都有例外。


一般来说,所有提高网站性能的努力都会减少机器人的影响,并且也会直接使您的真实用户受益。

识别瓶颈,改进昂贵的数据库查询,添加缓存等。

考虑委托问题并订阅 CDN。将您的网站配置为仅允许访问来自 CDN 的请求并阻止来自其他地方的直接请求。让 CDN 处理机器人和爬虫。


这个问题可能更适合https://webmasters.stackexchange.com/因为我对此并不了解,但也许相关的搜索引擎有一个网站所有者管理面板,允许网站管理员调整他们在您的网站上进行的实际抓取量。

真正的机器人会遵守robots.txt爬行指令,因此阻止所有忽略那里的指令的行为应该是安全的。

您甚至可以考虑添加一个部分,禁止访问当前未使用的 URI 路径,例如/junk/

User-agent: *
Disallow: /junk/

然后将其用作“陷阱”,并输入直接访问该 URI 的虚假爬虫到您的自动化系统中(例如失败2ban 并立即封锁这些。


阻止 IP 地址之前的一般建议:

  • 在开始阻止有效的机器人和爬虫之前,请确定哪些搜索引擎为您的网站带来实际流量和访问者,并确保您可以将这些搜索引擎从阻止列表中排除。

    以谷歌为例:https://developers.google.com/search/docs/crawling-indexing/verifying-googlebot

  • 考虑到许多组织不允许其用户直接访问互联网,并且来自此类组织的所有访问者似乎都会使用相同的(少数)IP 地址,即其代理服务器使用的 IP。


相关内容