BetterLink Logo 比邻
切换语言
切换主题

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

Cloudflare防火墙规则配置示意图,蓝色盾牌图标与网络流量可视化

引言

打开服务器日志一看,好家伙,满屏都是扫描请求。每天几千条恶意访问,流量费蹭蹭往上涨,这感觉真不好受。 用了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除外,会继续评估后续规则)。 打个比方,就像你家门口的保安检查访客:

  1. 先认人:看到是自家人,直接放行(白名单)
  2. 再验证:陌生人,要看证件(质询)
  3. 最后拦截:可疑人员,直接拒绝(阻止) 如果你把顺序反过来,先拦截再验证,那正常访客都进不来了。 常见错误案例:把国家封禁放在白名单前面。比如你用了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号服务商说明
AS13335CloudflareCF自家的,建议质询
AS15169Google CloudGCP
AS16509Amazon 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-requestscurl这种明显的脚本工具,基本可以确定不是真人访问。 规则表达式:

(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 - 扫描器 注意事项:
  • 不要拦截MozillaChromeSafari这些主流浏览器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: 创建第一条规则(白名单)

  1. 点击右上角蓝色按钮”Create rule”(创建规则)
  2. 规则名称:输入白名单-合法爬虫和监控(名称随意,方便自己识别就行)
  3. 表达式编辑器:默认是Expression Builder(可视化编辑器)。如果你想直接粘贴代码,点击”Edit expression”切换到代码模式
  4. 粘贴规则表达式:
    (cf.client.bot) or (ip.src in {1.2.3.4})
    记得把IP改成你自己的
  5. 选择动作:下拉菜单选”Allow”
  6. 点击”Deploy”(部署) 步骤3: 依次创建剩余4条规则 用同样的方法,创建规则2-5。每条规则的名称、表达式、动作参考上面第三章的内容。 步骤4: 调整规则顺序 创建完5条规则后,你会看到规则列表。拖动规则左侧的六点图标,调整顺序,确保:
  • 白名单在最上面(优先级1)
  • ASN质询第二
  • 威胁分数第三
  • 异常UA第四
  • 敏感路径第五 步骤5: 测试规则效果 配置完成后,建议先测试一下:
  1. 测试白名单:用自己的IP访问网站,应该正常
  2. 测试UA拦截:打开终端,输入:
    curl -A "sqlmap" https://你的域名.com
    应该看到被拦截的提示页面
  3. 查看拦截日志:回到Cloudflare Dashboard → Security → Events,可以看到刚才的拦截记录 如果规则不生效,检查一下:
  • 规则表达式有没有语法错误
  • 优先级顺序对不对
  • 动作选对了没

第五章:进阶技巧与常见问题

配置完基础的5条规则,已经能防住大部分攻击了。但还有些细节值得优化。

如何判断规则是否有效

Cloudflare提供了一个很有用的指标:CSR (Challenge Solve Rate,质询解决率)。 公式:CSR = 成功解决质询的数量 / 发出质询的总数量 这个数值越低越好。CSR接近0%,说明几乎所有被质询的都是机器人,一个都没通过验证。这时候可以考虑把动作从Challenge改成Block,直接拦截,节省服务器资源。 CSR比较高(比如超过50%),说明可能误伤了真人用户,需要调整规则条件。 查看CSR:Security → Events → 点击某条规则 → 查看详细统计数据。

如何避免误伤正常用户

这是最怕的事。几个建议:

  1. 新规则先用Log模式观察7天
    • 动作选”Log”(仅记录,不拦截)
    • 一周后看Security Events,确认没误伤再改成Challenge或Block
  2. 白名单自己的IP和监控服务
    • 把自己常用的IP加到规则1
    • UptimeRobot的IP段可以去官网查,加到白名单
  3. 不要一上来就Block
    • 先用Challenge,观察一段时间
    • 确认CSR接近0%,再考虑Block
  4. 留意异常的流量下降
    • 如果配置规则后,正常流量也大幅下降,说明可能误伤了
    • 检查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条不够,有几个办法:

  1. or合并同类规则
    • 比如规则4,已经用or把多个异常UA合并到一条规则里了
    • 尽量让一条规则覆盖一类场景
  2. 创建IP列表统一管理
    • Cloudflare允许创建IP列表(支持上千个IP)
    • 在规则中引用列表:ip.src in $blacklist
    • 这样一条规则就能管理一大批IP,不占规则数量
  3. 考虑升级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条防火墙规则,够用了。关键是按优先级合理配置:

  1. 白名单放第一,保护盟友
  2. ASN质询,拦截机房流量
  3. 威胁分数过滤,阻止高风险IP
  4. 异常UA拦截,过滤自动化工具
  5. 敏感路径保护,守住后门 配置完成后,30分钟生效。一周后看Security Events,拦截量会让你惊喜——那些曾经消耗你流量和带宽的扫描器,全被挡在门外了。 现在就去配置吧。Cloudflare Dashboard等着你,规则模板在上面,复制粘贴,改改IP,半小时搞定。 一周后,记得回来看看拦截数据。如果效果好,不妨把这篇文章收藏起来,以后调整规则的时候还能用得上。遇到问题,也可以回来翻翻第五章的Q&A。 你的网站,值得更好的防护。

发布于: 2025年12月1日 · 修改于: 2025年12月4日

相关文章