Cloudflare 漏洞应急处理指南:从升级 cloudflared 到锁死源站访问
Cloudflare 最新漏洞修复教程|附完整命令
适用对象:使用 Cloudflare DNS、CDN、WAF、Zero Trust、Cloudflare Tunnel、Workers、Pages、R2 或 API Token 的网站管理员、运维工程师、安全工程师。
说明:由于 Cloudflare 的安全更新和漏洞公告会持续变化,本文以“最新漏洞应急修复”的通用实战流程为主,覆盖常见受影响场景:cloudflared组件、源站暴露、WAF 规则缺失、API Token 权限过大、Workers/Pages 依赖风险、TLS 配置不当等。你可以根据 Cloudflare 官方公告中的具体 CVE 编号和受影响版本,对照本文步骤进行修复。
一、漏洞修复前需要先确认什么?
在处理 Cloudflare 相关漏洞时,很多人会直接去“升级版本”,但实际上 Cloudflare 是一个边缘网络平台,涉及的组件较多。一次完整的修复至少要确认以下几个方面:
- 你是否使用了 Cloudflare Tunnel / cloudflared
- 源站 IP 是否被绕过 Cloudflare 直接访问
- WAF、防火墙规则是否启用
- 是否存在高权限 API Token 泄露风险
- Workers、Pages、R2 等应用代码是否存在依赖漏洞
- SSL/TLS 配置是否安全
- 日志中是否已经出现异常访问行为
如果你的业务只是使用 Cloudflare 做 DNS 解析和 CDN 加速,重点应放在 DNS、源站保护、WAF 规则和 TLS 配置上。
如果你使用了 Cloudflare Tunnel、Zero Trust 或自建 cloudflared,则必须检查 cloudflared 版本并及时升级。
二、第一步:查看 Cloudflare 官方安全公告
建议先查看 Cloudflare 官方公告和状态页面,确认漏洞影响范围。
1. Cloudflare 官方博客
https://blog.cloudflare.com/
2. Cloudflare 状态页
https://www.cloudflarestatus.com/
3. Cloudflare 文档中心
https://developers.cloudflare.com/
如果官方公告中给出了 CVE 编号,例如:
CVE-20XX-XXXXX
你需要重点关注以下信息:
- 受影响产品
- 受影响版本
- 是否已被利用
- 官方修复版本
- 是否需要用户手动操作
- 是否只影响特定配置
三、第二步:盘点本机是否安装 cloudflared
如果你使用了 Cloudflare Tunnel,服务器上通常会安装 cloudflared。
查看 cloudflared 是否存在
which cloudflared
如果有输出,例如:
/usr/local/bin/cloudflared
说明系统中已安装。
查看 cloudflared 版本
cloudflared --version
示例输出:
cloudflared version 2024.12.2
你需要将该版本与 Cloudflare 官方公告中的“安全版本”进行对比。如果你的版本低于官方建议版本,应立即升级。
四、第三步:升级 cloudflared
不同系统的升级方式不同,下面分别给出常见 Linux 发行版的完整命令。
五、Ubuntu / Debian 升级 cloudflared
1. 更新软件源
sudo apt update
2. 查看当前安装版本
cloudflared --version
3. 如果通过 apt 安装,直接升级
sudo apt install --only-upgrade cloudflared -y
4. 如果无法升级,重新安装官方最新版
先下载最新版:
wget -O cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
安装:
sudo dpkg -i cloudflared.deb
修复依赖:
sudo apt -f install -y
再次查看版本:
cloudflared --version
六、CentOS / Rocky Linux / AlmaLinux 升级 cloudflared
1. 查看当前版本
cloudflared --version
2. 下载最新 RPM 包
curl -L -o cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
3. 安装或升级
sudo rpm -Uvh cloudflared.rpm
如果系统使用 dnf,也可以执行:
sudo dnf install -y ./cloudflared.rpm
4. 检查版本
cloudflared --version
七、macOS 升级 cloudflared
如果你通过 Homebrew 安装:
brew update
brew upgrade cloudflared
查看版本:
cloudflared --version
如果未安装:
brew install cloudflared
八、Windows 升级 cloudflared
Windows 环境下通常是下载 .exe 文件。
1. 查看当前版本
在 PowerShell 中执行:
cloudflared.exe --version
2. 下载最新版
打开官方 Release 页面:
https://github.com/cloudflare/cloudflared/releases/latest
下载对应版本:
cloudflared-windows-amd64.exe
3. 替换旧文件
如果旧文件位于:
C:\cloudflared\cloudflared.exe
可以先停止服务:
Stop-Service cloudflared
替换文件后重新启动:
Start-Service cloudflared
检查状态:
Get-Service cloudflared
查看版本:
C:\cloudflared\cloudflared.exe --version
九、第四步:重启 cloudflared 服务
升级完成后,仅安装新版本还不够,必须重启服务,让新版本真正生效。
Linux systemd 环境
sudo systemctl restart cloudflared
查看运行状态:
sudo systemctl status cloudflared
查看日志:
sudo journalctl -u cloudflared -f
如果你有多个 Tunnel 服务,可以列出服务:
systemctl list-units | grep cloudflared
十、第五步:验证 Tunnel 是否正常
查看 Tunnel 列表
cloudflared tunnel list
查看指定 Tunnel 信息
cloudflared tunnel info
例如:
cloudflared tunnel info my-tunnel
测试访问业务域名
curl -I https://example.com
你应该看到类似响应头:
server: cloudflare
cf-cache-status: DYNAMIC
如果访问失败,需要检查 Tunnel 配置文件。
常见配置文件位置:
/etc/cloudflared/config.yml
查看配置:
sudo cat /etc/cloudflared/config.yml
检查语法:
cloudflared tunnel ingress validate
十一、第六步:检查源站是否暴露
很多 Cloudflare 漏洞或攻击事件并不是平台本身导致的,而是源站 IP 直接暴露,攻击者绕过 Cloudflare 访问源站。
1. 查询域名解析
dig example.com
或:
nslookup example.com
如果返回的是 Cloudflare IP,说明域名已接入 Cloudflare。
2. 检查源站是否可被直连
如果你知道源站 IP,例如:
203.0.113.10
可以测试:
curl -I http://203.0.113.10
或:
curl -k -I https://203.0.113.10
如果源站 IP 可以直接返回网站内容,说明存在绕过风险。
3. 使用 Host 头模拟访问源站
curl -H "Host: example.com" http://203.0.113.10 -I
如果返回正常业务页面,说明攻击者可能绕过 Cloudflare 的 WAF 和访问控制。
十二、第七步:只允许 Cloudflare IP 访问源站
为了避免绕过 Cloudflare,应在源站防火墙上只允许 Cloudflare IP 段访问 80/443 端口。
Cloudflare 官方 IP 段地址:
https://www.cloudflare.com/ips/
十三、Linux iptables 限制源站访问
注意:执行防火墙命令前,请务必确认你有 SSH 登录白名单,避免误封自己。
1. 允许 SSH
假设你的 SSH 端口是 22:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果你只允许自己的办公 IP 登录,推荐:
sudo iptables -A INPUT -p tcp -s 你的公网IP --dport 22 -j ACCEPT
2. 允许 Cloudflare IPv4 访问 HTTP/HTTPS
下面是示例命令,建议以 Cloudflare 官方 IP 段为准。
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
sudo iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT
done
3. 允许 Cloudflare IPv6 访问 HTTP/HTTPS
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do
sudo ip6tables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT
sudo ip6tables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT
done
4. 拒绝其他来源访问 80/443
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
sudo iptables -A INPUT -p tcp --dport 443 -j DROP
IPv6:
sudo ip6tables -A INPUT -p tcp --dport 80 -j DROP
sudo ip6tables -A INPUT -p tcp --dport 443 -j DROP
5. 保存规则
Debian / Ubuntu:
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
CentOS / Rocky Linux:
sudo service iptables save
十四、使用 firewalld 限制 Cloudflare IP
如果你的服务器使用 firewalld,可以这样配置。
1. 查看 firewalld 状态
sudo firewall-cmd --state
2. 创建 Cloudflare 专用 zone
sudo firewall-cmd --permanent --new-zone=cloudflare
3. 添加 Cloudflare IP 段
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
sudo firewall-cmd --permanent --zone=cloudflare --add-source=$ip
done
4. 开放 HTTP/HTTPS
sudo firewall-cmd --permanent --zone=cloudflare --add-service=http
sudo firewall-cmd --permanent --zone=cloudflare --add-service=https
5. 重新加载
sudo firewall-cmd --reload
6. 验证规则
sudo firewall-cmd --zone=cloudflare --list-all
十五、第八步:启用 Cloudflare WAF 托管规则
Cloudflare WAF 是抵御常见 Web 漏洞攻击的重要防线,例如:
- SQL 注入
- XSS
- 文件包含
- 命令注入
- 恶意扫描
- WordPress 攻击
- Log4j 类攻击
- 常见 CMS 漏洞利用
建议至少启用以下功能:
- Managed Rules
- Cloudflare Managed Ruleset
- OWASP Core Ruleset
- Bot Fight Mode 或 Super Bot Fight Mode
- Rate Limiting Rules
如果你的 Cloudflare 套餐支持 API,可以使用 API 查询规则集。不过大多数用户直接在后台操作更方便。
路径通常为:
Cloudflare Dashboard
→ 选择站点
→ Security
→ WAF
→ Managed rules
将相关规则设置为:
Block 或 Managed Challenge
如果担心误拦截,可以先使用:
Log
观察 24 小时后再调整为拦截。
十六、第九步:添加基础防火墙规则
下面给出几类实用的 Cloudflare 自定义规则思路。
1. 禁止非中国访问,仅适合国内业务
表达式示例:
(ip.geoip.country ne "CN")
动作:
Managed Challenge
如果你的业务面向全球,不建议使用该规则。
2. 拦截可疑 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
3. 保护后台路径
例如 WordPress 后台:
(http.request.uri.path contains "/wp-admin")
动作:
Managed Challenge
如果只允许固定 IP 访问后台,可以使用:
(http.request.uri.path contains "/wp-admin" and ip.src ne 你的公网IP)
动作:
Block
4. 限制高频请求
路径:
Security → WAF → Rate limiting rules
示例策略:
当同一 IP 在 10 秒内请求超过 100 次时,执行 Managed Challenge 或 Block。
十七、第十步:检查 SSL/TLS 配置
错误的 TLS 配置可能导致中间人攻击、证书校验失败或源站通信不安全。
Cloudflare 推荐使用:
SSL/TLS encryption mode: Full (strict)
不要长期使用:
Flexible
因为 Flexible 模式下,访问者到 Cloudflare 是 HTTPS,但 Cloudflare 到源站可能是 HTTP,存在安全风险。
1. 检查站点证书
curl -Iv https://example.com
关注输出中的:
SSL connection
issuer
subject
expire date
2. 源站安装 Cloudflare Origin Certificate
在 Cloudflare 后台:
SSL/TLS → Origin Server → Create Certificate
生成证书后,将证书保存到源站。
示例路径:
/etc/ssl/cloudflare/origin.pem
/etc/ssl/cloudflare/origin.key
设置权限:
sudo mkdir -p /etc/ssl/cloudflare
sudo chmod 700 /etc/ssl/cloudflare
sudo chmod 600 /etc/ssl/cloudflare/origin.key
十八、Nginx 配置 Cloudflare Origin Certificate
编辑站点配置:
sudo nano /etc/nginx/sites-available/example.com
示例配置:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/cloudflare/origin.pem;
ssl_certificate_key /etc/ssl/cloudflare/origin.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header CF-Connecting-IP $http_cf_connecting_ip;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
测试配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
十九、Apache 配置 Cloudflare Origin Certificate
启用 SSL 模块:
sudo a2enmod ssl
sudo systemctl restart apache2
编辑虚拟主机:
sudo nano /etc/apache2/sites-available/example.com-ssl.conf
示例配置:
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/cloudflare/origin.pem
SSLCertificateKeyFile /etc/ssl/cloudflare/origin.key
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
启用站点:
sudo a2ensite example.com-ssl.conf
sudo apachectl configtest
sudo systemctl reload apache2
二十、第十一步:轮换 Cloudflare API Token
如果漏洞涉及 Cloudflare API、自动化部署、CI/CD 或疑似 Token 泄露,必须立即轮换 API Token。
后台路径:
Cloudflare Dashboard
→ My Profile
→ API Tokens
处理建议:
- 删除长期不用的 Token
- 将 Global API Key 替换为细粒度 API Token
- 每个系统使用独立 Token
- Token 只授予必要权限
- 发现异常立即撤销
如果你的服务器环境变量中保存了 Token,可以这样检查:
env | grep -i cloudflare
检查常见配置文件:
grep -R "CLOUDFLARE" /etc /opt /var/www 2>/dev/null
检查 Git 仓库中是否误提交:
git grep -i "cloudflare"
git grep -i "api_token"
git grep -i "global_api_key"
如果发现泄露,立即删除旧 Token,并重新配置新 Token。
二十一、更新环境变量中的 Token
例如应用使用 .env 文件:
sudo nano /var/www/example.com/.env
更新:
CLOUDFLARE_API_TOKEN=新的Token
重启应用:
sudo systemctl restart your-app
如果使用 Docker Compose:
docker compose restart
如果使用 PM2:
pm2 restart all
二十二、第十二步:检查 Workers 和 Pages 依赖漏洞
如果你使用 Cloudflare Workers 或 Pages,漏洞可能并非 Cloudflare 平台本身,而是项目依赖包存在风险。
进入项目目录:
cd /path/to/your/project
Node.js 项目检查
npm audit
自动修复:
npm audit fix
如果允许破坏性升级:
npm audit fix --force
升级依赖:
npm update
如果使用 pnpm:
pnpm audit
pnpm update
如果使用 yarn:
yarn audit
yarn upgrade
重新部署 Workers:
npx wrangler deploy
重新部署 Pages 项目:
npx wrangler pages deploy ./dist
二十三、第十三步:升级 Wrangler
Wrangler 是 Cloudflare Workers 的命令行工具。建议同步升级。
npm 安装方式
npm install -g wrangler@latest
查看版本:
wrangler --version
登录 Cloudflare:
wrangler login
验证账号:
wrangler whoami
部署:
wrangler deploy
二十四、第十四步:清理 Cloudflare 缓存
修复完成后,如果漏洞涉及静态文件、前端 JS、配置泄露或缓存污染,应立即清理缓存。
后台路径:
Caching → Configuration → Purge Cache
可以选择:
Purge Everything
如果使用 API,需要准备:
ZONE_ID="你的Zone ID"
API_TOKEN="你的API Token"
清理全部缓存:
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
清理指定 URL:
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"files":["https://example.com/app.js","https://example.com/index.html"]}'
二十五、第十五步:检查访问日志是否存在攻击痕迹
Nginx 日志
sudo tail -f /var/log/nginx/access.log
搜索异常请求:
sudo grep -Ei "sqlmap|union select|base64|/etc/passwd|wp-config|eval\(|cmd=|powershell" /var/log/nginx/access.log
查看最近 1000 行:
sudo tail -n 1000 /var/log/nginx/access.log
Apache 日志
sudo tail -f /var/log/apache2/access.log
搜索异常:
sudo grep -Ei "sqlmap|union select|base64|/etc/passwd|wp-config|eval\(|cmd=|powershell" /var/log/apache2/access.log
cloudflared 日志
sudo journalctl -u cloudflared --since "24 hours ago"
持续查看:
sudo journalctl -u cloudflared -f
二十六、第十六步:确认真实访客 IP 获取正确
接入 Cloudflare 后,源站看到的直接访问 IP 通常是 Cloudflare 节点 IP,而不是用户真实 IP。需要通过 CF-Connecting-IP 获取真实访客 IP。
Nginx 配置真实 IP
安装或确认 Nginx 支持 realip 模块:
nginx -V 2>&1 | grep realip
添加配置:
sudo nano /etc/nginx/conf.d/cloudflare-real-ip.conf
写入:
real_ip_header CF-Connecting-IP;
# Cloudflare IPv4
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;
测试:
sudo nginx -t
重载:
sudo systemctl reload nginx
二十七、第十七步:开启安全相关功能
建议在 Cloudflare 后台开启以下功能:
1. Always Use HTTPS
路径:
SSL/TLS → Edge Certificates → Always Use HTTPS
建议开启。
2. Automatic HTTPS Rewrites
路径:
SSL/TLS → Edge Certificates → Automatic HTTPS Rewrites
建议开启。
3. Minimum TLS Version
路径:
SSL/TLS → Edge Certificates → Minimum TLS Version
建议设置为:
TLS 1.2
如果业务兼容性允许,可以设置为:
TLS 1.3
4. HSTS
路径:
SSL/TLS → Edge Certificates → HTTP Strict Transport Security
开启前请确认:
- 全站 HTTPS 正常
- 子域名证书正常
- 不再需要 HTTP
- 不存在旧系统依赖 HTTP
二十八、第十八步:检查 DNS 记录安全
进入 Cloudflare DNS 页面,重点检查:
- 是否存在不再使用的 A 记录
- 是否存在暴露源站 IP 的灰云记录
- 是否存在测试域名指向生产服务器
- MX、TXT、CNAME 是否配置异常
- 是否开启 DNSSEC
对于 Web 服务,建议开启橙云代理:
Proxied
不建议公开的源站记录:
origin.example.com
server.example.com
test.example.com
admin.example.com
如果这些域名直接指向源站 IP,攻击者可以绕过 Cloudflare。
二十九、第十九步:开启 DNSSEC
DNSSEC 可以降低 DNS 劫持和伪造风险。
Cloudflare 后台路径:
DNS → Settings → DNSSEC
开启后,需要到域名注册商处添加 DS 记录。
常见字段包括:
Key Tag
Algorithm
Digest Type
Digest
添加后等待全球 DNS 生效。
验证命令:
dig DS example.com
或:
dig +dnssec example.com
三十、第二十步:最终验证清单
完成修复后,建议按下面清单逐项确认。
| 检查项 | 是否完成 |
|---|---|
| 已确认官方漏洞公告 | ✅ |
| 已确认受影响产品和版本 | ✅ |
| 已升级 cloudflared | ✅ |
| 已重启 cloudflared 服务 | ✅ |
| Tunnel 访问正常 | ✅ |
| 源站 IP 不可被绕过访问 | ✅ |
| 只允许 Cloudflare IP 访问 80/443 | ✅ |
| 已启用 WAF 托管规则 | ✅ |
| 已配置速率限制 | ✅ |
| SSL/TLS 使用 Full strict | ✅ |
| 已轮换高风险 API Token | ✅ |
| 已清理缓存 | ✅ |
| 已检查访问日志 | ✅ |
| 已检查 Workers/Pages 依赖 | ✅ |
| 已开启 DNSSEC | ✅ |
三十一、常见问题
1. 升级 cloudflared 后网站打不开怎么办?
先查看服务状态:
sudo systemctl status cloudflared
查看日志:
sudo journalctl -u cloudflared -n 100
检查配置:
cloudflared tunnel ingress validate
如果配置错误,修复 /etc/cloudflared/config.yml 后重启:
sudo systemctl restart cloudflared
2. 防火墙设置后自己也访问不了网站怎么办?
如果你只允许 Cloudflare IP 访问源站,那么直接访问源站 IP 会被拒绝,这是正常现象。
正确验证方式是访问域名:
curl -I https://example.com
不要直接访问源站 IP。
3. Cloudflare 后台显示 521 怎么办?
521 Web Server Is Down 通常表示 Cloudflare 无法连接源站。
检查源站 Web 服务:
sudo systemctl status nginx
或:
sudo systemctl status apache2
检查端口:
sudo ss -lntp
确认 80/443 正在监听。
4. Cloudflare 后台显示 525 怎么办?
525 SSL Handshake Failed 通常是 Cloudflare 与源站 TLS 握手失败。
建议:
- 确认源站证书有效
- 使用 Full strict 模式
- 检查 Nginx/Apache SSL 配置
- 确认源站支持 TLS 1.2 或 TLS 1.3
测试:
openssl s_client -connect example.com:443 -servername example.com
三十二、总结
Cloudflare 漏洞修复不能只理解为“升级一下版本”。对于真实生产环境来说,完整的安全修复应包括:确认公告、升级组件、重启服务、验证 Tunnel、限制源站访问、启用 WAF、检查 TLS、轮换 Token、清理缓存、审计日志和排查依赖漏洞。
如果你使用了 cloudflared,请第一时间检查版本并升级到官方最新版本;如果你的源站 IP 暴露,请立即通过防火墙只允许 Cloudflare IP 访问 80/443;如果你使用 API Token、Workers 或 Pages,也要同步检查权限和依赖安全。
最后建议建立长期安全机制:
- 每月检查一次 Cloudflare 配置
- 每周更新服务器安全补丁
- API Token 最小权限化
- 源站永不裸奔
- WAF 规则定期调整
- 日志至少保留 30 天
- 重要业务开启告警和速率限制
只要按照本文流程执行,大多数 Cloudflare 相关风险都可以得到有效缓解。