5. 防护配置
第 4 章把站点接进来了,这一章讲怎么把防护层调到适合你的业务。配置都在「防护规则」菜单下,所有改动写库后引擎 5 秒内自动生效,不需要重启。
5.1 白名单:三种 skip 是三把独立的钥匙
白名单不是「关闭防护」,而是精确声明「某些请求可以跳过哪一层检查」。每条白名单有三个独立开关:
| 开关 | 跳过什么 | 典型场景 |
|---|---|---|
跳过自定义规则(skip_rule) | 内置攻击规则 + 自定义规则 + 爬虫库 | 已知安全但会被规则误伤的请求,如管理后台的富文本提交 |
跳过人机验证(skip_challenge) | JS 挑战 / 滑块验证 | 支付回调、服务器间调用、App 的 API |
跳过 CC 防护(skip_cc) | CC 限频与等候室 | 监控探针、高频合法轮询接口 |
三个开关按需组合,互不影响。只勾「跳过验证」的请求依然会被攻击规则检查——白名单 ≠ 后门。

匹配条件
| 项 | 说明 |
|---|---|
| 目标 | 源IP / URI / 路径 / 请求方法 / 请求头 / Cookie / User-Agent / Referer / Host / 请求参数,以及「属于IP组」 |
| 算子 | 等于 / 不等于 / 包含 / 不包含 / 包含(忽略大小写) / 正则匹配 |
| 生效范围 | 可选单个站点或全局(全局=所有站点) |
| 排序 | 数值越小优先级越高,命中第一条即生效 |
多条条件可以组合成条件组(and / or 组合),满足「这个 IP 访问这个路径」这类复合放行。
上线前必须做的三条白名单
生产环境接入后立刻检查这三类请求,没有白名单大概率出事:
- 支付/业务回调:微信、支付宝等服务器的回调没有浏览器环境,过不了人机验证。按目标 + 值匹配(如
uri 等于 /pay/notify),勾选「跳过人机验证」。不要勾跳过规则,回调依然该被攻击规则检查。 - 自己的监控与探针:拨测、可用性监控是高频固定 IP 轮询,会被 CC 限频。加「跳过 CC 防护」。
- 公司办公网出口 IP 访问管理后台:后台常有富文本、批量操作,容易被规则误伤。按源 IP 加「跳过自定义规则」。
写错白名单的代价是真实的安全洞:范围宁小勿大,能用
uri 等于 /exact/path就不要用path 包含 /pay。
5.2 人机验证:凭证与验证强度
站点上选好防护方式后,验证行为的细节在两处调整。

凭证(安全凭证页)
验证通过后引擎给浏览器签发一个 Cookie 凭证,之后凭它免验证。凭证可以绑定因子——绑定后因子变了凭证就失效:
| 因子 | 建议状态 |
|---|---|
| 源 IP | 办公网用户出口 IP 可能变化,慎绑;手机流量用户 IP 几乎每会儿都变 |
| User-Agent | 浏览器升级会换 UA,绑定会强制重新验证一次 |
| JA4 TLS 指纹 | 最强绑定,同浏览器基本不变,防凭证被搬走 |
凭证相关是全局密钥 + 站点级覆盖:全局有唯一的凭证密钥(改了所有凭证立即失效,相当于全站强制重新验证),每个站点可一键生成自己的配置并开关绑定因子。
验证强度与系统参数(系统设置页)
| 配置 | 默认 | 说明 |
|---|---|---|
0 秒档评分阈值 zsec_pass_score | 60 | 0 秒透明注入模式下环境评分的及格线,误拦多可略降,脚本多可调高 |
单 IP 最大验证会话数 challenge_max_sessions | 50000 | 超出后新会话被拒,防会话洪泛 |
| 单会话提交次数 | 静默 3 次 / 交互 5 次 | 满了作废会话,且该来源进爬虫 IP 库 |
| 挑战 nonce 有效期 | 静默 1/3/5 秒档 = 5/8/10 秒 | 过期作废,防止挑战页被缓存复用 |

「人机验证」列表页可以看每一次挑战记录:谁、什么时间、哪个形态、耗时多少、通过与否。验证异常多但全是同一个出口 IP → 大概率是脚本,去第 7 章的爬虫库确认。
5.3 CC 防护:四个维度 + 六种动作
CC 规则回答一个问题:某个维度在某个时间窗口内超过多少次,怎么办。

维度(四选一)
| 维度 | 计数对象 | 适合 |
|---|---|---|
ip | 单个 IP 全站累计 | 最粗粒度的兜底 |
ip_uri | 单 IP 访问同一 URI | 保护登录、短信、查询这类被刷接口,最常用 |
ip_ua | 单 IP + 同一 UA | 穿透「换 IP 不换 UA」或「换 UA 不换 IP」的脚本 |
ip_url | 单 IP 访问同一资源路径(不含参数) | 动态参数接口防刷 |
适用范围 scope
all 全部请求 / nocred 仅无凭证请求 / cred 仅持凭证请求。推荐对高频接口加一条 nocred 的严格限频:正常访客验证过有凭证,不受影响;脚本没凭证,直接吃限频。
处置动作
| 动作 | 行为 |
|---|---|
拦截 block | 直接拦,写攻击日志 |
观察 observe | 只记录不拦,先跑几天看阈值合不合适 |
等候室排队 waiting_room | 超额访客进等候室排队,不直接拒 |
302 跳转 redirect | 跳到指定 URL(如静态降级页) |
人机验证 challenge | 强制走一次验证流程 |
放行 pass | 显式不限频(用于在严格兜底下豁免某类请求) |
配置建议
- 先用观察模式跑 1-2 天,看正常用户的真实峰值,再把阈值定为峰值的 2-3 倍切到拦截
- 时间窗口别设太长:
120 次/10 分钟这种规则会把翻页浏览的正常用户一起闷死;30 次/1 分钟更贴近「脚本行为」 - 免费版只支持单层条件;两层条件组(如「URI 是 /login 且 不在办公网 IP 组」)是 Pro 能力
5.4 等候室:高峰期排队而不是 503
秒杀、抢票、突发热点会让瞬时流量冲垮源站。直接 503 用户体验极差,等候室的做法是:超额访客进入虚拟队列,浏览器自动保持心跳,排到队首自动放行。

机制要点:
| 项 | 行为 |
|---|---|
| 排队身份 | 站点内 IP + UA 的稳定哈希——刷新页面不会重新排队,还是原来那个位置 |
| 心跳 | 30 秒一次,超时自动出队 |
| 放行 | 先进先出,排到队首签发等候室通行 Cookie(名称默认 waf_waiting) |
| 队列容量 | 默认 1000,满了渲染过载页 |
等候室有两个来源:CC 规则动作选「等候室排队」按规则触发;以及全站兜底——系统设置里的 cc_site_rate(默认 10000 次/窗口)+ cc_site_window,整站请求量超阈值自动开等候室,这是最后一道保命线。
后台「等候室」页可看实时排队列表与统计,支持手动插队和清理陈旧记录;系统每小时清理 24 小时前的过期记录。
5.5 这一层排障速查
| 现象 | 大概率原因 | 处理 |
|---|---|---|
| 回调方一直收不到结果 | 回调被人机验证拦了 | 白名单加「跳过验证」(5.1 三条白名单) |
| 全站用户突然一起被 CC 拦 | 前面套了 CDN 但 client_ip_mode 没配对 | 回到 4.3 改 IP 判定 |
| 正常用户反映「转圈圈」 | 全站兜底等候室触发了 | 看 cc_site_rate 是否低于业务峰值,调高或升配 |
| 验证页反复刷新过不去 | 浏览器插件拦了验证脚本,或 UA/指纹因子绑定冲突 | 让用户关插件重试;核对凭证因子绑定 |
下一步:6. 规则配置