速读摘要:WAF 自定义规则由四要素构成——匹配对象(URI/头/参数)、匹配方式(包含/正则/等于)、附加条件(IP/频率/地域)、处置动作(拦截/验证/限速)。本文给出规则配置的四步法,并用 5 个可直接套用的实战规则示例讲清写法。

一、为什么要用自定义规则
内置规则库覆盖面广,但每个业务的”正常”和”异常”都不一样。比如同样是”单 IP 每秒 50 次请求”,对图片站是正常,对登录接口就是攻击。自定义规则就是让你按自己的业务特征做精细化防护。
二、规则的四个构成要素
2.1 匹配对象
| 对象 | 说明 | 典型用途 |
|---|---|---|
| URI 路径 | 请求的 URL 路径 | 保护后台路径、敏感接口 |
| 请求方法 | GET/POST/PUT/DELETE | 限制危险方法 |
| 请求头 | UA、Referer、Cookie 等 | 拦截空 UA、异常来源 |
| 请求参数 | URL 参数、表单、JSON 体 | 检测注入特征 |
| 源 IP | 访客 IP 或网段 | 黑白名单 |
2.2 匹配方式
- 包含(contains):文本包含某关键字,最简单高效
- 等于(equals):完全匹配,精度最高
- 正则(regex):灵活但性能开销大,慎用复杂表达式
- 前缀/后缀:匹配路径开头或结尾
2.3 附加条件
单一条件容易误杀,叠加条件能大幅提升精度:
条件组合示例:
URI 包含 /admin
AND 源 IP 不在白名单
AND 单 IP 每分钟请求 > 20
→ 拦截
2.4 处置动作
| 动作 | 效果 | 适用 |
|---|---|---|
| 拦截 | 返回 403/自定义页面 | 确定是攻击 |
| JS 验证 | 弹出 JS 挑战 | 疑似脚本,让真人通过 |
| 验证码 | 图形/滑块验证 | 登录接口、表单提交 |
| 限速 | 限制请求频率 | 资源消耗型接口 |
| 观察 | 只记录不拦截 | 新规则上线前测试 |
三、五条实战规则
规则 1:保护后台路径
名称:后台路径防护
匹配:URI 包含 /wp-admin 或 /wp-login.php
条件:源 IP 不在办公网白名单
动作:拦截(返回 404 而非 403,隐藏存在性)
说明:WordPress 后台常被爆破,隐藏比报错更安全
规则 2:限制登录接口频率
名称:登录接口限速
匹配:URI 等于 /wp-login.php 或 /api/login
条件:单 IP 每 60 秒请求 > 5 次
动作:验证码 + 封锁 10 分钟
说明:有效防止密码爆破,又几乎不影响正常用户
规则 3:拦截空 UA 可疑请求
名称:空 UA 拦截
匹配:User-Agent 为空或长度 < 5
条件:URI 不包含 /api/(API 走 Token 鉴权)
动作:拦截
说明:正常浏览器不会发空 UA
规则 4:保护敏感文件
名称:敏感文件防护
匹配:URI 包含 .env / .git / .sql / .bak / phpinfo
动作:拦截并记录 IP
说明:这类请求 100% 是扫描,直接封
规则 5:限制下载接口滥用
名称:下载接口限速
匹配:URI 前缀 /download/
条件:单 IP 每 60 秒 > 10 次 或 单日 > 500 次
动作:限速 + 超限拉黑 1 小时
说明:防止下载站被当作免费带宽池
四、配置的通用路径
控制台 → 防护配置 → 自定义规则 → 新建规则
├─ 规则名称:给个一眼能看懂的名字
├─ 匹配条件:设置 URI/头/参数条件
├─ 附加条件:加频率、IP、地域限制
├─ 处置动作:先选"观察"跑 3 天
└─ 生效域名:选择适用域名
五、避坑指南
- 新规则先”观察”运行 3 天,导出命中清单人工核对再切拦截
- 正则表达式避免贪婪匹配和嵌套量词,容易导致性能问题
- 规则从上到下匹配,把高频规则放前面可减少开销
- 不要用规则去拦搜索引擎爬虫(百度、Google),会掉收录
- 规则数量控制在合理范围(一般 < 50 条),过多影响性能
六、小结
自定义规则是 WAF 从”通用防护”走向”贴合业务”的关键。掌握”对象 + 方式 + 条件 + 动作”四要素,配合”先观察后拦截”的上线纪律,就能配出既严密又不误伤的规则。
