上一篇 下一篇 分享链接 返回 返回顶部

Cloudflare 漏洞应急处理指南:从升级 cloudflared 到锁死源站访问

发布人:慈云数据-客服中心 发布时间:24小时前 阅读量:4

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 是一个边缘网络平台,涉及的组件较多。一次完整的修复至少要确认以下几个方面:

  1. 你是否使用了 Cloudflare Tunnel / cloudflared
  2. 源站 IP 是否被绕过 Cloudflare 直接访问
  3. WAF、防火墙规则是否启用
  4. 是否存在高权限 API Token 泄露风险
  5. Workers、Pages、R2 等应用代码是否存在依赖漏洞
  6. SSL/TLS 配置是否安全
  7. 日志中是否已经出现异常访问行为

如果你的业务只是使用 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 漏洞利用

建议至少启用以下功能:

  1. Managed Rules
  2. Cloudflare Managed Ruleset
  3. OWASP Core Ruleset
  4. Bot Fight Mode 或 Super Bot Fight Mode
  5. 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

处理建议:

  1. 删除长期不用的 Token
  2. 将 Global API Key 替换为细粒度 API Token
  3. 每个系统使用独立 Token
  4. Token 只授予必要权限
  5. 发现异常立即撤销

如果你的服务器环境变量中保存了 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 页面,重点检查:

  1. 是否存在不再使用的 A 记录
  2. 是否存在暴露源站 IP 的灰云记录
  3. 是否存在测试域名指向生产服务器
  4. MX、TXT、CNAME 是否配置异常
  5. 是否开启 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 握手失败。

建议:

  1. 确认源站证书有效
  2. 使用 Full strict 模式
  3. 检查 Nginx/Apache SSL 配置
  4. 确认源站支持 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 相关风险都可以得到有效缓解。

目录结构
全文