kernel.org 基础设施的管理员 Konstantin Ryabtsev 公布了对 git.kernel.org 服务流量的分析结果,该服务允许查看与内核开发相关的项目的 Git 存储库的内容。 Linux该服务每天处理约 6 万个提交信息请求,其中 66% 来自机器人,这些机器人会被 Anubis 系统拦截。33% 的请求会经过 Anubis 系统的验证,该系统只允许在暴力破解一个 JavaScript 值后才允许访问,该值的 SHA-256 哈希值与服务器发送的字符串结合后,必须包含一定数量的前导零(此任务需要 CPU 资源来求解,但验证不需要资源)。
虽然无法准确判断这 33% 的请求者中哪些是真人,哪些是高级机器人,但根据请求的性质,可以得出结论:合法请求的总体占比约为 2%,其余 98% 来自爬虫程序。机器人的一个特征是直接请求随机旧分支中不太可能被真人使用的旧提交。机器人活动会给系统带来巨大的负担。 伺服器 因为机器人不是通过“git clone”操作一次性下载所有代码和提交历史记录,而是发送数十亿个请求,通过网页界面尝试所有可能的选项,并反复使用不同的参数请求相同的数据。
通过以下方式屏蔽机器人 IP地址 随着僵尸网络活动或浏览器插件变现,僵尸程序转而使用数百万个来自家庭或移动网络的随机IP地址发送请求,自主系统很快就停止了工作。每个地址仅发送4-5个请求,因此在防火墙层面进行拦截毫无用处。
阿努比斯系统一度有效阻止了机器人程序,但随着时间的推移,机器人程序逐渐适应了阿努比斯提供的计算方式。例如,机器人程序学会了解决难度等级为5的问题,但提高难度等级却带来了问题,因为即使是5级问题也需要几秒钟的计算时间,这对合法用户来说非常烦人。
因此,在 kernel.org 基础设施中处理爬虫请求消耗的资源比所有其他类型的合法操作(包括“git clone”)都要多。 服务器在任何给定时间,服务于 git.kernel.org 的 90 个 CPU 核心中,总有 14 到 16 个核心忙于向机器人显示 Git 提交信息。为了减轻负载,管理员目前正在尝试缩减服务的功能,禁用一些资源密集型操作,限制匿名访问,并减少可用于导航的链接数量。
来源: opennet.ru
