返回博客

安全防护

Cloudflare 拦截 WordPress 恶意机器人流量完全教程

2026-09-23

阅读约:66分钟

本教程系统讲解如何利用 Cloudflare 全球安全网络为 WordPress 网站构建多层机器人防护体系,从免费版 Bot Fight Mode 到进阶 WAF 自定义规则、Rate Limiting、Turnstile 无感验证码,再到 Workers 自定义逻辑,帮助你以最低成本挡住 80% 以上的恶意机器人流量。

1. 开头导语

WordPress 驱动着全球超过 40% 的网站,这也使其成为恶意机器人流量的首要攻击目标。每天有成千上万的自动化脚本对你的 wp-login.php、xmlrpc.php、wp-json 接口发起暴力破解、漏洞扫描和内容爬取。这些机器人流量不仅消耗服务器带宽和 CPU 资源,还可能导致账号被盗、数据泄露、SEO 排名下降,甚至拖垮整台服务器。

Cloudflare 作为全球最大的 CDN 与网络安全平台之一,服务着超过 5000 万个网站,其全球 Anycast 网络每天处理超过数万亿 HTTP 请求,并在此基础上构建了从免费到企业级的完整机器人防护体系。即便不花一分钱,免费版的 Bot Fight Mode、WAF 和 Rate Limiting 也足以挡住绝大多数常见机器人攻击。

本教程将从恶意机器人的威胁分析入手,逐步带你完成 Cloudflare for WordPress 的全流程配置,涵盖 DNS 接入、SSL 模式选择、Bot Fight Mode、WAF 自定义规则、Rate Limiting、Turnstile 验证码、Cloudflare WordPress 插件配合、Super Bot Fight Mode 与 Workers 进阶防护、监控调优与故障排查,最后给出一份可直接执行的行动清单。

2. 恶意机器人对 WordPress 的五大威胁

在动手配置防护之前,先要清楚你面对的敌人是谁。恶意机器人对 WordPress 的威胁主要集中在以下五个方向,每一种攻击都有明确的自动化特征和对应的防护思路。

2.1 暴力破解登录凭证(Brute Force / Credential Stuffing)

**暴力破解(Brute Force)**是指机器人不断尝试用户名和密码组合来登录 WordPress 后台。**撞库攻击(Credential Stuffing)**则是利用其他网站泄露的账号密码字典,批量尝试登录你的 WordPress,命中率高且极具威胁。

攻击者通常直接对 wp-login.php 发起大量 POST 请求,或通过 xmlrpc.php 的 system.multicall 方法一次性提交数百个密码尝试(单次请求即可尝试数百账号),从而绕过传统的登录失败次数限制。一次成功的撞库就能让攻击者获得管理员权限,进而植入后门、篡改页面、窃取用户数据。

这类攻击的典型特征是:来自数据中心 IP 段、高频 POST 请求、异常的 User-Agent、固定的 Referer 缺失。Cloudflare 的 Rate Limiting 和 WAF 自定义规则可以精准拦截。

2.2 漏洞自动化扫描(wp-scanner、漏洞利用工具)

攻击者使用 WPScan、Nuclei、Acunetix 等自动化扫描器,遍历 WordPress 网站的常见路径(如 /wp-content/、/wp-includes/、/readme.html、/wp-config.php 备份文件),探测已安装的插件版本和已知漏洞(CVE)。一旦发现版本过旧或存在未修复漏洞的插件,攻击者即可利用公开的漏洞利用代码(Exploit)进行攻击。

这类扫描器往往会在 HTTP 请求头中携带特定标识(如 WPScan、sqlmap、Nikto 等关键字),或访问明显非正常用户会访问的探测路径。Cloudflare 的 Bot Fight Mode 和 WAF 的 User-Agent 匹配规则能直接将这些扫描器挡在门外。

2.3 内容恶意爬取(抄袭、竞品分析、数据窃取)

恶意爬虫会抓取你的原创文章、产品价格、商品图片、用户评论,用于内容农场抄袭、竞品价格监控或数据转售。这类爬虫通常伪装成正常浏览器(使用真实浏览器 User-Agent),甚至通过无头浏览器(Headless Browser,如 Puppeteer、Playwright)执行 JavaScript 来绕过简单的验证。

还有一类”AI 爬虫”——如未经声明的 GPTBot、ClaudeBot 等——会大规模抓取训练语料,可能瞬间消耗大量带宽和服务器连接数。内容被大量爬取不仅会导致原创内容排名下降,还可能让服务器在高并发下响应变慢,影响真实用户的访问体验。

Cloudflare 的机器人分数(Bot Score)和托管挑战(Managed Challenge)可以在不影响真实用户的前提下,给爬虫制造足够的门槛。

2.4 DDoS / CC 攻击(耗尽服务器资源)

**DDoS(分布式拒绝服务攻击)**通过大量傀儡机同时发起请求,耗尽服务器带宽或连接数。**CC 攻击(Challenge Collapsar)**是 DDoS 的变种,专门针对应用层(L7),通过模拟真实用户的高频请求(如反复请求首页、搜索页、动态接口)来消耗 PHP 和数据库资源,使 WordPress 的 PHP-FPM 进程和 MySQL 连接数被耗尽,最终导致网站无法响应。

WordPress 对资源尤其敏感,因为每次请求都要经过 PHP 解析和数据库查询。一个并发量不大的 CC 攻击就可能让一台 4 核 8G 的服务器完全瘫痪。Cloudflare 的 Anycast 网络可以在边缘节点吸收攻击流量,确保只有经过过滤的合法请求到达你的源站服务器。

2.5 垃圾注册与评论灌水(Spam Registration / Comment Spam)

机器人会自动注册大量垃圾账号(Spam Registration),用于后续发布垃圾评论、植入外链、操纵投票或刷量。WordPress 的评论系统(wp-comments-post.php)也是垃圾灌水的高频目标,攻击者通过自动化脚本批量提交带广告链接的评论,影响网站信誉并消耗审核人力。

这类攻击往往来自住宅代理(Residential Proxy)或 Tor 网络,IP 分散且难以通过单一 IP 封禁。Turnstile 无感验证码和 Rate Limiting 的组合可以大幅降低垃圾注册和评论灌水的成功率。

3. Cloudflare 防护原理:为什么免费版就能挡住 80% 的恶意机器人

理解 Cloudflare 的防护原理,才能在配置时做出正确的选择。

3.1 反向代理架构

Cloudflare 的核心是**反向代理(Reverse Proxy)**架构。你在 DNS 中将域名解析到 Cloudflare 的 IP,所有访问你网站的请求先到达 Cloudflare 的边缘节点,经过安全检查和缓存判断后,只有合法请求才会被回源(Proxy 回源)到你的源站服务器。恶意请求在边缘节点就被拦截,根本不会消耗你的服务器资源。

这意味着:开启 Cloudflare 后,你的源站服务器 IP 被隐藏,攻击者只能看到 Cloudflare 的 IP。你可以在源站防火墙配置只允许 Cloudflare 的 IP 段访问 80/443 端口,从网络层彻底隔离直连攻击。

3.2 全球 Anycast 网络分流攻击

Cloudflare 在全球 330 多个城市部署了数据中心,采用 Anycast(任播) 路由协议,让同一个 IP 地址从全球多个节点同时宣告。当 DDoS 攻击流量涌来时,流量会被分散到距离攻击源最近的多个节点,单个节点不会被打垮。Cloudflare 的网络总容量超过 280 Tbps,足以吸收绝大多数规模的攻击流量。

3.3 Bot Fight Mode / WAF / Rate Limiting 三层防线

Cloudflare 对机器人的防护形成三层纵深防御:

  • 第一层:Bot Fight Mode——利用机器学习和威胁情报数据库,对来自数据中心 IP 段、已知恶意 IP 的自动化请求发起 JavaScript 挑战(JS Challenge),无法通过挑战的请求被直接拦截。
  • 第二层:WAF(Web Application Firewall,Web 应用防火墙)——基于规则匹配请求特征(URI 路径、User-Agent、Referer、ASN 等),对命中规则的请求执行拦截、挑战或记录等动作。
  • 第三层:Rate Limiting(速率限制)——基于单位时间内的请求次数,对超出阈值的 IP 发起挑战或拦截,精准控制高频请求。

3.4 免费版 vs 付费版功能对比

功能免费版 (Free)Pro 版Business 版Enterprise 版
Bot Fight Mode支持支持支持支持
Super Bot Fight Mode不支持支持支持支持
WAF 自定义规则5 条20 条25 条不限
WAF 托管规则集基础 OWASP基础 OWASP基础 OWASP高级
Rate Limiting1 条(仅计数)5 条10 条不限
Rate Limiting 高级规则不支持不支持支持支持
Turnstile 验证码支持支持支持支持
DDoS 防护非计量非计量非计量非计量
Page Rules3 条20 条50 条不限
Workers 请求10 万/天1000 万/月5000 万/月不限

注:以上功能可能随 Cloudflare 更新而调整,请以 Cloudflare 官方文档为准。免费版虽有限制,但对中小 WordPress 站点已经足够构建多层防护。

4. 从零配置 Cloudflare for WordPress

下面开始正式配置。整个过程分为五个步骤,预计耗时 30 分钟。

第一步:注册 Cloudflare 账号并添加站点

  1. 访问 cloudflare.com,点击”Sign Up”注册账号,建议使用强密码并开启二步验证(2FA)。
  2. 登录后点击”Add a Site”,输入你的 WordPress 站点域名(如 example.com)。
  3. Cloudflare 会自动扫描你当前的 DNS 记录,检查是否完整。务必核对所有 A 记录和 CNAME 记录,特别是 www、mail、ftp 等子域。如果遗漏,可能导致邮件或子站无法访问。
  4. 选择套餐计划(Free 即可开始)。

注意:如果你的域名使用了子域作为多站点网络(Multisite)或使用了泛域名解析(WildCard DNS),请确保所有相关记录都已正确扫描到。

第二步:更改域名 NS 记录(DNS 接入)

Cloudflare 会分配给你两个专属的名称服务器(Nameserver),形如:

anthony.ns.cloudflare.com
lisa.ns.cloudflare.com
  1. 登录你的域名注册商后台(阿里云、腾讯云、GoDaddy、Namecheap 等)。
  2. 找到”DNS 服务器”或”Nameserver”设置项。
  3. 将原有 NS 记录替换为 Cloudflare 分配的两个名称服务器。
  4. 保存。DNS 传播通常需要几分钟到 24 小时不等,Cloudflare 会发邮件通知激活完成。

注意:NS 切换后,所有 DNS 解析都由 Cloudflare 管理。如果你在注册商后台还保留了旧的 DNS 记录,可能会在切换期间造成短暂解析异常,建议在 Cloudflare 端将所有必要记录补齐后再切换。

第三步:SSL/TLS 加密模式选择

进入 Cloudflare 仪表盘,左侧菜单”SSL/TLS” → “Overview”,选择加密模式。这一步对 WordPress 至关重要。

模式客户端 → CloudflareCloudflare → 源站适用场景
Off(关闭)不加密不加密不推荐
FlexibleHTTPSHTTP源站未部署 SSL 证书(临时方案)
FullHTTPSHTTPS(不验证证书)源站有自签或免费证书
Full (Strict)HTTPSHTTPS(严格验证)源站有受信任 CA 证书(推荐)

注意:强烈推荐使用 Full (Strict) 模式。Flexible 模式会在 Cloudflare 到源站之间使用 HTTP,存在安全隐患,且会导致 WordPress 出现重定向循环(Too Many Redirects)。如果源站尚未部署 SSL 证书,可先通过 Let’s Encrypt 免费申请证书,再切换到 Full (Strict)。

如果切换到 HTTPS 后 WordPress 出现”重定向次数过多”错误,可在 wp-config.php 中添加以下代码让 WordPress 正确识别 HTTPS:

define('FORCE_SSL_ADMIN', true);
if ( ! empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

第四步:性能设置(Always Online、Auto Minify、Brotli 压缩)

进入”Speed” → “Optimization”页面,开启以下性能优化:

  • Brotli 压缩:开启。比 Gzip 压缩率更高,现代浏览器均支持。
  • Auto Minify:勾选 HTML、CSS、JS。自动压缩代码体积。
  • Always Online:开启。当源站不可用时,Cloudflare 会展示缓存的页面版本。
  • HTTP/3(含 QUIC):开启。提升连接效率,尤其在移动端。
  • 0-RTT Connection Resumption:开启。减少 TLS 握手延迟。

注意:Auto Minify 在某些主题或插件(特别是使用了内联 JavaScript 的缓存插件)中可能导致样式或功能异常。如果开启后发现异常,请先关闭 JS 的 Minify 排查。

第五步:安装 Cloudflare WordPress 插件

  1. 在 WordPress 后台”插件” → “安装插件”,搜索”Cloudflare”。
  2. 安装并启用官方的 Cloudflare 插件。
  3. 进入插件设置页,点击”Sign in with Cloudflare”,授权插件访问你的 Cloudflare 账号。
  4. 选择对应的域名,插件会自动配置必要的规则,并提供缓存清除、开发模式切换等功能。

注意:安装插件后,建议在 WordPress 设置中将”伪静态重置(Permalinks)”重新保存一次,确保 URL 重写规则生效。同时,如果你使用了 W3 Total Cache 或 WP Rocket 等缓存插件,请参考其与 Cloudflare 的集成文档,避免缓存策略冲突。

5. Bot Fight Mode 实战:免费版 bot 防护

Bot Fight Mode 是 Cloudflare 免费版提供的机器人防护功能,对中小 WordPress 站点而言是”开箱即用”的第一道防线。

5.1 工作原理

Bot Fight Mode 利用 Cloudflare 的威胁情报和机器学习模型,对每个请求进行机器人概率评估。其核心机制包括:

  • JS Challenge(JavaScript 挑战):返回一段加密的 JavaScript 代码,要求客户端在浏览器中执行计算并返回结果。真实浏览器可以完成,而简单的 HTTP 库(如 curl、requests)无法执行 JavaScript,从而被拦截。
  • Managed Challenge(托管挑战):Cloudflare 智能选择最合适的挑战方式(可能是一次无感验证、一次 Turnstile 验证,或直接放行),在安全性和用户体验之间取得平衡。

Bot Fight Mode 主要针对来自数据中心 IP 段(如 AWS、DigitalOcean、OVH 等云服务商)和威胁评分较高的 IP。

5.2 如何开启

  1. 进入 Cloudflare 仪表盘。
  2. 左侧菜单选择”Security” → “Bots”。
  3. 将”Bot Fight Mode”开关置为”On”。
  4. 保存,立即生效,无需额外配置。

开启后,来自自动化脚本的请求会收到挑战页面,无法通过的将被拦截。

5.3 Bot Fight Mode 的局限性

Bot Fight Mode 虽然免费且易用,但存在局限:

  • 无法区分”好机器人”和”坏机器人”:Googlebot、Bingbot 等搜索引擎爬虫也可能被挑战。免费版不支持单独放行 Verified Bots(已验证机器人),这需要 Pro 版以上的 Super Bot Fight Mode。
  • 无法基于路径精细控制:只能全局开启或关闭,无法单独对 wp-login.php 或 wp-json 设置不同策略。
  • 对高级无头浏览器效果有限:Puppeteer、Selenium 等工具能执行 JavaScript 并通过挑战。

5.4 实际效果分析

开启 Bot Fight Mode 后,建议观察一周。典型表现:

  • 总请求数下降:来自数据中心 IP 段的大量请求被直接拦截。
  • 带宽消耗降低:恶意请求不再回源到服务器。
  • 服务器负载下降:PHP-FPM 和 MySQL 的并发连接数明显减少。
  • wp-login.php 的 404/POST 异常请求大幅减少。

可以在 Cloudflare Analytics → Security 仪表盘查看被拦截的请求数量和威胁类型分布。如果发现正常用户被误拦截(表现为收到挑战页面),可以通过 Page Rules 为特定路径临时关闭 Bot Fight Mode。

6. WAF 自定义规则:精准拦截恶意机器人

WAF(Web Application Firewall)自定义规则是 Cloudflare 最灵活的防护工具。免费版支持 5 条自定义规则,通过组合请求字段和动作,可以实现精准的机器人拦截策略。

6.1 WAF 规则编辑器界面

进入”Security” → “WAF” → “Custom rules”,点击”Create rule”。规则编辑器包含:

  • Rule name:规则名称。
  • If incoming requests match…:使用可视化字段编辑器或表达式编辑器(Edit expression)定义匹配条件。
  • Then take action…:选择动作(Managed Challenge / Block / JS Challenge / Log / Skip)。
  • Order:规则执行优先级,从上到下依次执行。

提示:点击”Edit expression”切换到表达式模式,可以直接粘贴规则表达式,更高效且可复用。

6.2 五个实用的自定义 WAF 规则示例

规则 1:拦截已知恶意 User-Agent

拦截常见扫描器和攻击工具的 User-Agent。

(http.user_agent contains "sqlmap") or (http.user_agent contains "Nikto") or (http.user_agent contains "WPScan") or (http.user_agent contains "Acunetix") or (http.user_agent contains "Nessus") or (http.user_agent contains "masscan") or (http.user_agent contains "ZGrab")

动作:Block

规则 2:按 ASN 封禁数据中心 IP

某些 ASN(自治系统编号)几乎全部来自云服务商或 VPS 提供商,正常访客极少。例如 ASN 14061(DigitalOcean)、ASN 16509(AWS)。

(ip.geoip.asnum in {14061 16509 46562 24940 36352})

动作:Managed Challenge

注意:如果您的业务面向开发者或有合法云服务用户访问,请使用 Managed Challenge 而非 Block,避免误拦截。

规则 3:保护 wp-login.php 和 xmlrpc.php

对登录相关端点强制挑战,只允许通过验证的请求到达。

(http.request.uri.path eq "/wp-login.php") or (http.request.uri.path eq "/xmlrpc.php")

动作:Managed Challenge

注意:xmlrpc.php 是 Jetpack、WordPress 移动客户端等第三方应用连接 WordPress 的接口。如果你不使用这些应用,可以直接 Block;如果使用,请用 Managed Challenge 或结合 Rate Limiting 控制频率。

规则 4:拦截空 Referer 的 POST 请求

正常提交表单的 POST 请求通常会携带 Referer,而自动化脚本的 POST 请求往往没有 Referer。

(http.request.method eq "POST") and (http.referer eq "")

动作:Managed Challenge

注意:WooCommerce 的支付回调(Webhook)可能携带空 Referer,请配合使用 Referer 白名单或排除特定路径。

规则 5:按国家/地区封锁

如果你的网站只面向中国用户,可以直接封锁其他国家/地区的访问。

(not ip.geoip.country in {"CN" "HK" "TW"})

动作:Block

注意:按国家封锁是”粗暴但有效”的策略。如果您的网站有海外华人访问需求,请谨慎使用,或将动作改为 Managed Challenge。

6.3 规则优先级和执行顺序

WAF 规则按从上到下的顺序执行,先匹配先执行。设计规则时注意:

  1. 白名单规则优先:如果有需要放行的 IP 或路径,放在最前面,动作选 Skip。
  2. 拦截规则在中:精准拦截规则放在白名单之后。
  3. 宽泛挑战规则在后:如按 ASN 或国家挑战,放在最后。

可以通过拖拽调整规则顺序。每条规则可以启用或禁用,便于灰度测试。

7. Rate Limiting 速率限制:精准控制请求频率

Rate Limiting(速率限制)基于单位时间内的请求次数对 IP 进行限流,是应对高频暴力破解和 CC 攻击的利器。

7.1 配置界面

进入”Security” → “WAF” → “Rate limiting rules”,点击”Create rule”。配置项包括:

  • If incoming requests match…:匹配条件(URI 路径、方法等)。
  • Characteristics:定义计数维度(IP 地址、IP + User-Agent 等)。
  • Threshold:阈值(如 5 次/10 秒)。
  • Period:计数周期。
  • Then take action…:动作(Block / Challenge / Log)。
  • Duration:动作持续时间(如 60 秒)。

7.2 三个实用规则示例

规则 1:登录页速率限制

限制 wp-login.php 的 POST 请求频率,防止暴力破解。

URI Path: /wp-login.php
Method: POST
Threshold: 5 requests per 1 minute
Action: Challenge
Duration: 600 seconds

含义:同一 IP 在 1 分钟内对 wp-login.php 发起超过 5 次 POST 请求时,触发挑战,持续 600 秒。

规则 2:XML-RPC 速率限制

XML-RPC 的 system.multicall 一次请求可尝试数百个密码,必须严格限制。

URI Path: /xmlrpc.php
Method: POST
Threshold: 2 requests per 1 minute
Action: Block
Duration: 3600 seconds

含义:同一 IP 在 1 分钟内对 xmlrpc.php 发起超过 2 次 POST 请求时,直接封禁 1 小时。

规则 3:评论提交速率限制

限制评论提交频率,防止垃圾灌水。

URI Path: /wp-comments-post.php
Method: POST
Threshold: 3 requests per 10 minutes
Action: Challenge
Duration: 600 seconds

含义:同一 IP 在 10 分钟内提交超过 3 条评论时,触发挑战。

7.3 免费版 vs 付费版 Rate Limiting 的区别

功能免费版Pro 版及以上
规则数量1 条5-10 条(企业版不限)
计数维度仅 IPIP + 其他字段(如 User-Agent)
动态响应仅 BlockBlock / Challenge / Log
计数周期固定 1 分钟可自定义
高级条件匹配不支持支持(如结合 URI 路径 + 方法)

注意:免费版仅支持 1 条 Rate Limiting 规则,且计数周期固定。建议将这 1 条规则用于最关键的 wp-login.php。如果需要更多规则,可升级到 Pro 版(每月 25 美元左右,对 WordPress 站长而言性价比很高)。

8. Cloudflare Turnstile:替代 reCAPTCHA 的无感验证码

Cloudflare Turnstile 是 Cloudflare 推出的新一代验证码服务,免费、注重隐私,且无需用户进行复杂的图像识别,是替代 Google reCAPTCHA 的理想选择。

8.1 Turnstile vs reCAPTCHA 对比

对比维度Cloudflare TurnstileGoogle reCAPTCHA v3
价格完全免费免费但有用量限制
隐私保护强(不追踪用户)弱(收集用户行为数据)
用户体验无感验证,无需点击无感,但偶尔弹图像挑战
无障碍支持优秀一般
集成难度简单简单
GDPR 合规是需要额外配置
依赖第三方仅 CloudflareGoogle 服务

8.2 Turnstile 在 WordPress 中的集成方法

登录表单集成

  1. 登录 Cloudflare 仪表盘,进入”Turnstile”页面。
  2. 点击”Add site”,添加你的域名,获取 Site Key 和 Secret Key。
  3. 在 WordPress 中安装”Turnstile for WordPress”或”WP Cloudflare Turnstile”插件。
  4. 在插件设置页填入 Site Key 和 Secret Key。
  5. 勾选”Login Form”,保存。

开启后,WordPress 登录页会出现一个 Turnstile 验证框,大多数情况下会自动通过,无需用户操作。

评论表单集成

在同一个插件设置页,勾选”Comment Form”,保存。评论提交前会先验证 Turnstile,未通过验证的请求被拒绝。

WooCommerce 结账表单集成

在插件设置页勾选”WooCommerce Checkout Form”,保存。结账前需要通过 Turnstile 验证,可有效防止恶意刷单和支付欺诈。

8.3 推荐插件

  • WP Cloudflare Turnstile(官方推荐):轻量、免费、支持登录、注册、评论、WooCommerce 等表单。
  • Turnstile for WordPress:功能类似,支持更多自定义位置。
  • WooCommerce Turnstile:专用于 WooCommerce,支持结账和注册表单。

注意:启用 Turnstile 后,请使用无痕模式测试各表单,确保验证流程正常且不影响正常下单或评论。

9. Cloudflare WordPress 插件深度配合

安装 Cloudflare WordPress 插件后,可以通过以下三项配置实现深度整合。

9.1 APO(Automatic Platform Optimization)缓存优化

APO 是 Cloudflare 针对 WordPress 的自动缓存优化方案,能将 WordPress 的动态页面缓存在 Cloudflare 边缘节点,实现全球加速。

  • 在 WordPress 后台 Cloudflare 插件设置页,找到”Automatic Platform Optimization”区块。
  • 点击”Enable APO”,插件会自动在 Cloudflare 端配置必要的 Page Rules 和 Workers。
  • APO 能自动处理 Cookie 和第三方缓存绕过,对登录用户(如管理员)不缓存,对匿名访客缓存。

注意:APO 免费版对所有人开放。开启后建议在 WordPress 后台使用”Clear Cache”按钮清除缓存,让新内容生效。如果你的网站使用了 WooCommerce 或会员系统,APO 会自动识别并排除这些动态页面。

9.2 真实访客 IP 还原

开启 Cloudflare 后,WordPress 的 $_SERVER['REMOTE_ADDR'] 默认会显示 Cloudflare 节点 IP 而非真实访客 IP。这会导致评论者 IP 显示异常、安全插件(如 Wordfence)的 IP 封禁功能失效。

解决方法:在 wp-config.php 的 <?php 之后添加以下代码:

if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}

或者,在 Nginx 配置中根据 Cloudflare 的 IP 段设置 set_real_ip_from:

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;
# 完整列表见 https://www.cloudflare.com/ips/
real_ip_header CF-Connecting-IP;

注意:Cloudflare 的 IP 段会定期更新,建议定期从官方页面同步更新。也可以使用 cf-real-ip 等 Nginx 模块自动维护。

9.3 开发模式(Development Mode)的正确使用

Development Mode 会临时暂停 Cloudflare 的缓存(持续 3 小时),便于你在修改网站样式或内容时立即看到效果。

  • 在 Cloudflare 仪表盘”Caching” → “Configuration”中,点击”Development Mode”开关。
  • 开启后,所有缓存失效,请求直接回源。
  • 3 小时后自动关闭,也可手动提前关闭。

注意:开发模式不会关闭 Bot Fight Mode 和 WAF,安全防护仍然生效。如果在调试时被 WAF 误拦截,可以临时将你的 IP 加入白名单(见第 11 章)。

10. 进阶防护:Super Bot Fight Mode 与 Workers

对于需要更高安全级别或有定制化需求的站点,可以借助 Super Bot Fight Mode 和 Cloudflare Workers 实现进阶防护。

10.1 Super Bot Fight Mode(Pro 版及以上)

Super Bot Fight Mode 是 Bot Fight Mode 的增强版,提供更精细的控制:

  • Definitely automated(确定是机器人):直接 Block。
  • Verified bots(已验证机器人):单独放行 Google、Bing 等搜索引擎爬虫(免费版无法做到)。
  • Likely automated(疑似机器人):发起 Managed Challenge。
  • Unlikely automated(不太可能是机器人):放行。

此外,Super Bot Fight Mode 还支持为数据中心 IP、扫描工具等单独配置策略。对 SEO 敏感的站点,Verified Bots 放行功能尤为重要——它能让 Googlebot 正常抓取,同时拦截恶意爬虫。

10.2 Cloudflare Workers 自定义 bot 拦截逻辑

Cloudflare Workers 是基于 V8 引擎的 Serverless 计算平台,可以在边缘节点运行 JavaScript 代码,实现高度定制化的请求处理逻辑。

以下是一个简单的 Worker 示例,拦截特定 User-Agent 并对登录路径发起挑战:

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    const userAgent = request.headers.get('User-Agent') || '';
    const ip = request.headers.get('CF-Connecting-IP') || '';

    // 拦截已知恶意 User-Agent
    const maliciousUA = ['sqlmap', 'Nikto', 'WPScan', 'Acunetix', 'ZmEu'];
    for (const ua of maliciousUA) {
      if (userAgent.toLowerCase().includes(ua.toLowerCase())) {
        return new Response('Access Denied', { status: 403 });
      }
    }

    // 对 wp-login.php 强制发起挑战
    if (url.pathname === '/wp-login.php' && request.method === 'POST') {
      const botScore = request.cf?.botManagement?.score || 0;
      if (botScore > 30) {
        return new Response('Bot Detected', { status: 403 });
      }
    }

    return fetch(request);
  }
}

部署后将 Worker 绑定到对应路由(Route),如 example.com/wp-login.php,即可在边缘节点对请求进行定制化判断。

10.3 Workers 适用场景

  • 自定义挑战逻辑:基于 cf.botManagement.score 等字段,对特定路径的请求做精细化判断。
  • API 防护:对 wp-json 接口做 Token 校验或频率控制。
  • 内容防盗:检测并拦截无 Referer 的图片直链访问。
  • 灰度发布:基于 IP 或 Cookie 对部分访客展示不同内容。

注意:Workers 免费版每天 10 万次请求,对中小站点足够。如果请求量大,可升级到 Workers Paid(每月 5 美元,1000 万次请求)。

11. 监控与调优:Cloudflare Analytics 解读

配置完成后,持续监控和调优是确保防护效果的关键。

11.1 Security Analytics 仪表盘解读

进入 Cloudflare 仪表盘”Analytics & Logs” → “Security”,可以看到以下关键指标:

  • Threats blocked:被拦截的威胁请求总数,包括 Bot Fight Mode 拦截、WAF 拦截、Rate Limiting 限制等。
  • Traffic by bot classification:按机器人分类的流量分布,显示”Automated”、”Likely Automated”、”Human”等。
  • Top action taken:展示最常见的动作(Block、Challenge、JS Challenge)。
  • Top countries:威胁来源国家/地区分布。
  • Top IPs:被拦截次数最多的 IP。

定期查看这些数据,可以及时发现攻击趋势变化和新出现的威胁源。

11.2 如何识别误拦截

误拦截的典型表现:

  • 正常用户反馈访问网站时出现挑战页面或无法打开。
  • Analytics 中”Action taken: Challenge”比例异常升高。
  • 某些固定 IP 段(如公司办公网络出口 IP)频繁出现在 Top IPs 中。

排查方法:

  1. 进入”Analytics & Logs” → “Security Events”。
  2. 查看被挑战或拦截的具体请求详情(包括 URI、User-Agent、IP、规则名称)。
  3. 对比正常用户行为,判断是否为误判。

11.3 如何为被误拦截的 IP 创建白名单

如果确认某个 IP 是正常用户但被误拦截,可以创建白名单:

  1. 进入”Security” → “WAF” → “Custom rules”。
  2. 新建规则,名称如”Allow Trusted IP”。
  3. 表达式:
(ip.src eq 203.0.113.50)
  1. 动作选择”Skip”,并勾选”All remaining custom rules”。
  2. 将这条规则拖到最顶端,确保优先执行。

注意:白名单规则应谨慎使用,仅针对确信可信的 IP(如公司办公网络出口、可信 API 服务器)。滥用白名单会让安全防护形同虚设。

11.4 持续优化策略

  • 每周复盘:查看 Security Analytics 仪表盘,关注威胁趋势和新出现的攻击模式。
  • 定期更新规则:根据 Analytics 数据调整 WAF 规则和 Rate Limiting 阈值。
  • 关注 Cloudflare 更新公告:Cloudflare 会不定期发布新的安全功能和规则集更新。
  • 结合 WordPress 端安全插件:Cloudflare 拦截大部分流量,Wordfence 或 Sucuri 在 WordPress 端做第二层防护,形成纵深防御。

12. 常见故障排查

以下是配置 Cloudflare 后 WordPress 站点常见的 6 个故障及排查方法。

Q1:开启 Cloudflare 后网站样式错乱 / 混合内容

现象:页面样式异常,浏览器控制台报”Mixed Content”错误,提示 HTTPS 页面加载了 HTTP 资源。

原因:源站 WordPress 的站点地址(Site Address)仍为 HTTP,或主题中硬编码了 HTTP 资源链接。

解决:

  1. 在 WordPress 后台”设置” → “常规”中,将”WordPress 地址”和”站点地址”都改为 https://。
  2. 在 wp-config.php 中强制 HTTPS(见第 4 章代码)。
  3. 如果主题硬编码了 HTTP 资源,使用”Better Search Replace”插件批量替换数据库中的 http:// 为 https://。
  4. 开启 Cloudflare 的”Always Use HTTPS”(SSL/TLS → Edge Certificates)。

Q2:wp-admin 后台被频繁挑战

现象:登录 WordPress 后台时频繁出现 Cloudflare 挑战页面,影响管理体验。

原因:Bot Fight Mode 或 WAF 规则将 /wp-admin/ 路径也纳入了挑战范围。

解决:

  1. 创建 WAF 自定义规则,对 /wp-admin/* 路径设为 Skip(跳过)。
  2. 或使用 Configuration Rule,对 /wp-admin/* 路径关闭 Bot Fight Mode。
  3. 将管理员 IP 加入白名单(见第 11 章)。

Q3:正常用户被 WAF 规则误拦

现象:部分正常用户反馈访问网站时被拦截或看到挑战页。

解决:

  1. 在 Security Events 中查看被拦截的请求详情,找出是哪条规则触发。
  2. 评估规则是否过于宽泛(如按 ASN 挑战是否误伤正常用户)。
  3. 调整规则动作,从 Block 改为 Managed Challenge。
  4. 必要时为特定 IP 创建白名单。

Q4:XML-RPC 完全被封导致第三方应用无法连接

现象:Jetpack、WordPress 移动客户端等第三方应用无法连接网站。

原因:WAF 规则或 Rate Limiting 对 xmlrpc.php 设置了 Block。

解决:

  1. 如果不使用第三方应用,保持封禁即可。
  2. 如果使用,将 xmlrpc.php 的动作从 Block 改为 Managed Challenge。
  3. 或为第三方应用的服务器 IP 创建白名单(如 Jetpack 的官方 IP 段)。

Q5:WooCommerce 支付回调被拦截

现象:用户下单后支付状态未更新,支付平台回调失败。

原因:WAF 规则拦截了支付平台的回调请求(通常来自数据中心 IP,且可能无 Referer)。

解决:

  1. 获取支付平台(如支付宝、微信支付、Stripe)的回调 IP 段。
  2. 为这些 IP 创建白名单规则。
  3. 在 Rate Limiting 中排除 /?wc-api= 或 /wc-api/ 路径。
  4. 在 WAF 规则 4(空 Referer POST)中增加排除条件:
(http.request.method eq "POST") and (http.referer eq "") and (not starts_with(http.request.uri.path, "/wc-api/"))

Q6:Cloudflare 缓存导致页面内容不更新

现象:在 WordPress 后台发布或修改文章后,前端页面仍显示旧内容。

解决:

  1. 在 WordPress 后台 Cloudflare 插件中点击”Clear Cache”。
  2. 或在 Cloudflare 仪表盘”Caching” → “Configuration”中点击”Purge Everything”。
  3. 如果是局部页面,可使用”Purge by URL”仅清除指定页面缓存。
  4. 确保 APO 或缓存插件配置了在发布/更新文章时自动清除相关页面缓存。
  5. 如需频繁调试,可临时开启 Development Mode(见第 9 章)。

13. 最佳实践清单

以下是经过实战检验的最佳实践,按优先级排序:

  1. 第一时间开启 Bot Fight Mode:免费、零配置,挡住大部分脚本攻击。
  2. SSL/TLS 设为 Full (Strict):确保端到端加密,避免 Flexible 模式引发重定向循环。
  3. 在源站防火墙只允许 Cloudflare IP 访问:彻底隐藏源站 IP,防止直连攻击。
  4. 恢复真实访客 IP:在 wp-config.php 或 Nginx 中还原 CF-Connecting-IP,确保安全插件功能正常。
  5. 配置至少 3 条 WAF 自定义规则:覆盖恶意 UA、登录端点保护、空 Referer POST 拦截。
  6. 对 wp-login.php 设置 Rate Limiting:用免费版仅有的一条规则保护最关键端点。
  7. 安装 Turnstile 替代 reCAPTCHA:在登录、评论、WooCommerce 结账等表单启用无感验证。
  8. 定期查看 Security Analytics 仪表盘:每周复盘,根据数据调整规则。
  9. 为可信 IP 谨慎创建白名单:仅对确信可信的 IP 放行,避免滥用。
  10. 保持 WordPress 核心、主题、插件更新:Cloudflare 挡不住已知漏洞的利用,更新是根本。

14. 常见问题 FAQ

Q1:Cloudflare 免费版真的够用吗?

对于日访问量在数万级别以下的中小 WordPress 站点,免费版的 Bot Fight Mode、5 条 WAF 自定义规则、1 条 Rate Limiting 规则、Turnstile 验证码,已经足够构建多层防护。只有当站点流量较大、需要更精细的机器人分类(如放行 Googlebot)或更多 WAF 规则时,才需要升级到 Pro 版(约 25 美元/月)。

Q2:开启 Cloudflare 后会不会影响 SEO?

正确配置不会影响 SEO。Cloudflare 的全球加速反而能提升页面加载速度,有利于 SEO。需要注意的是:如果你使用 Super Bot Fight Mode,请务必在”Verified Bots”设置中放行 Google、Bing 等搜索引擎爬虫,避免其无法抓取。

Q3:Cloudflare 能完全替代 WordPress 安全插件吗?

不能完全替代。Cloudflare 在边缘节点拦截流量,是第一道防线;Wordfence 或 Sucuri 在 WordPress 端做文件完整性检查、登录安全、恶意代码扫描,是第二道防线。两者互补,建议同时使用。

Q4:如果我更换服务器,需要重新配置 Cloudflare 吗?

如果只是更换源站服务器 IP,只需在 Cloudflare DNS 中更新 A 记录指向新 IP 即可,所有安全规则和缓存策略不变。这是使用 Cloudflare 管理 DNS 的额外好处——迁移服务器时无需在域名注册商后台操作。

Q5:Cloudflare 的 Workers 会不会拖慢网站速度?

Workers 在 Cloudflare 边缘节点执行,延迟通常在毫秒级,不会拖慢网站。相反,合理的 Worker 逻辑(如边缘缓存、请求过滤)能减少回源请求,提升整体性能。免费版每天 10 万次请求,对中小站点足够。

15. 总结与行动清单

Cloudflare 为 WordPress 站长提供了一套从免费到付费的完整机器人防护体系。以下是建议的行动时间线:

今天(30 分钟内):

  • 注册 Cloudflare 账号,添加站点,更改 NS 记录。
  • 将 SSL/TLS 模式设为 Full (Strict)。
  • 开启 Bot Fight Mode。

本周内:

  • 配置 3 条 WAF 自定义规则(恶意 UA、登录端点、空 Referer POST)。
  • 对 wp-login.php 设置 Rate Limiting。
  • 安装 Cloudflare WordPress 插件和 Turnstile 插件。

本月内:

  • 开启 APO 缓存优化。
  • 恢复真实访客 IP。
  • 首次复盘 Security Analytics 仪表盘,调整规则。

持续:

  • 每周查看安全分析数据。
  • 定期更新 WordPress 核心和插件。
  • 根据新出现的威胁调整 WAF 规则和 Rate Limiting 阈值。

按此清单执行,你的 WordPress 站点将具备抵御绝大多数恶意机器人流量的能力,让真实访客享受安全、快速的访问体验。

标签:

WordPress安全 Wordpress建站

咨询建站方案

查看全部文章