Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
stop-bots — 自动阻止恶意机器人访问您的服务器 | Kitploit
工具/GitHubGitHub/ivankovic/stop-bots
防御工具配置审计信息收集Web安全网络安全实用工具与框架入侵检测反机器人日志分析
GitHubivankovic/stop-bots

stop-bots

自动阻止恶意机器人访问您的服务器

3963天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

Stop Bots

CI crates.io Coverage License: AGPL v3+

一个 TUI、一个 Web 控制台和一个 CLI,帮助你配置服务器以阻止恶意机器人,而无需隐藏在 CDN 后面。

它与 NGINX 和你现有的防火墙(nftables 或 iptables)协同工作:

  • NGINX 配置。 - 它按类别(扫描器、搜索引擎、AI 爬虫)对已知机器人进行分类,并通过向你的站点配置注入规则来阻止或允许它们。它扫描 NGINX 日志以动态检测机器人并阻止它们,即使还没有任何规则集跟踪它们。
  • 防火墙脚本。 - 阻止整个国家、数据中心 IP 范围、已知机器人 IP 范围,或任何反复尝试登录你的服务器但失败的 IP 地址。每次阻止都会记录其存在的原因。

五个屏幕依次展示:Dashboard、Bot settings、Firewall、NGINX 和 Blocks

该应用会尽力避免将你锁在服务器之外,但使用风险由你自己承担。另请注意,它采用 AGPL 许可,因此如果你将其用于商业用途,请确保遵守该许可。

快速开始

安装

在 Debian 或 Ubuntu 上,从 APT 仓库安装:

curl -fsSL https://ivankovic.github.io/stop-bots/key.gpg \
  | sudo tee /usr/share/keyrings/stop-bots.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/stop-bots.gpg] \
https://ivankovic.github.io/stop-bots stable main" \
  | sudo tee /etc/apt/sources.list.d/stop-bots.list
sudo apt update && sudo apt install stop-bots

该软件包提供 man stop-bots(以及每个动词对应的手册页,例如 man stop-bots-batch)以及 bash、zsh 和 fish 补全。它不安装任何服务,也不启动任何内容。

或者从 crates.io 安装,需要 Rust 1.88 或更高版本:

cargo install stop-bots

或者从 GitHub releases 下载适用于 x86_64 或 aarch64 Linux 的静态二进制文件。

支持的平台

  • Debian 和 Ubuntu,搭配 systemd 和 NGINX。 这是经过测试的环境。install 会拒绝非 Debian 或其衍生版本的主机。
  • 不支持 Apache 或 Caddy。 它们的访问日志或许可以解析,但所有写入 Web 服务器 配置的操作都仅限 NGINX。
  • 运行时依赖: 防火墙需要 nft,或 iptables-restore 和 ip6tables-restore; 其余功能需要 nginx。NGINX 运行在容器中也可以——参见 在容器中运行 NGINX。

在 TUI 中

  1. sudo stop-bots 启动 TUI。它需要 root 权限:它会重写 /etc/nginx 并加载防火墙 规则。
  2. u 下载所有列表:机器人列表、爬虫 IP 范围,以及你启用的任何订阅源或国家/地区。
  3. 检查。Dashboard(1)包含主机级策略:哪些机器人类别被阻止、 国家/地区,以及读取日志的检测器。在 NGINX 屏幕(4)上,r 查找你的 站点。Blocks 屏幕(5)列出检测器或你添加的每条规则,以及原因。
  4. a 应用所有内容。它首先显示将会发生的变化——文件、添加和 删除的规则,以及锁定检查的结论(d 查看差异)——然后询问。
  5. sudo stop-bots install firewall 使已应用的规则在重启后仍然有效。没有它, 重启后所有规则都会丢失。
  6. sudo stop-bots status 检查内核、单元和文件,并说明缺少 什么。

通过 CLI 执行相同操作,用于脚本

sudo stop-bots status
sudo stop-bots batch --dry-run --diff
sudo stop-bots batch --apply
sudo stop-bots install firewall
sudo stop-bots status

batch --dry-run 不会下载或扫描任何内容:在全新安装时,它会显示二进制文件中内置的机器人列表中的 NGINX 块,并且还没有防火墙规则,因为尚未从你的日志中读取任何内容。不带 --apply 的 sudo stop-bots batch 会执行下载和扫描,并写入文件以供审查,但不会强制执行它们。关于 batch 的功能,请参阅无人值守,来自 cron。

撤销

sudo stop-bots uninstall all --dry-run
sudo stop-bots uninstall all

第一个列出每一步,第二个执行它们。参见 升级与卸载。

它防护什么

使用 NGINX 配置

  • 已知机器人,按类别(扫描器 / 搜索引擎 / AI 爬虫),来源于 ArcJet 的 Well-Known Bots、 ai.robots.txt 以及 NGINX Ultimate Bad Bot Blocker 列表。屏蔽某个类别会向每个站点的 NGINX 配置注入一条 if ($http_user_agent ...) 规则。

  • 请求过多,通过 NGINX 自身的速率限制。

  • 先礼后兵 —— 生成一个 robots.txt,列出你正在屏蔽的每个机器人,供遵守它的爬虫读取,外加下方的蜜罐路径。

  • 除你另有说明之处 —— 按站点的路径豁免,以及受信任的地址和用户代理(trust),任何屏蔽、列表或速率限制都不适用于它们。

  • 看起来不像浏览器的请求,按站点。六条独立规则,每条都有自己的开关,且默认全部关闭 —— 每条规则一个开关,这样如果你自己的某个东西停止工作,你能判断是哪条规则导致的:

    规则除机器人外还会拒绝
    HTTP/1.0 和 HTTP/1.1不支持 HTTP/2 的爬虫和 API 客户端
    无 Accept 头某些 API 客户端不发送
    无 Accept-Language隐私工具会将其剥离
    空/缺失的 User-Agent脚本和健康检查常常省略它
    Host 是裸 IP会破坏通过 IP 访问站点
    TLS 1.0 / 1.1仅限非常旧的客户端

被屏蔽的请求实际会得到什么

有七种选择:

选项用途
403 Forbidden(默认)表明屏蔽是故意的;是唯一一个被误伤的人能据此采取行动的选项
404 Not Found隐藏任何被屏蔽的迹象
410 Gone请求行为良好的爬虫永久丢弃该 URL —— 当你是在拒绝爬虫而非攻击者时,优先用它而非 403
429 Too Many Requests告诉有礼貌的客户端退避并重试
418 I'm a teapotRFC 2324 的玩笑。它能用;只是未在 IANA 注册,且 NGINX 发送它时带空响应体
444 close connection完全不回复;最省资源,但与服务器宕机无法区分
Tarpit回复 403,但以每秒一字节的速度缓慢发送响应体,让客户端等待而不是继续前进

对于误报,tarpit 是最温和的选项 —— 被误伤的客户端只是被拖慢,而非被拒绝 —— 而对机器人来说成本最严苛,其连接会一直闲置。选择它之前需要知道一件事:它同样会在整个过程中占用你的一个 worker 连接,因此大量被 tarpit 的客户端会与真实访客争夺 worker_connections。

从你的日志中自动进行

以下每一项都是 Dashboard 的 "Automatic blocking" 面板上的独立开关,或 CLI 上的 set-detector。每一项都会添加一条定时的防火墙屏蔽。使用 nftables 时,内核会在其到期时解除;使用 iptables 时,它会一直保留到脚本下次被应用。

检测是按窗口进行的:检测器只统计其窗口内日志显示的内容(一天,或下方三个行为类检测器为一小时;set-detector --window-hours 可更改),且一次屏蔽会消耗掉促成它的证据。因此,过期的屏蔽只会因新的违规而再次出现,而首次扫描绝不会因旧日志行而屏蔽。list-detectors 显示每个检测器的开关、屏蔽时长、阈值和窗口。

它们运行在一个内部定时器上,每分钟重新读取你的 SSH 和 NGINX 访问日志 —— 但仅在 TUI 或 Web UI 运行时。 两者任一都保持相同的调度、相同的数据库,因此让 Web UI 保持运行就足够了;两者都不运行时不会检测任何东西。对于完全没有 stop-bots 进程的服务器,参见下方的无人值守,通过 cron。

前五个在新数据库中默认开启:

  • SSH 和 Web 扫描器:有大量失败 SSH 登录,或许多不同 404 路径的 IP。绝不会是最近有成功 SSH 登录或控制台登录的 IP,或者对于 Web 而言,位于已知爬虫公布的 IP 范围内的 IP。对控制台本身的请求绝不会被任何检测器统计,因此在控制台中检查攻击不会屏蔽你。
  • 伪造爬虫:任何声称是 Googlebot、Bingbot 或 GPTBot,却来自该爬虫自己的运营方未公布的地址的请求。这是最廉价的常见伪装。在这些列表实际被获取之前不起作用。
  • 探测暴露的机密:对 /.env、/.git/config、/wp-config.php 及类似路径的单次请求即立即封禁。内置列表刻意省略了在某些地方合法的路径 —— /wp-login.php、/wp-admin/、/xmlrpc.php、/phpmyadmin —— 因为锁死你自己的管理员会比漏掉一个反正会被 404 检测器捕获的扫描器更糟。用 set-probe-paths 添加你自己的路径。
  • 注入尝试:携带漏洞利用载荷的请求 —— 在路径、查询字符串、用户代理或 referer 中 —— 例如 Shellshock、Log4Shell ${jndi: 查找、PHP-CGI allow_url_include 漏洞利用、$(wget …) 或 ../../,无论其如何编码。一次请求就足够,且屏蔽持续一周。人可能输入的文本,例如 /etc/passwd 或 union select,只在搜索框和 referer 之外才计数,因此在博客中搜索它是安全的。

默认关闭:

  • 蜜罐:一个仅在生成的 robots.txt 中作为 Disallow: 公布、且无处链接的路径。到达它意味着无视 robots.txt,理应被封禁。需要开启 robots.txt 生成才能工作。

另外三个检测器看的是客户端行为而非它请求什么。三者默认全部关闭,因为每个都有误报 —— 且三者都豁免已验证的搜索引擎爬虫,否则它们会匹配上每一个:

  • 不获取任何资源:许多不同页面却没有一个样式表、脚本或图片。浏览器会加载与页面配套的内容。不会捕获 API 客户端(它统计的是不同路径,而 API 客户端命中的很少)或缓存良好的回访访客(304 算作已获取的资源)。在完全不提供任何资源的站点上帮不了你。
  • 轮换用户代理:来自一个地址的多个身份。可能会屏蔽在一个 IP 上呈现许多真实浏览器的运营商、校园或办公室网关。
  • 无 referer 的爬取:许多不同的深层页面,却从无 Referer。会被 Referrer-Policy: no-referrer 和隐私工具削弱;不同路径阈值使其可用。

任何检测器都不会屏蔽 Cloudflare 边缘地址 —— 屏蔽一个边缘会屏蔽所有经由它路由的人。如果你的站点在 Cloudflare 后面,且 NGINX 记录的是边缘而非访客,检测器就谁也屏蔽不了。此时 status 会警告(cdn-edges)并给出让 NGINX 重新记录访客的 set_real_ip_from 和 real_ip_header 行。

按地址

  • 整个国家,通过 IPdeny 的聚合 CIDR 列表 —— 屏蔽特定国家,或切换到允许列表模式并屏蔽其他所有。允许列表模式需要 nftables。
  • 已知恶意地址,通过第三方列表:FireHOL level 1、Tor 出口节点和 blocklist.de。全部默认关闭。
  • 整个托管服务商:AWS、Google Cloud 和 DigitalOcean 公布其地址空间,而住宅访客不会从那里浏览。它们会屏蔽托管在那里的每一个访客,包括 VPN 端点、企业出口和 API 客户端,而不仅仅是机器人。默认关闭。
  • 相邻地址,可选:当同一 IPv4 /24 中的多个地址在同一次扫描中被标记时,屏蔽该 /24(set-subnet-escalation)。默认关闭 —— 因为三个行为不端就屏蔽 256 个地址,按设计就是附带损害。(IPv6 不同,无需开关:一次检测总是屏蔽 /64,因为一个 /64 就是一个 LAN,等同于单个 IPv4 地址所代表的东西。屏蔽 IPv6 攻击者恰好使用的单个地址什么也阻止不了 —— 他们还有 2^64 个。)
  • 其他任何东西,手动。Firewall 屏幕从其失败 SSH 登录列表中屏蔽一个地址,或从其正在通过的列表中永久屏蔽一个用户代理。任何其他地址或范围用 CLI 上的 add-firewall-rule。

没有你就什么都不会发生

每个决策都是生成的,绝不自动应用。

一次渲染会写入 /etc/stop-bots/firewall.next.nft(或 iptables 的 firewall.next.sh),没有任何东西会加载它。只有成功的应用才会把它复制为 firewall.nft,即启动单元加载的脚本。有三种方式会应用,且都需要你主动请求:

  • 在 TUI 中,a("apply everything"),或勾选 "apply after writing" 后按 F。
  • 在 Web 控制台中,"Apply everything…" 按钮,或防火墙面板中的 "run it after writing"。
  • 在 CLI 上,render-firewall --apply 和 batch --apply —— 参见无人值守,通过 cron。

a 和 "Apply everything…" 会先显示将发生什么变化 —— 文件、添加和移除的规则,以及锁定检查的结论,可按需显示 diff —— 然后询问。从 CLI,batch --dry-run 打印相同内容且不做任何更改;--diff 添加每个文件的统一 diff。

两个开关让内部定时器替你应用:set-auto-apply(NGINX,每小时)和 set-auto-apply-firewall。除非你打开它们,否则两者都关闭,且第二个除非锁定检查能实际运行,否则拒绝应用。

NGINX 侧同样如此:更改设置只会改变将要写入的内容。NGINX 屏幕会将每个站点显示为 STALE,直到你应用。

下载工具