我遇到了一个问题,某个人不断以激进的方式抓取我的网站;浪费带宽和 CPU 资源。我已经实施了一个系统,该系统跟踪我的 Web 服务器访问日志,将每个新 IP 添加到数据库,跟踪从该 IP 发出的请求数量,然后,如果同一 IP 在一定时间内的请求数超过一定阈值,则通过 iptables 将其阻止。这听起来可能很复杂,但据我所知,没有现成的解决方案旨在将某个 IP 限制在一定数量的带宽/请求范围内。
这对于大多数爬虫来说都很好,但一个非常执着的人每次被阻止时都会从他/她的 ISP 池中获取一个新 IP。我想完全阻止 ISP,但不知道该怎么做。
对几个示例 IP 进行 whois 查询后,我发现它们都共享相同的“网络名称”、“mnt-by”和“原点/AS”。有没有办法查询 ARIN/RIPE 数据库中所有使用相同 mnt-by/AS/网络名称的子网?如果没有,我还能如何获取属于此 ISP 的每个 IP?
谢谢。
答案1
whois [IP address]
(或whois -a [IP Address]
)通常会为您提供属于相关公司/提供商的 CIDR 掩码或地址范围,但解析结果则留给读者作为练习(至少有 2 种常见的 whois 输出格式)。
请注意,这种全面封锁也可能会淘汰合法用户。在采取这种方法之前,您应该联系相关 ISP 的滥用服务台(通常在whois
其网络封锁或 DNS 域的信息中列出,否则 abuse@ 是一个不错的起点),看看是否可以通过外交手段而不是技术手段解决问题。
另请注意是一些预先制定的解决方案,用于限制 IP 每秒的请求数 - 查看模式QoS或您系统的防火墙/流量整形功能。
答案2
我自己想出来的。算是吧。
robtex.com 列出了给定 AS 的所有已公布的 IP 范围: http://www.robtex.com/as/as123.html#bgp
仍然不知道 robtex 如何或从何处检索此信息。如果有人愿意插话并解释数据来自何处,那就太好了。
答案3
由于您可以访问 iptables,因此我假设您在系统上具有 root 访问权限。在这种情况下,我建议安装 Fail2Ban,如果 IP 试图通过在 X 时间段内 N 次访问服务端口来滥用服务(HTTP、DNS、邮件、SSH 等),它将阻止该 IP(在您决定的时间内)。(所有用户决定。)
我在我的服务器上使用它,并且得到了非常好的结果。特别是当那些中国黑客想要攻击我的 SSH 时。
请访问我的主页了解更多信息。我有一篇关于 fail2ban 的博客文章。
答案4
你可以试试此工具。速度不快,但有效。