上一篇把流量引到了 Cloudflare,这一篇用它的 WAF(Web 应用防火墙)。WAF 和防火墙的区别一句话说清:防火墙管 IP 和端口,WAF 看 HTTP 请求的内容——URL 里带没带 SQL 注入特征、表单里塞没塞 XSS 脚本、是不是在打已知的 CMS 漏洞。《CC 攻击与小流量打压应急:limit_req 与 fail2ban 联动》的 limit_req 管请求频率,WAF 管请求内容,三层各司其职。
先搞清楚免费计划里有什么。按 2026-09-04 官方文档核实:免费计划自动部署 Free Managed Ruleset,包含 Log4J 漏洞、Shellshock 和常见 WordPress 漏洞利用的拦截规则;另有少量自定义规则额度可以手写拦截规则;Bot Fight Mode 一键开启机器人基础拦截。完整版 Cloudflare Managed Ruleset 和 OWASP Core Ruleset 需要 Pro 计划(每月二十美元左右)。免费额度对个人站点够用,思路是:托管规则兜底已知漏洞,自定义规则管好自己的登录入口。
自定义规则的写法是表达式语法。举三个实际最有用的规则。第一,保护登录页——对海外站长尤其有效,你的访客在国内,登录请求却来自全球各地,那多半是爆破:
# 自定义规则示例(Cloudflare表达式语法)
# 规则1:对登录接口,非中国IP全部质询
(ip.geoip.country ne "CN") and
(http.request.uri.path contains "/wp-login.php")
→ Action: Managed Challenge(人机质询)
# 规则2:直接封死xmlrpc.php(WP的 pingback接口,
# 被爆破和DDoS反射滥用,不用它就封)
(http.request.uri.path eq "/xmlrpc.php")
→ Action: Block
# 规则3:admin后台限制国家+ ASN
(http.request.uri.path contains "/wp-admin/") and
not (ip.geoip.country in {"CN"})
→ Action: Managed Challenge
三个规则的度要把握:用 Managed Challenge 而不是 Block 做登录防护,前者会弹出人机验证,旅行或用 VPN 的真实用户能通过,后者是一刀切;xmlrpc.php 如果你不用(Jetpunk 之类的远程发布功能才需要它),直接 Block 没有副作用;规则三的 not 逻辑注意括号,写错括号规则含义反转,把自己国家的用户全拦了。
规则上线后必须观察一周再收紧。位置在 Security 事件日志里,看每天拦截了多少、有没有误杀。WordPress 站点最典型的误杀场景:后台编辑器提交长文章,正文里带代码片段,被 WAF 判定为注入攻击拦截。处理办法是加例外规则(Skip),对 /wp-admin/ 的登录用户跳过某条规则——注意官方文档特别强调,跳过规则的条件要用强认证特征(登录 Cookie),单纯按 IP 放行不安全,IP 可以伪造。
再说 OWASP Core Ruleset 这套业界标准。它是 ModSecurity 社区维护的开源规则集(OWASP Core Rule Set,免费开源),原理是对每个请求做异常评分:命中一条规则加分,累计分数超阈值就拦截。它有个灵敏度参数叫 paranoia level(PL1 到 PL4),级别越高检查越细、误杀也越多,官方建议从 PL1 起步逐步上调——这套调优思路适合自架 WAF 的进阶用户(在 Nginx 上配 ModSecurity + coreruleset.org 的规则包),用 Cloudflare 托管版的话 Pro 计划里就是点开开关的事。
WAF 不是银弹,两点清醒认识。第一,WAF 拦的是已知攻击模式,挡不住逻辑漏洞——你的插件有越权漏洞,攻击者用正常参数组合就能打穿,WAF 无能为力,插件更新和最小权限才是根本。第二,WAF 依赖请求特征,绕过手段层出不穷,所以它的定位是纵深防御中的一层:前面有 UFW 封端口,中间有 WAF 滤内容,后面有 fail2ban 扫日志,再往下《备份不是拷个压缩包完事:一套能救命的最小备份体系》的备份体系兜底——任何一层失手,都不至于全盘皆输。这也是这个加固系列的整体思路:不追求单点无敌,追求多层冗余。
相关阅读:WAF 是应用层防线的核心。《性能与安全加固总清单:按这张表打勾,新站48小时达到生产水准》安全组里,本篇配 CDN 的边缘防护形成双层,照总纲打勾推进即可。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!
