如何配置 Cloudflare WAF 规则以允许 Perplexity 和 ChatGPT 同时阻止激进爬虫
理解 Cloudflare 的 AI 机器人管理:为什么全局阻止按钮很危险
Cloudflare 的一键式"阻止 AI 机器人"功能会无差别地阻止所有 AI 爬虫,包括像 Perplexity 和 ChatGPT 这样为您的网站带来大量自然流量的有益搜索引擎。这种"核选项"会阻止您的内容被下一代 AI 搜索平台索引,实际上使您的网站对数百万依赖 AI 驱动搜索工具进行信息发现的用户不可见。
选择性 AI 机器人管理的战略重要性
现代网络流量越来越多地来自 AI 驱动的搜索引擎和助手。Perplexity、ChatGPT Search、Google 的 AI 概览以及类似平台代表了信息检索的未来。在使用 Cloudflare 的全面 AI 机器人阻止功能时阻止这些合法爬虫,会造成严重的可见性缺口,可能严重影响您网站的可发现性和自然覆盖范围。
解决方案在于实施细粒度的 Web 应用防火墙(WAF)规则,以区分有益的 AI 爬虫和消耗带宽但不提供价值的激进抓取器。本指南提供了配置 Cloudflare WAF 规则的全面说明,既保护您的基础设施,又保持在 AI 搜索生态系统中的可见性。
主要 AI 爬虫用户代理和 IP 范围
在配置 WAF 规则之前,您必须了解合法 AI 爬虫使用的识别方法。下表提供了有关主要 AI 机器人用户代理及其相关 IP 范围的全面信息:
| 提供商 | 用户代理标识 | 完整用户代理示例 | IP 范围验证 | Robots.txt 标识 |
|---|---|---|---|---|
| Perplexity AI | PerplexityBot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/bot) | 通过反向 DNS 查询验证 | PerplexityBot |
| OpenAI (ChatGPT) | GPTBot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot) | 在 openai.com/gptbot.json 发布的 JSON | GPTBot |
| OpenAI (SearchGPT) | OAI-SearchBot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot) | 在 openai.com/searchbot.json 发布的 JSON | OAI-SearchBot |
| Google (Gemini) | Google-Extended | Mozilla/5.0 (compatible; Google-Extended/1.0; +http://www.google.com/bot.html) | 通过 Google IP 范围验证 | Google-Extended |
| Anthropic (Claude) | anthropic-ai | anthropic-ai (compatible; Claude-Web/1.0; +https://anthropic.com/bot) | 通过反向 DNS 验证 | anthropic-ai |
| Apple (Applebot) | Applebot | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15 (Applebot/0.1; +http://www.apple.com/go/applebot) | 17.0.0.0/8 (主要范围) | Applebot |
| Cohere | cohere-ai | cohere-ai (compatible; CohereBot/1.0; +https://cohere.com/bot) | 通过反向 DNS 验证 | cohere-ai |
| Meta AI | FacebookBot | facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) | 已发布 ASN: AS32934, AS63293 | FacebookBot |
配置自定义 WAF 规则以允许有益的 AI 爬虫
Cloudflare 的 WAF 自定义规则提供了创建复杂机器人管理策略的灵活性。以下配置允许合法的 AI 搜索爬虫,同时阻止激进的抓取器和未经授权的机器人。
步骤 1:访问 Cloudflare WAF 自定义规则
- 登录您的 Cloudflare 控制面板
- 选择您要配置的域名
- 导航至安全 → WAF → 自定义规则
- 点击创建规则开始配置您的自定义规则集
步骤 2:为合法 AI 爬虫创建允许规则
使用以下配置创建规则:
规则名称:允许合法 AI 搜索爬虫
表达式:
(http.user_agent contains "PerplexityBot") or (http.user_agent contains "GPTBot") or (http.user_agent contains "OAI-SearchBot") or (http.user_agent contains "Google-Extended") or (http.user_agent contains "anthropic-ai") or (http.user_agent contains "Applebot") or (http.user_agent contains "cohere-ai") or (http.user_agent contains "FacebookBot" and not http.user_agent contains "facebookexternalhit")
操作:允许
优先级:设置为 1(最高优先级以确保此规则首先执行)
步骤 3:为激进的通用抓取器创建阻止规则
在允许合法爬虫后,创建第二条规则来阻止已知的激进抓取器:
规则名称:阻止激进抓取器和未经授权的机器人
表达式:
(http.user_agent contains "scrapy") or (http.user_agent contains "python-requests") or (http.user_agent contains "curl") or (http.user_agent contains "wget") or (http.user_agent contains "go-http-client") or (http.user_agent contains "axios") or (http.user_agent contains "node-fetch") or (http.user_agent eq "") or (http.user_agent contains "Bytespider") or (http.user_agent contains "PetalBot") or (http.user_agent contains "AhrefsBot" and not cf.bot_management.verified_bot) or (http.user_agent contains "SemrushBot" and not cf.bot_management.verified_bot) or (http.user_agent contains "DotBot") or (http.user_agent contains "MJ12bot") or (http.user_agent contains "BLEXBot")
操作:阻止
优先级:设置为 2
步骤 4:为可疑流量模式实施质询规则
对于不符合允许或阻止标准但表现出可疑模式的流量,实施质询规则:
规则名称:质询可疑的类机器人行为
表达式:
(cf.bot_management.score lt 30) and not (cf.bot_management.verified_bot) and not (http.user_agent contains "PerplexityBot") and not (http.user_agent contains "GPTBot") and not (http.user_agent contains "OAI-SearchBot") and not (http.user_agent contains "Google-Extended") and not (http.user_agent contains "Applebot")
操作:托管质询
优先级:设置为 3
为 API 端点保护实施自定义速率限制规则
速率限制提供了针对抓取滥用的额外保护层,特别是对于 API 端点和资源密集型页面。按照以下步骤配置不影响合法 AI 爬虫的智能速率限制:
步骤 1:导航至速率限制规则
- 在您的 Cloudflare 控制面板中,转到安全 → WAF → 速率限制规则
- 点击创建规则
步骤 2:配置 API 端点速率限制
规则名称:带 AI 爬虫豁免的 API 端点速率限制
表达式:
(http.request.uri.path contains "/api/") and not (http.user_agent contains "PerplexityBot") and not (http.user_agent contains "GPTBot") and not (http.user_agent contains "OAI-SearchBot") and not (http.user_agent contains "Applebot") and not (cf.bot_management.verified_bot)
特征:
- 请求数:100 次请求
- 周期:60 秒
- 计数方法:按 IP 地址计数
操作:阻止 1 小时
步骤 3:配置内容页面速率限制
对于内容页面,实施更宽松的速率限制以适应合法的阅读模式:
规则名称:内容页面速率限制
表达式:
(http.request.uri.path contains "/blog/" or http.request.uri.path contains "/articles/") and not (http.user_agent contains "PerplexityBot") and not (http.user_agent contains "GPTBot") and not (http.user_agent contains "OAI-SearchBot") and not (http.user_agent contains "Google-Extended") and not (http.user_agent contains "Applebot") and not (cf.bot_management.verified_bot)
特征:
- 请求数:300 次请求
- 周期:300 秒(5 分钟)
- 计数方法:按 IP 地址计数
操作:托管质询
步骤 4:实施激进爬虫速率限制
专门为未被完全阻止的已知激进爬虫创建严格的速率限制:
规则名称:激进爬虫限流
表达式:
(http.user_agent contains "AhrefsBot") or (http.user_agent contains "SemrushBot") or (http.user_agent contains "MJ12bot") or (cf.bot_management.score lt 20 and not cf.bot_management.verified_bot)
特征:
- 请求数:10 次请求
- 周期:60 秒
- 计数方法:按 IP 地址计数
操作:阻止 24 小时
步骤 5:监控和调整速率限制
- 导航至安全 → 事件以监控触发的规则
- 查看活动日志以查找影响合法流量的误报
- 根据您网站的典型流量模式调整速率限制阈值
- 使用分析 → 安全来识别新出现的抓取器模式
- 随着新 AI 搜索引擎的出现,每季度更新您的允许列表
高级配置:IP 范围验证
用户代理字符串可以被伪造,这使得 IP 范围验证成为必不可少的二次验证方法。实施这些高级规则以增强安全性:
已验证机器人 IP 范围验证
为高价值内容创建一条规则,要求同时具有正确的用户代理和 IP 范围验证:
(http.request.uri.path contains "/premium/") and ( (http.user_agent contains "GPTBot" and not cf.bot_management.verified_bot) or (http.user_agent contains "PerplexityBot" and not cf.bot_management.verified_bot) )
操作:托管质询
此规则对声称是合法 AI 机器人但不是来自已验证 IP 范围的爬虫进行质询,保护高级内容免受伪造尝试。
监控和维护最佳实践
有效的 WAF 规则管理需要持续的监控和调整。实施以下最佳实践:
- 每周审查:检查安全事件以查找被阻止的合法流量并相应调整规则
- 每月分析:审查分析数据以识别新的爬虫用户代理和新出现的抓取模式
- 季度更新:随着新 AI 搜索引擎的推出和现有搜索引擎修改其爬虫,更新您的允许列表
- 警报配置:为被阻止流量的异常激增设置 Cloudflare 通知
- 文档记录:维护规则更改的内部文档以及每个配置背后的理由
- 测试协议:在将新规则部署到生产环境之前,以"日志"模式测试它们以识别潜在问题
Robots.txt 协调
WAF 规则应该补充而不是替代您的 robots.txt 指令。保持协调的方法:
# 允许有益的 AI 爬虫 User-agent: PerplexityBot Allow: / User-agent: GPTBot Allow: / User-agent: OAI-SearchBot Allow: / User-agent: Google-Extended Allow: / User-agent: Applebot Allow: / User-agent: anthropic-ai Allow: / # 阻止激进抓取器 User-agent: Bytespider Disallow: / User-agent: PetalBot Disallow: / User-agent: AhrefsBot Crawl-delay: 10 Disallow: /api/ User-agent: SemrushBot Crawl-delay: 10 Disallow: /api/
性能影响考虑因素
WAF 规则在每个请求上执行,因此优化对于维护网站性能至关重要:
- 规则顺序:将最常匹配的规则(常见爬虫的允许规则)放在更高优先级,以减少处理时间
- 表达式效率:尽可能使用简单的字符串匹配(contains)而不是复杂的正则表达式
- 规则合并:将相关条件合并到单个规则中,而不是创建多个重叠规则
- 缓存集成:确保 WAF 规则不会通过对可缓存资源进行不必要的质询来干扰 Cloudflare 的缓存
- 地理考虑:对于特定区域的内容,添加地理过滤器以减少不必要的规则评估
常见问题解答
为什么我不应该使用 Cloudflare 的一键式"阻止 AI 机器人"功能?
Cloudflare 的全局 AI 机器人阻止是一种无差别的工具,会阻止所有 AI 爬虫,包括像 Perplexity、ChatGPT Search 和 Google 的 AI 功能等有益的爬虫。这些平台带来大量自然流量,代表了搜索的未来。阻止它们会使您的内容对数百万依赖 AI 驱动搜索工具的用户不可见。自定义 WAF 规则允许您选择性地允许合法的 AI 搜索引擎,同时阻止不提供价值的激进抓取器。
如何验证我的 WAF 规则是否正常工作?
通过 Cloudflare 的安全事件控制面板(安全 → 事件)监控您的规则。这会显示有关哪些规则正在触发以及它们影响哪些流量的实时数据。以"日志"模式而不是"阻止"模式启动新规则,以观察它们的行为而不影响流量。在实施新规则后的第一周每天查看活动日志以捕获任何误报。您还可以使用带有不同用户代理字符串的 curl 命令手动测试您的规则。
"阻止"和"托管质询"操作有什么区别?
"阻止"立即拒绝访问,访问者没有继续的机会,返回 403 禁止错误。这适用于已知的恶意机器人和激进抓取器。"托管质询"呈现一个智能质询,合法浏览器可以自动通过,同时阻止机器人。Cloudflare 的系统根据请求特征确定适当的质询类型(不可见、JavaScript 质询或验证码)。对可能包括合法用户的可疑流量使用托管质询,对已确认的恶意来源使用阻止。
我应该多久更新一次 AI 爬虫允许列表?
至少每季度审查和更新您的允许列表,因为 AI 搜索领域发展迅速。新的 AI 搜索引擎定期推出,现有的搜索引擎可能会更改其爬虫用户代理或 IP 范围。订阅主要 AI 公司(OpenAI、Anthropic、Google、Perplexity)的公告,以了解爬虫更改的最新信息。监控您的安全事件日志以查找可能是合法新爬虫的被阻止用户代理。当主要 AI 搜索产品推出时(如 ChatGPT Search 或新的 Google AI 功能),立即更新您的规则以保持可见性。
合法的 AI 爬虫可以伪造其用户代理来绕过我的规则吗?
虽然用户代理可以被伪造,但合法的 AI 公司不会从事这种做法,因为这会损害他们的声誉并违反网站管理员指南。然而,恶意行为者可能会伪造合法爬虫的用户代理。这就是为什么 IP 范围验证至关重要。使用 Cloudflare 的 cf.bot_management.verified_bot 字段,该字段验证声称来自已知机器人的请求实际上来自已验证的 IP 范围。对于高价值内容,实施需要正确用户代理和已验证 IP 范围的规则。这可以防止伪造,同时允许合法爬虫。
什么样的速率限制适合 AI 爬虫?
合法的 AI 爬虫通常尊重合理的速率限制和爬行延迟指令。对于像 PerplexityBot 和 GPTBot 这样的有益爬虫,完全豁免它们的速率限制或设置非常宽松的限制(5 分钟内 1000+ 次请求)。这些爬虫已经被设计为尊重的,不会压垮您的服务器。对于像 AhrefsBot 或 SemrushBot 这样的激进 SEO 爬虫,实施严格的限制(每分钟 10-20 次请求)以防止资源耗尽。监控您的服务器负载并根据您的基础设施容量调整限制。API 端点应该比内容页面有更严格的限制。
我应该阻止所有 Python 和 curl 用户代理吗?
阻止像"python-requests"或"curl"这样的通用用户代理可以有效对抗不成熟的抓取器,但也可能阻止合法的自动化工具、监控服务和内部脚本。不要全面阻止,而是使用分层方法:仅在敏感端点(API、管理面板)上阻止这些用户代理,同时在公共内容上允许它们。或者,使用速率限制而不是完全阻止——合法工具会尊重速率限制,而激进抓取器会触发阻止。考虑为程序化访问实施 API 密钥身份验证,而不是仅依赖用户代理阻止。
如何处理合法用户被阻止的误报?
激进的机器人管理不可避免地会产生误报。实施明确的解除阻止流程:创建一个专门的页面,解释为什么发生阻止,并提供联系信息供合法用户请求解除阻止。对边界情况使用"托管质询"而不是"阻止",因为这允许合法用户证明他们是人类。每天监控您的安全事件控制面板以查找表明误报的模式(例如,来自企业 IP 范围、特定地理区域或营业时间的阻止)。维护已知良好 IP 范围的白名单(您的办公室、主要企业网络、合法服务使用的云提供商)。
这些 WAF 规则对我的 Cloudflare 账单有什么影响?
WAF 自定义规则包含在 Cloudflare Pro 及更高计划中,对您可以创建的规则数量有限制(通常为 10-100,具体取决于您的计划)。规则本身不会产生按请求收费——它们作为 Cloudflare 标准请求处理的一部分进行评估。速率限制规则在某些计划中可能有单独的定价。机器人管理功能(cf.bot_management.score)需要商业或企业计划。性能影响很小,因为 Cloudflare 的边缘网络高效地处理这些规则。阻止恶意流量节省的成本(减少带宽、服务器负载和抓取相关成本)通常远远超过任何额外的 Cloudflare 费用。
如何平衡 SEO 爬虫访问与抓取器保护?
区分合法的 SEO 爬虫(Googlebot、Bingbot)和激进的 SEO 工具(AhrefsBot、SemrushBot)。始终允许已验证的搜索引擎爬虫——使用 cf.bot_management.verified_bot 确保它们是合法的。对于 SEO 工具爬虫,如果您发现它们的数据对竞争分析有用,则实施速率限制而不是阻止。使用 robots.txt 爬行延迟指令来减慢激进爬虫的速度而不完全阻止它们。对于高级或封闭内容,阻止除已验证搜索引擎之外的所有爬虫。请记住,合法的搜索引擎爬虫(Google、Bing)对传统 SEO 至关重要,而 AI 搜索爬虫(Perplexity、ChatGPT)对 AI 搜索可见性至关重要——您两者都需要。
我可以使用这些规则创建付费 API 访问模型吗?
是的,WAF 规则可以强制执行分层访问模型。创建阻止对特定端点的所有自动化访问的规则,然后向付费客户发放 API 密钥并将其 IP 范围列入白名单或要求身份验证标头。将 Cloudflare Workers 与 WAF 规则结合使用以实现更复杂的身份验证。根据订阅级别实施速率限制层——免费层获得 100 次请求/小时,付费层获得 10,000 次请求/小时。对于想要在您的内容上进行训练的 AI 公司,您可以选择性地允许其爬虫访问特定部分,同时要求对高级内容签订商业协议。随着出版商寻求将 AI 训练数据访问货币化,这种方法越来越普遍。
如果推出新的 AI 搜索引擎,我应该怎么做?
当新的 AI 搜索引擎推出时,研究其爬虫文档以识别其用户代理字符串和 IP 范围。大多数合法的 AI 公司在其 robots.txt 文档或开发者页面中发布此信息。在推出后的 24-48 小时内将其用户代理添加到您的允许列表中,以确保您的内容尽早被索引。监控安全事件以查看其爬虫是否被现有规则阻止。在允许其爬虫之前,考虑公司的声誉和潜在的流量价值——并非所有 AI 搜索引擎都会带来有意义的流量。加入讨论新爬虫推出的网站管理员社区和论坛,以了解新兴平台的最新信息。