Bot 管理:免费档的一个开关与它的副作用
免费计划的 Bot 管理只有一个开关:Security → Bots 里的 Bot Fight Mode。打开之后,Cloudflare 会对判定为自动化的流量下发 JS 挑战或直接拦,判定依据是已知机器人名单、请求头一致性、浏览器指纹这类信号。它不需要你写规则,代价是你也无法精细控制——免费档的这个开关不吃 WAF 的 Skip 规则,付费的 Super Bot Fight Mode 才支持按规则放行。
所以这篇的重点不是"怎么开",而是"开之前先确认哪些流量会被误伤"。开一个开关只要两秒,把被误伤的业务找回来可能要花一晚上。
前置阅读:WAF 的规则模型见 77-waf-basics-free-rules.md,针对表单的人机验证见 81-turnstile.md。
1. 免费档到底有什么
| 能力 | 免费 | Pro / Business | Enterprise |
|---|---|---|---|
| Bot Fight Mode | 有(一个全站开关) | 有 | 有 |
| Super Bot Fight Mode | 无 | 有(可分类放行) | 有 |
| 机器人评分(Bot Score,1–99) | 无 | 无 | Bot Management 附加 |
| 按评分写 WAF 规则 | 无 | 无 | 有 |
已验证机器人字段 cf.client.bot | 有 | 有 | 有 |
| 机器人流量分析报表 | 基础 | 较完整 | 完整 |
免费档能用的判断只有两种:这个请求是不是"已验证的机器人"(Googlebot、Bingbot 这类有反向 DNS 验证的),以及 Bot Fight Mode 自己的黑盒判定。前者可以在 WAF 表达式里用 cf.client.bot 引用,后者你只能开关,看不到评分。
2. 开之前先列清单
Bot Fight Mode 处理的是"看起来像脚本"的流量。下面这些正常业务在它眼里都像脚本,打开之前逐个确认:
| 流量类型 | 表现 | 处理方式 |
|---|---|---|
| 自己的 API 客户端 | 收到 403 或挑战页 HTML | 换独立子域并关闭该子域的代理,或改走 Service Token |
| 监控探针(UptimeRobot 等) | 告警"站点返回 403" | 把探针 IP 加入 WAF 放行,或换探测路径 |
| 支付/平台回调 | 回调失败,订单状态不更新 | 回调域名单独处理,别和站点共用开关 |
| RSS 阅读器、爬虫合作方 | 抓取失败 | 用 cf.client.bot 之外的白名单思路,例如按 UA 加自定义规则放行 |
| 搜索结果预览、社交抓取 | 分享卡片无图 | 观察为主,通常影响可接受 |
清单里最容易被忽略的是第一项。很多人同一个域名既给人访问,又给自己的脚本调 API,开了 Bot Fight Mode 之后脚本全线 403,还以为是代码坏了。
3. 开启与观察
控制台路径:Security → Bots → Bot Fight Mode,打开开关。免费档没有"仅挑战 / 直接拦"的选择,行为由 Cloudflare 决定。
开启后观察两个地方:
Security → Events,按 Service 筛 bot fight mode,能看到被挑战与被拦的请求,带路径、IP、UA。这里是判断误伤的唯一入口,建议开完盯 24 小时。
Analytics → Traffic,看总请求量与 4xx 比例的变化。如果 403 曲线在开启时刻垂直上升,说明有正常流量被当成机器人。
想放行特定路径,免费档的可行做法是在 Bot Fight Mode 之外用自定义规则做 Skip——但要注意,免费档的 Bot Fight Mode 不受 Skip 影响,这条路的实际效果是把该路径的其它安全功能跳过,而不是让 BFM 放行。真要放行,只能让那段流量不走代理,或者升级到 Super Bot Fight Mode。
4. 与速率限制、Turnstile 的分工
三个手段解决三种问题,别混着用:
Bot Fight Mode 处理"全站范围内明显是脚本"的流量,粗粒度、无差别。
速率限制处理"某个路径被高频请求",按 IP 与路径计数,见 78-rate-limiting.md。它对分布式低速攻击无效。
Turnstile 处理"表单提交这个点需要确认是人",按需触发,对用户体验影响可控。登录、注册、评论、找回密码这类入口用它比全站开 BFM 精准得多。
推荐组合:BFM 关掉或只在纯展示站上开,登录与表单用 Turnstile,API 用速率限制加身份校验。这样误伤面最小,也不依赖你看不见的评分。
5. 已验证机器人字段怎么用
cf.client.bot 为 true 表示请求来自 Cloudflare 验证过的机器人(通过反向 DNS 与前缀核对),不是"看起来像 Googlebot 的 UA"。这条字段在所有套餐可用,配合自定义规则可以做"只允许已验证的爬虫抓取,其它 UA 一律挑战":
(http.user_agent contains "Googlebot" and not cf.client.bot)
这条规则拦的是冒充 Googlebot 的请求,对真爬虫无影响。SEO 相关的风险主要来自误拦真爬虫,所以规则里要把 cf.client.bot 作为放行条件,而不是只按 UA 判断。
常见问题
开了 Bot Fight Mode,API 客户端全部 403,怎么快速恢复?
先把开关关掉,确认 403 消失,再决定后续方案。长期做法是给 API 单独一个子域(例如 api.example.com),该子域不开 BFM,用速率限制与 API Key 做防护。
会不会影响 SEO?
真爬虫有验证机制,通常不受影响。风险在于某些小众爬虫(区域搜索引擎、SEO 工具)没被列入已验证名单,会被挑战。上线后看 Search Console 的抓取统计,出现大量 403 就要复核。
免费档能看到机器人评分吗?
不能。评分是 Bot Management 附加功能,Enterprise 才有。免费档只能在事件里看到"被 BFM 处理过",看不到为什么。
小结
免费档的 Bot 管理是一个开关加一条 cf.client.bot 字段。开关粗放、不可精细放行,适合纯展示站;cf.client.bot 精细,用来识别冒充爬虫的请求。
大多数小站的合理配置是"不开全站开关,只在登录与表单上 Turnstile,API 上速率限制"。这样做的前提是你清楚自己的合法自动化流量有哪些、走哪个域名——这份清单比开关本身更重要。
数据来源与检索时间
检索时间 2026-11-10。
| 来源 | URL | 对应数据 |
|---|---|---|
| WAF 概览 | https://developers.cloudflare.com/waf/ | 免费档托管规则与速率限制能力、cf.client.bot 等字段的适用范围 |
| 自定义规则 | https://developers.cloudflare.com/waf/custom-rules/ | 表达式语法、Skip 动作与安全功能的交互顺序 |
| Cloudflare 定价页 | https://www.cloudflare.com/plans/ | Bot Fight Mode 在免费计划内、Super Bot Fight Mode 属付费档 |
核验说明
- 上述页面为本机抓取(HTTP 200),套餐能力对照取自页面描述与定价页。
- 未执行:无 Zone 权限,Bot Fight Mode 未开启,Security Events 与 Traffic 报表未实际查看;API 客户端 403 的现象依据文档与社区常见反馈描述,未在本机复现。
- 未验证:免费档 Bot Fight Mode"不受 WAF Skip 规则影响"这一点来自文档描述,未在真实账号上做对照实验。