Cloudflare 防护失效的真相:源站暴露、缓存误配与加固配置实战
Cloudflare 安全漏洞分析|附配置文件
说明:本文聚焦于 Cloudflare 使用过程中的安全风险、常见配置缺陷与防护加固方案。Cloudflare 本身作为全球知名的 CDN、DDoS 防护与边缘安全平台,具备较强的安全能力,但在实际部署中,很多安全事件并非来自平台“被攻破”,而是源站暴露、DNS 配置不当、访问控制缺失、缓存策略错误、WAF 规则薄弱等问题导致。本文将从攻防视角分析常见风险,并附带可参考的配置文件与规则示例。
一、Cloudflare 的安全定位
Cloudflare 常被用于网站加速、HTTPS 证书托管、DNS 解析、Web 应用防火墙、DDoS 防护、Bot 管理、Zero Trust 访问控制等场景。它的核心价值在于把用户流量先引导到 Cloudflare 边缘节点,再由 Cloudflare 转发到真实源站,从而实现:
- 隐藏源站真实 IP;
- 缓解大流量 DDoS 攻击;
- 过滤恶意 HTTP 请求;
- 提供 TLS/SSL 终止;
- 缓存静态资源;
- 对访问者进行安全评分;
- 为企业应用提供身份访问控制。
但需要注意的是,Cloudflare 并不是“万能防火墙”。如果源站服务器仍然直接暴露在公网,攻击者可以绕过 Cloudflare 直接访问源站;如果 SSL 模式配置不当,可能产生中间人风险;如果缓存规则设置错误,可能造成敏感数据泄露;如果 WAF 规则过于宽松,也无法阻断复杂攻击。
因此,Cloudflare 的安全效果高度依赖于正确配置。
二、常见安全风险与漏洞类型
1. 源站 IP 泄露
这是使用 Cloudflare 时最常见、也最危险的问题之一。
Cloudflare 的基本防护前提是:用户请求必须经过 Cloudflare。如果攻击者能够发现源站真实 IP,就可以绕过 Cloudflare 的 WAF、DDoS 防护、速率限制等能力,直接攻击源站。
常见泄露方式包括:
- 历史 DNS 记录泄露;
- 子域名未接入 Cloudflare;
- 邮件服务器与 Web 服务共用 IP;
- SSL 证书透明日志暴露域名信息;
- GitHub、配置文件、日志中泄露源站地址;
- 源站返回错误页面暴露内网或公网 IP;
- 第三方监控、回源接口暴露真实地址;
- 未限制源站仅允许 Cloudflare IP 访问。
例如,主站 www.example.com 已接入 Cloudflare,但 origin.example.com、api-old.example.com、test.example.com 等子域名仍然解析到真实源站 IP。攻击者一旦发现这些记录,就可能根据同一网段或相同服务指纹定位源站。
防护建议
- 不要让源站 IP 出现在任何公开 DNS 记录中;
- Web 源站与邮件服务器分离;
- 源站防火墙只允许 Cloudflare IP 段访问;
- 禁止通过源站 IP 直接访问 Web 服务;
- 使用 Cloudflare Tunnel 隐藏源站;
- 定期检查历史 DNS、证书透明日志和代码仓库泄露。
2. SSL/TLS 模式配置不当
Cloudflare 提供多种 SSL/TLS 模式,包括:
- Off;
- Flexible;
- Full;
- Full(strict)。
很多站点为了方便,会选择 Flexible 模式。该模式下,用户到 Cloudflare 是 HTTPS,但 Cloudflare 到源站可能是 HTTP。这会导致回源链路明文传输,存在被监听、篡改和降级风险。
更安全的模式是 Full(strict)。该模式要求源站配置有效证书,Cloudflare 到源站之间也使用 HTTPS,并验证证书有效性。
风险表现
如果使用 Flexible 模式,可能出现:
- 登录凭据在回源链路中明文传输;
- Cookie 被中间人截获;
- 源站与 Cloudflare 之间通信被篡改;
- 应用误判请求协议,导致跳转循环;
- 安全响应头策略失效。
防护建议
- 推荐使用
Full(strict); - 源站部署有效 TLS 证书;
- 开启 HSTS;
- 禁止 HTTP 明文回源;
- 配置
Authenticated Origin Pulls,验证请求确实来自 Cloudflare。
3. DNS 配置错误
Cloudflare DNS 中有两种常见代理状态:
- 橙色云朵:流量经过 Cloudflare 代理;
- 灰色云朵:仅 DNS 解析,不经过 Cloudflare。
如果关键业务域名设置为灰色云朵,该域名将直接暴露真实 IP,绕过 Cloudflare 防护。
另外,一些不应公开的子域名也可能因 DNS 管理混乱而暴露,例如:
dev.example.comstaging.example.comadmin.example.combackup.example.cominternal.example.com
这些子域名往往安全策略较弱,甚至存在默认账号、测试接口、调试信息等问题。
防护建议
- 统一清理 DNS 记录;
- 关键业务域名必须开启代理;
- 内部系统不要直接暴露到公网;
- 管理后台使用 Cloudflare Access 保护;
- 对测试环境设置 IP 白名单或身份认证;
- 删除过期、废弃、不明来源的 DNS 记录。
4. WAF 规则配置不足
Cloudflare WAF 可以阻断常见 Web 攻击,例如:
- SQL 注入;
- XSS;
- 路径穿越;
- 命令注入;
- 文件包含;
- 扫描器探测;
- 恶意 User-Agent;
- 自动化爆破。
但如果只依赖默认规则,未针对自身业务进行定制,仍可能出现防护盲区。
例如,某些业务接口只允许 POST 请求,但没有限制请求方法;某些 API 应该只允许指定国家或指定客户端访问,但实际上完全公开;管理后台没有额外保护,只依赖账号密码。
防护建议
- 启用 Cloudflare Managed Rules;
- 根据业务特征编写自定义 WAF 规则;
- 对管理后台增加额外身份验证;
- 对登录、注册、短信验证码接口配置速率限制;
- 对高危路径启用更严格安全策略;
- 对异常国家、异常 ASN、异常 User-Agent 做拦截或挑战。
5. 缓存策略错误导致敏感信息泄露
Cloudflare 的缓存能力非常强,但如果规则配置错误,可能会缓存不应缓存的动态响应。
高风险场景包括:
- 登录后页面被缓存;
- API 返回用户隐私数据被缓存;
- 带 Cookie 的请求被错误缓存;
- 后台页面误设为 Cache Everything;
- 响应头缺失
Cache-Control: private或no-store; - 不同用户共享同一个缓存键。
一旦敏感页面被边缘节点缓存,其他用户可能看到不属于自己的数据。这类问题在电商、会员系统、后台系统、SaaS 平台中尤其危险。
防护建议
- 登录态页面禁止缓存;
- API 默认不缓存,除非明确需要;
- 使用
Cache-Control: no-store保护敏感响应; - 不要对全站盲目使用
Cache Everything; - 对带 Cookie 的请求绕过缓存;
- 定期测试不同用户访问是否存在缓存串号。
6. 速率限制缺失
Cloudflare 可以对请求频率进行限制,但很多站点并未启用。缺少速率限制可能导致:
- 登录密码爆破;
- 短信验证码轰炸;
- 邮箱验证码滥发;
- 接口被批量爬取;
- 搜索接口被资源耗尽;
- API 被恶意刷量;
- 业务库存或优惠券被抢占。
防护建议
- 登录接口设置失败次数限制;
- 验证码接口设置严格频控;
- API 根据 IP、路径、请求方法限速;
- 对异常请求触发 JS Challenge 或 Managed Challenge;
- 对高风险行为结合 Bot 分数处理;
- 后端也应实现限速,不能只依赖边缘层。
7. 管理后台暴露
很多企业将后台路径放在:
/admin/manage/dashboard/wp-admin/console/backend
如果这些路径直接暴露公网,仅依赖账号密码,风险较高。攻击者可能进行弱口令尝试、撞库、暴力破解、扫描已知漏洞。
防护建议
- 使用 Cloudflare Access 做身份认证;
- 后台路径限制公司 IP 或 VPN;
- 后台登录开启多因素认证;
- 对后台路径设置 WAF 严格规则;
- 隐藏或更改默认后台路径并非根本防护;
- 对后台接口添加审计日志和异常告警。
8. Origin Pull 验证缺失
即使防火墙限制只允许 Cloudflare IP 段访问,仍建议启用 Authenticated Origin Pulls。
该功能可以让源站验证请求是否由 Cloudflare 发起。它通过客户端证书机制增强可信度,避免攻击者伪造请求头绕过部分逻辑。
需要注意的是,很多应用会信任如下请求头:
CF-Connecting-IP
X-Forwarded-For
X-Real-IP
如果源站允许攻击者直接访问,攻击者可能伪造这些头部,导致应用错误识别客户端 IP,从而绕过风控或访问控制。
防护建议
- 源站禁止公网直接访问;
- 启用 Authenticated Origin Pulls;
- 应用只信任来自 Cloudflare 的代理头;
- 在 Nginx/Apache 层正确还原真实客户端 IP;
- 不要直接信任用户可控请求头。
三、Cloudflare 安全加固配置示例
下面提供几类常见配置示例。实际使用前请根据自身业务域名、路径、接口、服务器环境进行调整。
1. Nginx 源站限制仅允许 Cloudflare IP 访问
以下配置用于保护源站,阻止非 Cloudflare IP 直接访问。
注意:Cloudflare IP 段会更新,建议通过自动化脚本定期同步官方 IP 列表。
cloudflare-allow.conf
# Cloudflare IPv4
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
# Cloudflare IPv6
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
# Block all others
deny all;
Nginx 站点配置示例
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
include /etc/nginx/conf.d/cloudflare-allow.conf;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $realip_remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
2. Nginx 还原真实客户端 IP
当用户经过 Cloudflare 访问源站时,源站看到的直接连接 IP 通常是 Cloudflare 节点 IP。为了记录真实访客 IP,需要配置 real_ip_header。
cloudflare-realip.conf
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
然后在主配置中引入:
http {
include /etc/nginx/conf.d/cloudflare-realip.conf;
log_format main '$realip_remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
}
3. 防止敏感接口被缓存
对于登录、用户中心、订单、支付、后台等路径,应明确关闭缓存。
Nginx 响应头配置
location ~ ^/(login|user|account|order|payment|admin|api/private) {
proxy_pass http://127.0.0.1:8080;
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;
add_header Pragma "no-cache" always;
add_header Expires "0" always;
}
应用层响应头建议
Cache-Control: no-store
Pragma: no-cache
Expires: 0
对于公开静态资源,可以允许缓存:
location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg|webp|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
4. Cloudflare WAF 自定义规则示例
以下为思路示例,可在 Cloudflare 控制台的 WAF 自定义规则中创建。
阻止访问后台的非可信地区请求
(http.request.uri.path starts_with "/admin")
and
(ip.geoip.country not in {"CN" "SG"})
动作建议:
Managed Challenge 或 Block
后台路径只允许指定 IP 访问
(http.request.uri.path starts_with "/admin")
and
(ip.src not in {203.0.113.10 198.51.100.20})
动作:
Block
阻止明显扫描器 User-Agent
(http.user_agent contains "sqlmap")
or
(http.user_agent contains "nikto")
or
(http.user_agent contains "acunetix")
or
(http.user_agent contains "nmap")
动作:
Block
对 WordPress 后台加强防护
(http.request.uri.path starts_with "/wp-admin")
or
(http.request.uri.path = "/wp-login.php")
动作:
Managed Challenge
阻止访问隐藏文件
(http.request.uri.path contains "/.git")
or
(http.request.uri.path contains "/.env")
or
(http.request.uri.path contains "/.svn")
or
(http.request.uri.path contains "/config.php")
动作:
Block
5. Cloudflare Rate Limiting 规则示例
登录接口限速
规则匹配条件:
(http.request.uri.path = "/login")
and
(http.request.method = "POST")
建议策略:
同一 IP 1 分钟内超过 10 次请求,执行 Managed Challenge 或 Block。
短信验证码接口限速
(http.request.uri.path = "/api/sms/send")
and
(http.request.method = "POST")
建议策略:
同一 IP 1 分钟内超过 3 次请求,执行 Block。
同一手机号每日发送次数应由后端系统额外限制。
API 高频访问限制
(http.request.uri.path starts_with "/api/")
建议策略:
同一 IP 1 分钟内超过 300 次请求,执行 Managed Challenge。
对认证用户还应基于 user_id、token、设备指纹做后端限速。
6. Cloudflare Page Rules / Cache Rules 建议
静态资源缓存
匹配:
example.com/static/*
example.com/assets/*
example.com/images/*
策略:
Cache Level: Cache Everything
Edge Cache TTL: 1 month
Browser Cache TTL: 1 month
后台与用户页面绕过缓存
匹配:
example.com/admin/*
example.com/user/*
example.com/account/*
example.com/order/*
example.com/api/private/*
策略:
Cache Level: Bypass
不建议全站 Cache Everything
如果不了解业务响应内容,不建议对全站启用:
example.com/*
Cache Everything
该配置可能缓存动态页面,造成用户数据错乱或敏感信息泄露。
7. Cloudflare 安全响应头配置
可以在源站或 Cloudflare Transform Rules 中添加安全响应头。
推荐响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
如果站点结构稳定,可以逐步增加 CSP:
add_header Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline'; object-src 'none'; frame-ancestors 'self';" always;
需要注意,CSP 配置过严可能影响前端功能,应先在测试环境验证。
四、Cloudflare 安全检查清单
以下清单可用于日常巡检。
DNS 与源站
- [ ] 主域名和重要子域名是否开启 Cloudflare 代理;
- [ ] 是否存在灰色云朵暴露源站;
- [ ] 是否清理了废弃 DNS 记录;
- [ ] 源站防火墙是否只允许 Cloudflare IP;
- [ ] 邮件服务器是否与 Web 源站分离;
- [ ] 是否定期检查源站 IP 是否泄露;
- [ ] 是否考虑使用 Cloudflare Tunnel。
TLS 与证书
- [ ] SSL 模式是否为 Full(strict);
- [ ] 源站证书是否有效;
- [ ] 是否开启 HSTS;
- [ ] 是否禁用不安全 TLS 版本;
- [ ] 是否启用 Authenticated Origin Pulls。
WAF 与访问控制
- [ ] 是否启用 Cloudflare Managed Rules;
- [ ] 是否为后台路径设置额外规则;
- [ ] 是否阻断常见扫描器;
- [ ] 是否对高危国家或异常 ASN 做策略;
- [ ] 是否对登录接口配置限速;
- [ ] 是否对验证码接口配置限速;
- [ ] 是否启用 Bot Fight Mode 或 Bot Management。
缓存与数据保护
- [ ] 是否避免全站 Cache Everything;
- [ ] 登录态页面是否禁止缓存;
- [ ] 用户隐私数据接口是否禁止缓存;
- [ ] 是否正确设置 Cache-Control;
- [ ] 是否验证不同用户之间不会出现缓存串号;
- [ ] 是否检查 Cloudflare 缓存规则优先级。
日志与监控
- [ ] 是否保留 Cloudflare 安全事件日志;
- [ ] 是否监控 WAF 命中情况;
- [ ] 是否分析异常 IP、ASN、国家来源;
- [ ] 是否对登录失败、验证码发送等行为告警;
- [ ] 是否定期复盘被拦截请求;
- [ ] 是否将日志接入 SIEM 或安全审计平台。
五、推荐部署架构
较安全的部署架构如下:
用户
|
v
Cloudflare DNS / CDN / WAF / DDoS Protection
|
v
Cloudflare Access / Zero Trust
|
v
源站防火墙:仅允许 Cloudflare IP
|
v
Nginx / Load Balancer
|
v
应用服务
|
v
数据库 / 缓存 / 内部服务
关键原则是:
- 所有公网 HTTP/HTTPS 流量必须经过 Cloudflare;
- 源站不得直接暴露给互联网;
- 后台系统必须增加身份访问控制;
- 动态敏感数据禁止缓存;
- WAF、速率限制、后端权限校验要组合使用;
- 日志监控和告警必须持续运行。
六、自动更新 Cloudflare IP 的脚本示例
Cloudflare IP 段可能更新,建议定期拉取官方列表并生成 Nginx 配置。
update-cloudflare-ip.sh
#!/bin/bash
set -e
CONF="/etc/nginx/conf.d/cloudflare-allow.conf"
TMP="/tmp/cloudflare-allow.conf"
echo "# Auto generated Cloudflare IP allow list" > "$TMP"
echo "# Updated at: $(date)" >> "$TMP"
echo "" >> "$TMP"
curl -s https://www.cloudflare.com/ips-v4 | while read ip; do
echo "allow $ip;" >> "$TMP"
done
curl -s https://www.cloudflare.com/ips-v6 | while read ip; do
echo "allow $ip;" >> "$TMP"
done
echo "deny all;" >> "$TMP"
cp "$TMP" "$CONF"
nginx -t
systemctl reload nginx
echo "Cloudflare IP allow list updated successfully."
Crontab 定时任务
0 3 * * * /bin/bash /usr/local/bin/update-cloudflare-ip.sh >> /var/log/update-cloudflare-ip.log 2>&1
该脚本每天凌晨 3 点同步 Cloudflare IP 列表,并自动重载 Nginx。
七、常见误区
误区一:用了 Cloudflare 就不会被攻击
Cloudflare 可以降低风险,但不能替代应用安全。SQL 注入、越权访问、业务逻辑漏洞、弱口令、依赖组件漏洞等问题仍需要开发与运维团队修复。
误区二:源站暴露也没关系
源站暴露会让攻击者绕过 Cloudflare。只要真实 IP 被发现,DDoS 防护、WAF、Rate Limiting 等边缘防护都会失效。
误区三:全站缓存能提升性能
全站缓存如果没有精细规则,可能造成敏感数据泄露。动态页面、用户中心、支付订单、后台管理页面必须谨慎处理。
误区四:Flexible SSL 足够安全
Flexible 只保护用户到 Cloudflare 的链路,不保证 Cloudflare 到源站的安全。生产环境建议使用 Full(strict)。
误区五:只靠 WAF 就能防漏洞
WAF 是缓解手段,不是根治方法。真正的安全仍依赖安全编码、权限控制、输入校验、依赖更新和持续审计。
八、总结
Cloudflare 是非常强大的边缘安全平台,但它的安全能力需要建立在正确配置之上。实际安全事件中,很多问题不是 Cloudflare 本身失效,而是因为源站暴露、DNS 配置错误、TLS 模式不安全、缓存规则不当、WAF 未启用、后台缺少访问控制等原因造成。
如果要最大化发挥 Cloudflare 的防护效果,建议重点做好以下几件事:
- 隐藏源站真实 IP:源站防火墙仅允许 Cloudflare IP 访问;
- 使用 Full(strict):确保端到端 HTTPS 加密;
- 启用 WAF 与托管规则:并根据业务定制规则;
- 保护后台路径:使用 Cloudflare Access、IP 白名单或 MFA;
- 谨慎配置缓存:敏感数据和登录态页面绝不缓存;
- 配置速率限制:保护登录、验证码、API 等关键接口;
- 持续监控日志:及时发现扫描、爆破、爬虫和异常访问;
- 定期巡检 DNS 与证书:避免历史记录和子域名泄露源站。
Cloudflare 的最佳实践并不是“开通即可”,而是需要结合源站、应用、网络、防火墙、日志与身份系统形成完整安全体系。只有做到边缘防护与源站加固相互配合,才能真正降低攻击面,提高网站和业务系统的整体安全性。