Cloudflare防火墙规则新手指南:5条免费规则过滤80%恶意流量(附模板)

引言
打开服务器日志一看,好家伙,满屏都是扫描请求。每天几千条恶意访问,流量费蹭蹭往上涨,这感觉真不好受。 用了Cloudflare免费版,结果防火墙规则一条没配,等于裸奔。想去网上找教程吧,复制粘贴一堆代码,结果根本不生效——原来是规则优先级放反了。 说实话,刚看到那些(ip.src.country eq "CN")之类的规则表达式时,我也觉得头疼。但折腾了几天后发现,免费版的5条规则,真的够用了。合理配置后,能过滤掉80%以上的恶意请求,而且不会误伤正常用户。 这篇文章我会手把手教你配置这5条规则,从规则原理到优先级设置,全都图解清楚。30分钟搞定配置,一周后你再看Security Events,拦截量绝对让你惊喜。
第一章:为什么免费版的5条规则够用
很多人看到Cloudflare免费版只有5条自定义规则,第一反应是”这肯定不够啊”。Pro版有20条,要不要升级? 别急,先听我说完。 其实大部分恶意流量,来源就那么几类:数据中心的扫描器、高威胁分数的IP、异常的User-Agent。根据Cloudflare社区的实践经验,合理配置5条规则,能拦住80%以上的攻击。这就是经典的80/20法则。 免费版除了5条自定义规则,还自带一套Cloudflare Free Managed Ruleset(免费托管规则集)。这个规则集默认开启,能防护高危漏洞,比如Shellshock、Log4J这些大名鼎鼎的漏洞。托管规则集 + 5条自定义规则,对于中小网站来说,真的够了。 Pro版多出来的15条规则,更多是用在精细化运营上的。比如你有多个子域名要分别配置,或者需要针对不同API接口设置不同策略。如果你的网站没这么复杂,5条规则完全能覆盖核心防护需求。 当然,前提是你得把这5条规则用对。优先级错了,配10条也白搭。
第二章:规则优先级的秘密
这是最容易踩坑的地方。我最开始配置时,也是把规则顺序弄反了,结果辛苦写的规则一条都没生效。 Cloudflare防火墙规则是自上而下执行的,像流水线一样检查每个请求。规则1检查完,再检查规则2,依次往下。一旦某条规则匹配成功,就执行对应的动作(Allow、Block、Challenge等),然后停止(Allow除外,会继续评估后续规则)。 打个比方,就像你家门口的保安检查访客:
- 先认人:看到是自家人,直接放行(白名单)
- 再验证:陌生人,要看证件(质询)
- 最后拦截:可疑人员,直接拒绝(阻止) 如果你把顺序反过来,先拦截再验证,那正常访客都进不来了。 常见错误案例:把国家封禁放在白名单前面。比如你用了UptimeRobot这种国外监控服务,但你的规则第一条就写”阻止所有非中国IP”,结果监控服务直接被拦,你的网站挂了都不知道。 正确做法:白名单永远放第一条。先放行已知的好流量(搜索引擎爬虫、监控服务、你自己的IP),再一层层收紧防护。 还有个容易忽略的点:动作也有优先级。同样优先级的规则,按这个顺序执行:
- Allow(允许) > Skip(跳过) > Challenge(质询) > Block(阻止) > Log(记录) 这意味着,如果一个请求同时匹配了Allow规则和Block规则,Allow会生效。这也是为什么白名单要放最前面——确保它优先级最高,不会被后面的规则误伤。
第三章:5条规则的黄金配置方案
好了,废话不多说,直接上干货。这5条规则我按优先级从高到低排列,你可以直接复制使用。
规则1(最高优先级):白名单 - 保护你的盟友
作用:放行已知的正常流量,避免误伤。 适用场景:
- 搜索引擎爬虫(Google、Bing、百度等)
- 监控服务(UptimeRobot、StatusCake等)
- 你自己的办公室IP、家里的IP 规则表达式:
(cf.client.bot) or (ip.src in {1.2.3.4 5.6.7.8})动作: Allow 说明:
cf.client.bot是Cloudflare验证过的合法爬虫,包括Google、Bing这些主流搜索引擎- 把
{1.2.3.4 5.6.7.8}替换成你自己的IP地址,多个IP用空格分开 - 如果不需要IP白名单,可以简化成
(cf.client.bot)
规则2:数据中心ASN质询 - 拦截机房流量
作用:对来自数据中心的流量进行人机验证。 适用场景: 扫描器、爬虫工具大多托管在VPS、云服务器上,而正常用户很少从数据中心IP访问网站。质询一下,机器人就知难而退了。 规则表达式:
(ip.geoip.asnum in {13335 15169 16509 14618 45090})动作: Managed Challenge ASN对照表 (常用数据中心):
| ASN号 | 服务商 | 说明 |
|---|---|---|
| AS13335 | Cloudflare | CF自家的,建议质询 |
| AS15169 | Google Cloud | GCP |
| AS16509 | Amazon AWS | 最大的云服务商 |
| AS14618 | 腾讯云 | 国内常用 |
| AS45090 | 阿里云 | 国内常用 |
| 你可以根据自己网站的情况增减ASN。不建议直接Block,可能误伤使用VPN的真实用户。用Managed Challenge(托管质询)就好,真人验证一下就能过,机器人就卡住了。 |
规则3:威胁分数 + 风险IP过滤
作用:基于Cloudflare的威胁情报,拦截高风险IP。 适用场景: Cloudflare会给每个IP打分(0-100分),分数越高越危险。大于10的可能是垃圾邮件发送者,大于40的基本是不良行为者,大于50的建议直接阻止。 规则表达式:
(cf.threat_score gt 10)动作: Challenge (威胁分数10-40) 或 Block (威胁分数>50) 威胁分数阈值建议:
| 威胁分数 | 风险等级 | 建议动作 |
|---|---|---|
| 0-10 | 低风险 | 放行 |
| 11-40 | 中风险 | Challenge质询 |
| 41-50 | 高风险 | JS Challenge |
| 51-100 | 极高风险 | Block阻止 |
| 优化技巧: | ||
| 如果你想分段处理,可以创建两条规则: |
- 规则3A:
(cf.threat_score gt 10 and cf.threat_score le 50)→ Challenge - 规则3B:
(cf.threat_score gt 50)→ Block 但这样会占用2条规则。如果规则不够用,可以统一用gt 10+ Challenge,先观察一周效果再调整。
规则4:异常User-Agent拦截
作用:过滤空UA、恶意爬虫、自动化工具。 适用场景: 正常的浏览器都会发送User-Agent(告诉服务器”我是Chrome浏览器”之类的信息)。如果UA是空的,或者是python-requests、curl这种明显的脚本工具,基本可以确定不是真人访问。 规则表达式:
(http.user_agent eq "") or (http.user_agent contains "python-requests") or (http.user_agent contains "curl") or (http.user_agent contains "sqlmap") or (http.user_agent contains "nikto") or (http.user_agent contains "MJ12bot")动作: Block 常见恶意UA清单:
python-requests- Python脚本curl- 命令行工具sqlmap- SQL注入工具nikto- 漏洞扫描器MJ12bot- Majestic SEO爬虫(不遵守robots.txt)masscan- 端口扫描工具ZmEu- 扫描器 注意事项:- 不要拦截
Mozilla、Chrome、Safari这些主流浏览器UA - 可以先用Log动作观察一周,看看日志里有哪些异常UA,再加到规则里
- 如果你的网站提供API,可能需要排除你自己的API客户端UA
规则5:敏感路径保护
作用:保护后台登录页、敏感API接口、配置文件。 适用场景: WordPress的/wp-admin、/wp-login.php是黑客最爱扫的路径。还有.env、.git这种配置文件,泄露了就完蛋。 规则表达式:
(http.request.uri.path contains "/wp-login" or http.request.uri.path contains "/wp-admin" or http.request.uri.path contains "/.env" or http.request.uri.path contains "/.git") and not (ip.src in {1.2.3.4})动作: Block 或 Challenge 说明:
- 把
{1.2.3.4}替换成你自己的IP,这样你自己访问后台不受影响 - 如果不想IP白名单,可以去掉
and not (ip.src in {1.2.3.4})这部分,改用Challenge动作 其他敏感路径: /xmlrpc.php(WordPress的XML-RPC接口,常被DDoS)/phpMyAdmin(数据库管理界面)/config.php/.sql(数据库备份文件) 你可以根据自己网站的技术栈,添加对应的敏感路径。
完整规则执行流程
把这5条规则配置好后,请求的处理流程是这样的:
访问请求
↓
规则1: 是合法爬虫或白名单IP? → 是 → 直接放行
↓ 否
规则2: 来自数据中心ASN? → 是 → 人机质询 → 通过/拦截
↓ 否
规则3: 威胁分数>10? → 是 → 质询/阻止
↓ 否
规则4: 异常User-Agent? → 是 → 阻止
↓ 否
规则5: 访问敏感路径? → 是 → 阻止/质询
↓ 否
放行,进入源站这套流程能过滤掉绝大部分自动化攻击,同时不会误伤正常用户。
第四章:实战配置步骤
光看规则还不够,得动手配置才行。跟着我一步步来。 步骤1: 进入防火墙配置页面 登录Cloudflare Dashboard → 选择你的域名 → 左侧菜单找到”Security”(安全性) → 点击”WAF” → 切换到”Custom rules”(自定义规则)标签页。 步骤2: 创建第一条规则(白名单)
- 点击右上角蓝色按钮”Create rule”(创建规则)
- 规则名称:输入
白名单-合法爬虫和监控(名称随意,方便自己识别就行) - 表达式编辑器:默认是Expression Builder(可视化编辑器)。如果你想直接粘贴代码,点击”Edit expression”切换到代码模式
- 粘贴规则表达式:
记得把IP改成你自己的(cf.client.bot) or (ip.src in {1.2.3.4}) - 选择动作:下拉菜单选”Allow”
- 点击”Deploy”(部署) 步骤3: 依次创建剩余4条规则 用同样的方法,创建规则2-5。每条规则的名称、表达式、动作参考上面第三章的内容。 步骤4: 调整规则顺序 创建完5条规则后,你会看到规则列表。拖动规则左侧的六点图标,调整顺序,确保:
- 白名单在最上面(优先级1)
- ASN质询第二
- 威胁分数第三
- 异常UA第四
- 敏感路径第五 步骤5: 测试规则效果 配置完成后,建议先测试一下:
- 测试白名单:用自己的IP访问网站,应该正常
- 测试UA拦截:打开终端,输入:
应该看到被拦截的提示页面curl -A "sqlmap" https://你的域名.com - 查看拦截日志:回到Cloudflare Dashboard → Security → Events,可以看到刚才的拦截记录 如果规则不生效,检查一下:
- 规则表达式有没有语法错误
- 优先级顺序对不对
- 动作选对了没
第五章:进阶技巧与常见问题
配置完基础的5条规则,已经能防住大部分攻击了。但还有些细节值得优化。
如何判断规则是否有效
Cloudflare提供了一个很有用的指标:CSR (Challenge Solve Rate,质询解决率)。 公式:CSR = 成功解决质询的数量 / 发出质询的总数量 这个数值越低越好。CSR接近0%,说明几乎所有被质询的都是机器人,一个都没通过验证。这时候可以考虑把动作从Challenge改成Block,直接拦截,节省服务器资源。 CSR比较高(比如超过50%),说明可能误伤了真人用户,需要调整规则条件。 查看CSR:Security → Events → 点击某条规则 → 查看详细统计数据。
如何避免误伤正常用户
这是最怕的事。几个建议:
- 新规则先用Log模式观察7天
- 动作选”Log”(仅记录,不拦截)
- 一周后看Security Events,确认没误伤再改成Challenge或Block
- 白名单自己的IP和监控服务
- 把自己常用的IP加到规则1
- UptimeRobot的IP段可以去官网查,加到白名单
- 不要一上来就Block
- 先用Challenge,观察一段时间
- 确认CSR接近0%,再考虑Block
- 留意异常的流量下降
- 如果配置规则后,正常流量也大幅下降,说明可能误伤了
- 检查Security Events,看看有没有拦截自己人
如何应对突发攻击
如果网站正在遭受CC攻击、DDOS,流量暴涨,可以临时开启Under Attack模式(俗称”5秒盾”): Security → Settings → Security Level → 选择”I’m Under Attack” 这个模式会对所有访客显示5秒的加载页面,进行JS验证。机器人过不了这关,真人等5秒就能进。攻击结束后记得改回Medium或Low。 还有,可以临时加强规则:
- 把Challenge改成Block
- 添加地域封禁,比如攻击来自某个国家,可以临时阻止该国家IP
5条规则不够用怎么办
确实有时候5条不够,有几个办法:
- 用
or合并同类规则- 比如规则4,已经用
or把多个异常UA合并到一条规则里了 - 尽量让一条规则覆盖一类场景
- 比如规则4,已经用
- 创建IP列表统一管理
- Cloudflare允许创建IP列表(支持上千个IP)
- 在规则中引用列表:
ip.src in $blacklist - 这样一条规则就能管理一大批IP,不占规则数量
- 考虑升级Pro计划
- Pro计划20条规则,还有更多高级功能
- 如果网站盈利了,值得投资
常见问题Q&A
Q: 规则不生效怎么办? A: 检查几个点:
- 规则表达式语法有没有错误(Cloudflare会提示)
- 优先级顺序对不对(白名单在最上面)
- 有没有被上层规则提前Allow或Skip了 Q: 自己的IP被拦截了? A: 在规则1白名单中添加你的IP:
(cf.client.bot) or (ip.src in {你的IP})Q: 威胁分数设置多少合适? A: 建议:
- 保守型:
cf.threat_score gt 30(拦截较少,误伤风险低) - 平衡型:
cf.threat_score gt 10(推荐,兼顾防护和体验) - 激进型:
cf.threat_score gt 5(拦截更多,可能误伤VPN用户) 先用10试试,观察一周,根据CSR和误伤情况调整。 Q: 为什么Google爬虫被拦了? A: 确认规则1(白名单)的优先级是不是最高。cf.client.bot会自动识别Google、Bing等主流爬虫,只要白名单在第一位,就不会被拦。
结论
说了这么多,总结一下: 免费版的5条防火墙规则,够用了。关键是按优先级合理配置:
- 白名单放第一,保护盟友
- ASN质询,拦截机房流量
- 威胁分数过滤,阻止高风险IP
- 异常UA拦截,过滤自动化工具
- 敏感路径保护,守住后门 配置完成后,30分钟生效。一周后看Security Events,拦截量会让你惊喜——那些曾经消耗你流量和带宽的扫描器,全被挡在门外了。 现在就去配置吧。Cloudflare Dashboard等着你,规则模板在上面,复制粘贴,改改IP,半小时搞定。 一周后,记得回来看看拦截数据。如果效果好,不妨把这篇文章收藏起来,以后调整规则的时候还能用得上。遇到问题,也可以回来翻翻第五章的Q&A。 你的网站,值得更好的防护。
发布于: 2025年12月1日 · 修改于: 2025年12月4日


