更新 Cloudflare WAF 规则后发现网站访问异常,最稳妥的做法是先在后台暂时关闭疑似规则或调低灵敏度,再通过安全事件日志定位具体规则 ID,最后添加例外规则恢复防护。
先说结论:遇到误拦截不要直接关闭整个 WAF,应针对具体规则 ID 做例外处理。
- 先确认:登录后台查看 Security Events 日志,找到触发拦截的规则 ID
- 先处理:在 WAF 配置中对该规则 ID 创建例外(Exception)或暂时设为 Simulate 模式
- 再验证:使用正常用户环境访问,确认不再返回 403 且日志中无新的拦截记录
快速处理思路
由于 Cloudflare WAF 主要在云端管理,没有本地命令可直接修改,建议按以下路径操作:
1. 登录 Cloudflare Dashboard -> Security -> Events
2. 筛选状态为 "Blocked" 的记录
3. 复制 "Rule ID" 或 "Rule Description"
4. 进入 Security -> WAF -> Managed Rules 找到对应规则
5. 点击编辑,添加 Exception 或调整灵敏度如果你习惯使用 API,可以通过 List Security Events 接口获取最近的拦截记录。示例命令:
curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/security/events" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json"注意:API Token 需要具备 Zone - Security Events - Read 权限。
为什么会这样
WAF 规则本质是一系列匹配条件,比如检测 URL 中是否包含特定字符、Header 是否异常或请求频率是否过高。当 Cloudflare 更新托管规则时,可能会引入新的特征匹配逻辑。如果正常业务的请求特征恰好命中了新规则的定义,就会被判定为攻击流量从而拦截。
这种情况在业务涉及特殊参数传递、非标准 API 调用或用户使用了某些自动化脚本时比较常见。并不是规则错了,也不是你的业务错了,只是匹配逻辑出现了重叠。
分步处理
第一步:定位具体规则
登录 Cloudflare 后台,进入 Security 下的 Events 页面。将时间范围调整为问题开始出现的时间段,筛选 Action 为 "Block" 或 "Challenge" 的记录。点击详情,记下 Rule ID,通常格式类似 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。
第二步:临时止血
在找到确切规则前,如果业务影响严重,可以谨慎调整 Security Level(注意:此举可能暴露 DDoS 风险),或者针对受影响的 URL 路径创建 Page Rule 绕过 WAF(注意:此举会降低安全性,仅限紧急止损)。但这只是临时措施,不要长期开启。
第三步:创建例外规则
进入 Security -> WAF -> Managed Rules,搜索刚才记下的 Rule ID。点击该规则,选择 "Edit"。在 Exception 部分添加条件。WAF 表达式语法示例:
(http.request.uri.path contains "/api/v1")
(ip.src eq 192.0.2.1)保存后,该规则将对符合条件的请求失效。
第四步:回滚准备
如果在修改后问题依旧,记得检查是否有其他规则同时命中。Cloudflare 允许规则并行匹配,有时一个请求会触发多条规则。必要时截图保存当前配置,以便快速恢复。
怎么验证是否生效
1. 客户端测试
使用之前无法正常访问的客户端或脚本重新发起请求。观察是否仍然返回 403 Forbidden 或 503 Service Temporarily Unavailable 页面。如果页面正常加载,说明拦截已解除。
2. 命令行验证
使用 curl 命令模拟请求,检查 HTTP 状态码:
curl -I -H "User-Agent: Mozilla/5.0" https://yourdomain.com/affected-path若返回 HTTP/2 200 则正常,若返回 HTTP/2 403 则仍被拦截。
3. 日志复核
再次回到 Security Events 页面,刷新日志。确认相同的请求特征不再出现在 Blocked 列表中。如果看到 Action 变为 "Allowed" 或 "Log",说明例外规则已生效。
4. 监控告警
如果你配置了 Analytics 或第三方监控,观察错误率曲线是否回落。根据官方文档,例外规则通常在几分钟内生效,具体请参考 Cloudflare 最新公告。
常见坑
1. 例外范围过大
创建例外时,不要直接对整个域名关闭某条规则。尽量限定具体的 URI 路径、请求方法或源 IP。否则可能真的放行了攻击流量。
2. 忽略缓存影响
有时浏览器或本地 DNS 缓存了 403 页面,导致你以为规则还在生效。测试前请尝试无痕模式或清除缓存。
3. 混淆规则类型
Cloudflare 有 Managed Rules 和 Custom Rules。更新导致的问题通常发生在 Managed Rules。不要在 Custom Rules 里盲目查找,先确认日志里的 Rule Package 来源。
4. 长期关闭防护
不要为了方便直接把规则状态改为 "Disabled"。例外规则(Exception)比直接禁用更安全,因为它保留了针对其他流量的防护能力。