遇到 Cloudflare 403 禁止访问,绝大多数情况是触发了 WAF 防火墙规则或安全等级限制。最稳妥的做法是先去后台查看安全事件日志,确认拦截原因后再针对性放行,切勿盲目关闭安全防护。
先说结论:大部分 403 是 Cloudflare 安全策略拦截所致,需登录后台调整防火墙或 WAF 设置,而非直接修改服务器配置。
- 先确认:登录 Cloudflare 后台查看 Security > Events 日志,确认拦截规则 ID。
- 先处理:根据日志调整 Firewall Rules 或 WAF 灵敏度,必要时将可信 IP 加入允许列表。
- 再验证:使用无痕模式或 curl 命令测试访问,确认状态码变为 200。
快速定位与验证
首先确认 403 是由 Cloudflare 层拦截还是源站返回。在本地终端执行:
curl -I https://你的域名.com
检查响应头。若包含 cf-ray 或 server: cloudflare,说明是 Cloudflare 拦截;若没有这些头且直连 IP 也 403,则问题在源站服务器配置。
核心原因分析
Cloudflare 403 通常由以下机制触发:
- WAF 规则:检测到 SQL 注入、XSS 特征或异常 User-Agent。
- 防火墙规则:手动拦截了特定 IP 段、国家地区或 ASN。
- 速率限制:单位时间内请求过多触发 Rate Limiting。
- 源站透传:源站 Nginx/Apache 自身返回 403,Cloudflare 透传状态码。
分步处理方案
第一步:查看安全事件日志
登录 Cloudflare Dashboard,进入 Security > Events。筛选动作类型为"Blocked"或"Challenge"的记录。点击具体条目,查看"Rule ID"或"Rule Name",这是定位问题的关键依据。
第二步:配置 WAF 规则例外(白名单)
如果是自定义防火墙规则误拦,进入 Security > WAF > Firewall rules。找到对应规则点击"Edit",在"Expression"构建器中添加例外条件。常用字段:ip.src(源 IP),操作符选择 equals 或 is in,填入可信 IP。或者在"Managed Rules"中找到触发规则集,将动作改为"Log"或降低灵敏度。
第三步:排查源站配置(谨慎操作)
如果 Cloudflare 日志无拦截记录,可能是源站限制。可暂时暂停 Cloudflare 代理:进入 DNS 页面,找到对应记录,点击编辑,将代理状态从"Proxied"(橙色云)改为"DNS Only"(灰色云)。直接访问源站 IP 测试。重要:测试完成后请务必重新开启代理(改回橙色云),否则源站 IP 将长期暴露,遭受直接攻击。
验证是否生效
修改配置后,清除本地缓存或使用无痕窗口。推荐使用命令行验证,避免缓存干扰:
curl -I -H "Cache-Control: no-cache" https://你的域名.com
观察返回状态码是否为 200 OK。同时刷新 Security Events 页面,确认不再有新的 Blocked 记录产生。
常见坑与经验总结
1. 误关安全防护:不要为了省事直接将安全等级调为"Essentially Off",这会让网站暴露在攻击风险中。建议只针对可信 IP 放行。
2. API 访问受限:程序调用接口报 403,常因触发了速率限制。需在 Firewall Rules 中针对 API 路径(如 http.request.uri.path contains "/api")放宽限制。
3. 缓存干扰:配置已改但本地 DNS 或浏览器缓存了 403 页面。务必清除缓存或使用不同网络环境测试。
4. 代理状态恢复:使用 DNS Only 排查后,容易忘记改回 Proxied。建议设置提醒,排查完毕立即恢复橙色云代理状态。
参考来源
- Cloudflare Support, "Troubleshooting Cloudflare 403 Errors", https://support.cloudflare.com/hc/en-us/articles/115003014512-Troubleshooting-Cloudflare-403-Errors
- Cloudflare Support, "Understanding Security Events", https://support.cloudflare.com/hc/en-us/articles/115000609152-Understanding-Security-Events