本文为个人使用 Cloudflare 时提供可复用的安全规则配置参考,便于快速检索与部署。以下两条 WAF 自定义规则分别针对恶意流量识别与地域访问控制,适用于防御 CC 攻击、漏洞扫描、垃圾爬虫等常见威胁。
第一条规则:基于 ASN、合法爬虫标识与用户代理(UA)的恶意请求拦截
该规则通过三个维度综合判断请求是否可疑:
- ASN(自治系统号)过滤
ASN(Autonomous System Number)是互联网中用于标识独立网络实体的编号。例如:
阿里云:37963、45090
腾讯云:133478
华为云:55990
AWS:16509
Google Cloud:15169
攻击者常利用云服务商 IP 池发起分布式攻击,这些 IP 多归属于特定 ASN。通过屏蔽高风险 ASN,可有效拦截大量自动化攻击源。 - 排除 Cloudflare 认证的合法爬虫
cf.client.bot 是 Cloudflare 提供的布尔字段,当请求来自其认证的合法机器人(如 Googlebot、Bingbot 等)时值为 true。规则中使用 not cf.client.bot 确保不误杀搜索引擎爬虫。 - 拦截包含已知恶意关键词的 User-Agent
恶意爬虫、扫描器、自动化工具通常使用固定或特征明显的 UA。规则中列出大量典型恶意 UA 关键词(如 MJ12bot、AhrefsBot、SemrushBot、Chrome/4、Java/lib 等),一旦匹配即触发拦截。
完整表达式如下(带行号便于对照阅读):
(ip.geoip.asnum in {37963 45090 55990 45102 12816 12786 18450 197540 24961 26496 46606 54600 60068 22773 18978 7922 61317 6079 397391 46562 22616 26347 45916 22394 202594 40676 398101 396362 6167 54290 135981 21686 7303 138997 22418 140224 46475 20001 43959 41378 29802 10013 9824 4766 209 43260 7565 40676 3786 28438 13287 3786 24641 54548 43754 205544 6461 141995 8047 35916 396253 64096 40021 32097 394380 9286 16509 9370 9318 6921 7713 4788 262186 13489 21353 13213 20473 2914 24940 8100 45102 36352 63949 14061 54994 12876 14618 36351 16276 133478}
and not cf.client.bot
and http.user_agent contains "grapeshotMJ12botDotBotAhrefsBotSemrushBotUptimebotZoominfoBotBLEXBotExtLinksBotaiHitBotResearchscanDnyzBotspbotMegaIndex.ruMail.RucensysExpansegdnplusALittleproximictoutiaoPulsePointfenqarchive.orgadmantxAppEngineElectronpetalbotnetnewswireCriteobazquxnetsystemsresearchNeevaChrome/6Chrome/5Chrome/4Chrome/7Chrome/8Chrome/9Hello, worldThinkChaosJava/lib?pythonhttp-clientokhttpl9explorel9tcpid")
配置方式:
进入 Cloudflare 控制台 → 安全 → WAF → 创建自定义规则 → 选择“编辑表达式” → 粘贴上述代码 → 动作设为“阻止(Block)” → 部署。
第二条规则:限制非大中华区访问,仅允许 CN/HK/MO/TW 并放行合法爬虫
该规则适用于主要面向中国大陆及港澳台用户的网站,对境外请求实施严格验证,防止境外扫描、暴力破解或垃圾注册。
规则逻辑说明:
若请求满足以下任一条件,则触发“托管质询”(Managed Challenge):
来源国家/地区 不在 {"CN", "HK", "MO", "TW"} 范围内,且 不是 Cloudflare 认证的合法爬虫;
Cloudflare 威胁评分(cf.threat_score)≥ 30;
User-Agent 不包含 "Mozilla/"(排除非浏览器类脚本);
HTTP 协议版本 不是 HTTP/2、HTTP/3 或 SPDY/3.1(老旧协议更可能来自攻击工具)。
完整表达式如下(带行号):
(not ip.geoip.country in {"CN" "HK" "MO" "TW"} and not cf.client.bot)
or (cf.threat_score ge 30)
or (not http.user_agent contains "Mozilla/")
or (not http.request.version in {"HTTP/2" "HTTP/3" "SPDY/3.1"})
动作建议:
选择“托管质询”(Managed Challenge),而非直接阻止,以避免误伤真实用户。合法用户可通过简单验证继续访问,而自动化脚本通常无法通过。
使用提示
所有规则均基于 Cloudflare 的 自定义 WAF 规则引擎,需在对应站点启用代理(橙色云图标)后生效。
cf.client.bot 依赖 Cloudflare 的 Bot Management 服务,在免费计划中仍可使用基础判断,但高级机器人识别需付费。
建议先将规则动作设为“日志记录(Log)”观察几天,确认无误后再切换为“阻止”或“质询”。
ASN 列表可根据自身日志分析动态调整,移除误封的云服务商 ASN(如你自己的服务器所在 ASN)。
