WAF 规则基线:上线首周就该开启的防护清单

接入 WAF 后真正决定安全水平的,不是“装了防火墙”这件事,而是你到底开启了哪些规则、又是怎么开的。翻看近两年的漏洞报告会发现,绝大多数被攻破的站点栽在的并不是什么 0day,而是 OWASP Top 10 里反复出现的经典手法:SQL 注入、XSS、命令注入、路径穿越。这些攻击有成熟的检测特征,完全可以在到达应用之前就被挡下。下面这套基线,是给中小站点在网站上线初期设计的一套“够用且不过度”的 WAF 规则方案。

建议启用的核心规则集

规则 拦截对象 建议动作 补充说明
SQL 注入 拼接入 SQL 的恶意参数(' OR 1=1-- 等) 观察 3 天后转阻断 配合参数化查询,双重防护
XSS 过滤 <script>onerror=javascript: 等载荷 直接阻断 注意与 CSP 响应头配合
命令注入检测 ;、` $(...)`、反引号等执行符 直接阻断
路径穿越 ../%2e%2e%2f 等目录回溯 直接阻断 防止读取 /etc/passwd 等敏感文件
恶意爬虫与 UA 限制 扫描器、采集脚本、漏洞探测流量 观察后转阻断 维护一份已知恶意 UA 名单
高频 IP 限速 撞库、刷接口、CC 攻击 超过阈值后限速/封禁 建议约 60 次/分钟,超限返回 429

这套清单基本对应各大托管 WAF 的默认托管规则集,比如 Cloudflare OWASP Core Ruleset、AWS WAF 托管规则组,以及开源的 ModSecurity CRS。你不需要从零写规则,开启对应的托管规则集,再按本站实际情况微调即可。

分阶段上线:观察 → 阻断 → 白名单

直接全开阻断的后果只有一个:深夜被误报告警吵醒,第二天一怒之下把规则全关。更稳妥的做法是分三个阶段推进。

阶段一:观察模式(24-72 小时)。把规则设为仅记录,跑一段时间收集真实的命中情况。重点看两类数据:一是攻击特征明显、几乎不可能是正常流量的命中(比如带 SQL 关键字的请求),二是边界模糊、可能误伤正常功能的命中。观察期内建议至少每天查看一次拦截日志,记下可疑请求的来源 IP、路径和 UA。

阶段二:切换阻断模式。观察期结束后,把高置信度规则(命令注入、路径穿越、SQL 注入)切到阻断,XSS 和恶意 UA 类规则可以再多观察两天。切换后继续盯日志,如果某个页面突然出现大量“被拦截”但其实都是正常用户,说明这条规则需要调整。

阶段三:建立白名单流程。误报不可避免,关键是有流程兜底:用户反馈打不开或登录失败 → 从日志里捞到被拦截的请求 → 判断是误报还是恶意 → 误报则给对应规则加白名单例外,并记录原因,避免白名单越加越宽最后形同虚设。白名单应该精确到具体的规则 ID、URI 和 IP,而不是对整个域名一刀切放行。

一个真实场景

一家做跨境独立站的小团队上线了 WAF,第 3 天日志里出现大量 id=1' AND SLEEP(5)-- 形式的请求,明显是有人拿公开的 SQL 注入扫描器在探测。因为规则已经在阻断模式,这些请求全部被挡在源站之外,业务零影响,只有安全日志里多了一串记录。两周后,又出现一次针对后台登录接口的撞库尝试,被高频 IP 限速拦下,同一个 IP 被封禁后对方就放弃了。这两个例子说明:基线规则解决的是“已知攻击”这个大头,剩下的是持续观察和人工确认。

上线检查清单

  • 高置信度规则已切到阻断模式
  • 观察期日志有人每天过一遍
  • 白名单有申请和审批流程
  • 规则变更经过灰度,不在流量高峰直接改
  • 告警渠道(邮件/IM)已配置,误报能被及时处理

常见问题

为什么我的 WAF 规则开了,但日志里什么都没拦截? 先确认流量真的走了 WAF——检查源站 IP 是否暴露、DNS 是否指向了 WAF 节点。另一个常见原因是规则作用范围没覆盖到对应路径,比如只对 /wp-admin 生效,攻击者走的是 /api

阻断模式下误伤了自己的后台怎么办? 这是白名单流程要解决的第一类问题。先在日志里确认被拦的请求特征,再把精确的例外(规则 ID + URI)加进白名单,同时检查后台是否存在暴力破解等真实风险,别把“误伤”和“攻击”混为一谈。

用了云厂商的托管规则集还需要自己写规则吗? 大部分场景不需要。托管规则集覆盖了 OWASP Top 10 的主要攻击面,自己写规则通常用于两类场景:业务特有的防护需求,以及托管规则误报太多时的精细调整。建议先从托管规则集开始,观察一周再决定要不要自定义。

参考:Cloudflare WAF 文档 https://developers.cloudflare.com/waf/
参考:OWASP ModSecurity Core Rule Set https://coreruleset.org/
参考:AWS WAF 托管规则组 https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups.html