
一、观察模式的本质
观察模式下,WAF 照常匹配规则、记录日志,但不执行任何拦截动作。请求该过还是过,只是会在日志里标记”这条请求命中了规则 X”。
观察模式:
请求 → 规则匹配 → 命中 → 记录日志 → 放行 ✅
拦截模式:
请求 → 规则匹配 → 命中 → 记录日志 → 拦截 ❌
二、为什么必须先观察
新规则上线最难预测的是”误报率”。一条看起来合理的规则,可能因为某个业务场景的特殊性,把大量正常请求拦下来。
比如你加了一条”URI 包含 admin 就拦截”的规则,感觉很安全。结果发现你的博客文章 URL 里恰好有 “administer” 这个词,导致所有相关文章都 404 了——这种问题只有在观察模式下才能提前发现。
三、标准上线节奏
阶段一:观察期(3-7 天)
动作:
├─ 规则模式设为"观察"
├─ 持续采集命中日志
└─ 每天导出命中清单
输出:
├─ 命中总数:3,254 次
├─ 命中源 IP:1,203 个(多为境外 IDC)
├─ 命中 URI:主要集中在 /wp-login.php
└─ 其中明显是正常业务:12 次 ← 这就是误报!
阶段二:人工核对
把命中清单按 URI、源 IP、UA 分类,逐类判断:
| 命中特征 | 判断 | 处置 |
|---|---|---|
| 境外 IDC IP + 敏感路径 | 攻击 | 放行拦截 |
| 真实浏览器 UA + 业务页面 | 误报 | 调整规则 |
| 空 UA + 高频 | 脚本 | 放行拦截 |
| 自家办公 IP | 误报 | 加入白名单 |
阶段三:验证期(3 天)
确认误报已处理后,从”观察”改为”验证”模式(触发验证码而非直接拦截)。这是更温和的过渡——即使有残留误报,真人用户也能通过验证继续访问。
阶段四:拦截期
验证期用户的投诉量为 0,就可以切到拦截模式了。
四、观察模式的其它用途
- 接管新站点:刚接入 WAF 时先全站观察,摸清流量特征
- 业务改版后:新版可能有新接口,先观察再放行
- 大促前:试跑新的限速规则,看会不会影响正常下单
- 安全事件复盘:观察模式回放攻击特征,验证规则有效性
- 厂商规则更新后:新版本规则库先观察一轮
五、观察期要重点看什么
观察期检查清单:
□ 命中总量是否合理(占总请求 < 5% 较正常)
□ 命中的 URI 里有没有业务关键页面
□ 命中的 IP 里有没有搜索引擎爬虫
□ 命中的 IP 里有没有办公网络 / 合作方
□ 命中的 UA 里有没有真实浏览器
□ 命中时间是否集中在业务高峰(正常用户多)
□ 是否有大量来自同一网段的命中
六、常见错误
- 跳过观察期直接拦截 → 极易造成业务事故
- 观察期太短(<1 天)→ 覆盖不到完整业务周期
- 只看命中数量不看内容 → 忽略了误报细节
- 观察期后不记录基线 → 后续无法对比评估
- 所有规则一起上线 → 出问题无法定位是哪条
七、小结
观察模式是 WAF 上线的”安全气囊”。任何新规则、新策略、新站点都应该经过”观察 → 验证 → 拦截”三段式上线,用几天的时间成本换取业务零中断。这一条纪律,比任何高深的规则技巧都更重要。
