怎么配置 Cloudflare Bot Fight Mode 防御恶意爬虫?

文章导读
直接开启 Bot Fight Mode 是应对突发恶意爬虫最快的方法,适合已经观察到异常流量且不影响正常用户交互的场景。
📋 目录
  1. 快速处理思路
  2. 套餐功能差异说明
  3. 分步处理
  4. 怎么验证是否生效
  5. 配置 API 例外规则
  6. 常见坑
  7. 参考来源
A A

直接开启 Bot Fight Mode 是应对突发恶意爬虫最快的方法,适合已经观察到异常流量且不影响正常用户交互的场景。

先说结论:这是一个开关型功能,开启后会自动对可疑请求发起挑战,但需留意对自动化业务的误伤。

  • 适合:已接入 Cloudflare 解析且需要快速拦截扫描器的域名
  • 先准备:确认 Cloudflare 套餐权限支持该功能
  • 验收:开启后观察 Security Events 日志是否有拦截记录

快速处理思路

该功能主要在 Cloudflare Dashboard 界面操作,无需命令行。登录控制台后,进入目标域名的 Security 页面,找到 Bots 选项卡,直接切换 Bot Fight Mode 开关即可。开启后建议先观察几小时,确认没有误拦正常用户后再长期开启。

套餐功能差异说明

不同套餐对 Bot 防御的支持力度有所不同,配置前需明确当前权限:

  • Free 套餐:支持基础 Bot Fight Mode 功能,可拦截已知自动化脚本。
  • Pro 及以上套餐:提供更高级的指纹识别和自动化规则(Super Bot Fight Mode),能更精准区分真人和高级爬虫。
  • 注意:具体可用功能以控制台实际显示为准,免费用户无需担心无法使用基础防御。

分步处理

  1. 登录 Cloudflare Dashboard,选择需要保护的域名。
  2. 在左侧菜单栏点击 Security,然后选择 Bots
  3. 找到 Bot Fight Mode 选项,将开关拨至 On 状态。
  4. 系统可能会提示确认,点击确认开启。
  5. 回滚提醒:如果发现正常用户无法访问,随时回到同一位置将开关拨回 Off 即可立即失效。

怎么验证是否生效

开启后,进入 Security > Events 页面。在过滤器中选择 ActionChallengeBlock,并查看 Source 是否包含 Bot Fight Mode 相关标识。如果有新增的拦截记录,说明功能正在工作。

怎么配置 Cloudflare Bot Fight Mode 防御恶意爬虫?

挑战页面表现:使用无痕模式或爬虫工具访问网站,若被拦截,通常会看到 Cloudflare 标准的 "Checking your browser before accessing..." 页面,停留数秒后自动跳转。如果爬虫无法执行 JS,则会一直停留或返回错误。

配置 API 例外规则

盲目开启可能导致业务 API 中断,若发现合法 API 调用被挑战或阻断,需配置例外规则:

  1. 进入 Security > WAF > Custom rules
  2. 点击 Create rule,命名规则如 API Bypass Bot Challenge
  3. 表达式配置:设置 FieldURI PathOperatorcontainsValue 填写你的 API 路径(如 /api/v1/)。
  4. 行动配置:Choose action 中选择 Set security level,并将级别调整为 LowEssentially Off
  5. 点击 Deploy 保存。

此规则会降低指定路径的安全挑战频率,确保 API 客户端不受 Bot Fight Mode 的 JS 挑战影响。

常见坑

  • API 业务受影响:如果你的网站提供公开 API 且客户端没有浏览器环境,开启后可能导致合法 API 调用失败。务必按上述步骤配置 WAF 例外规则。
  • SEO 爬虫误伤:虽然 Cloudflare 会放行知名搜索引擎爬虫,但小型搜索引擎或采集工具可能被误拦,影响收录。建议在 WAF 中为已知良性爬虫 UA 设置 bypass。
  • 移动端 SDK 兼容:部分旧版本移动端 SDK 可能无法通过 JS 挑战,需结合 WAF 规则针对特定 User-Agent 放行。

参考来源

  • Cloudflare 官方文档 - Bot Management: https://developers.cloudflare.com/bots/
  • Cloudflare 官方文档 - Bot Fight Mode: https://developers.cloudflare.com/bots/bot-fight-mode/