导语
很多站长以为接入 WAF 就一劳永逸,其实默认规则只能拦截”标准化”的攻击。遇到业务定制化攻击、频繁误报、或者需要针对特定路径做精细防护时,必须学会配置自定义规则。本文以百度智能云 WAF 为例,从规则体系讲起,手把手带你配置 SQL 注入、XSS、CC 攻击拦截规则,并给出源站 Nginx 兜底配置,全程可落地。
一、先搞懂 WAF 的规则体系
WAF 的防护能力通常分为三层:
- 内置规则集:覆盖 OWASP Top 10 常见攻击(SQL 注入、XSS、命令注入、文件包含、WebShell 检测等),开箱即用,一般无需修改;
- 自定义规则:按业务需求编写,可精确匹配 URL、参数、Header、来源 IP,动作可选拦截、观察(仅记录)、放行;
- 访问控制:IP 黑白名单、地域封禁、CC 防护频率限制。
在百度智能云 WAF 控制台,配置路径为:防护配置 → 自定义规则(不同版本控制台名称略有差异,以实际界面为准)。规则优先级遵循”先精准后宽泛”,自定义规则优先于内置规则生效,而”放行”动作的规则又优先于”拦截”动作的规则,这样设计是为了保证白名单类规则永远能压过拦截类规则,避免误伤业务。
另外要提醒一点:WAF 规则是按域名维度生效的。如果你的服务器上挂了多个网站,一定要逐个域名检查规则是否已开启,避免出现”A 站防护正常、B 站裸奔”的情况。新接入的域名默认只启用内置规则,自定义规则需要手动关联。
二、实战一:拦截 SQL 注入与 XSS 攻击
内置规则已经能挡住大部分注入攻击,但遇到编码绕过(如二次 URL 编码、Unicode 变体)时,建议补充自定义规则兜底。配置要点:
- 规则名称:如
block-sqli-xss; - 匹配字段:选择全部参数(覆盖 GET 参数、POST Body、Cookie);
- 匹配内容:使用正则匹配注入特征,例如:
union\s+(all\s+)?select|information_schema|sleep\s*\(|benchmark\s*\(|load_file\s*\(|into\s+outfile|eval\s*\(|base64_decode\s*\(
动作:拦截。上线前务必先开启”观察模式”跑 1-3 天,根据日志确认误报率,无误后再切换为拦截。
XSS 规则建议单独加一条,匹配 <script>、javascript:、onerror=、document.cookie 等特征:
<script|javascript:|onerror\s*=|onload\s*=|document\.cookie|alert\s*\(|prompt\s*\(
三、实战二:配置 CC 攻击频率限制
CC 攻击的本质是高频请求耗尽服务器资源,WAF 的频率限制是最直接有效的防线。百度智能云 WAF 路径:防护配置 → CC 防护。
推荐初始阈值(以单 IP 为单位,请根据网站实际流量调整):
- 静态页面 / 普通 API:单 IP 每 60 秒超过 120 次请求触发限制;
- 登录接口 / 验证码接口:单 IP 每 60 秒超过 30 次即触发;
- 封禁时长:首次 10 分钟,持续触发自动递增至 1 小时;
- 统计维度建议叠加:单一 URL 维度 + 全局维度同时统计。
注意:阈值设置过低会误伤正常用户(尤其企业办公网共用出口 IP 的场景),务必先观察后收紧,逐级下调。CC 防护与 DDoS 高防是两回事:CC 针对应用层请求频率,DDoS 高防针对流量带宽,两者配合使用效果最佳。如果攻击流量超过 WAF 本身带宽上限,需要在高防层面先做流量清洗。
四、实战三:IP 黑白名单与地域封禁
白名单永远比黑名单更安全。建议这样用:
- 将公司办公出口 IP、第三方支付回调服务器 IP 加入白名单,避免被误拦影响业务;
- 确认攻击源 IP 后第一时间加入黑名单,封禁期建议 24 小时起步;
- 若业务只面向国内用户,可在地域封禁中直接封禁境外访问,能挡掉大量扫描器和海外攻击源。
配置完成后,用 curl 模拟攻击请求验证规则是否生效(返回 403 即拦截成功):
# 模拟 SQL 注入请求,观察是否被 WAF 拦截
curl -s -o /dev/null -w "%{http_code}\n" "https://www.example.com/?id=1%20union%20select%201,2,3"
# 模拟 XSS 请求
curl -s -o /dev/null -w "%{http_code}\n" "https://www.example.com/?q=<script>alert(1)</script>"
五、源站兜底:Nginx 层防御配置
即使有 WAF,源站也必须保留基础防御,防止源站 IP 泄露后被攻击者绕过 WAF 直连。以下配置可直接放入 Nginx 配置(宝塔面板路径:网站 → 设置 → 配置文件):
# 定义请求频率限制:单 IP 每秒 20 次
limit_req_zone $binary_remote_addr zone=cc_limit:10m rate=20r/s;
server {
# 仅允许 WAF/CDN 回源 IP 访问,防止绕过 WAF 直连源站
# allow 你的CDN回源IP段;
# deny all;
# 应用频率限制
location / {
limit_req zone=cc_limit burst=40 nodelay;
# 站点其余配置...
}
# 对常见敏感路径加强防护
location ~* \.(php|asp|aspx|jsp)$ {
# 可在此加 deny 恶意IP; 精确封禁
}
}
注意:若源站配置了 allow/deny,务必先向 CDN 或 WAF 厂商确认回源 IP 段,否则会导致全站 403,切记先测试再上线。
六、规则调优与误报处理
WAF 规则上线后不是一劳永逸,建议每周抽 10 分钟做三件事:
- 看日志:在 WAF 控制台查看”观察模式”记录的命中日志,重点排查被拦截的正常业务请求;
- 加白名单:对确认误报的 URL 或参数添加白名单规则,注意白名单要尽量精确到路径,不要整站放行;
- 调阈值:CC 频率阈值根据近 7 天访问峰值动态调整,避免业务高峰误伤。
一个常见误区:为了省事把 WAF 调到”宽松模式”或直接关闭检测。这等于撤掉防线,攻击进来时再开就晚了。正确做法是让规则”先观察、再拦截、勤调优”。下面给出一张常见场景的规则配置速查表,方便对照设置:
| 防护场景 | 规则类型 | 建议配置 | 动作 |
|---|---|---|---|
| SQL 注入 | 自定义规则 | 匹配全部参数中的注入特征正则 | 先观察 1-3 天再拦截 |
| XSS 攻击 | 自定义规则 | 匹配 script、onerror、javascript: 特征 | 拦截 |
| CC 攻击 | 频率限制 | 单 IP 60 秒 120 次(登录接口 30 次) | 封禁 10 分钟起递增 |
| 恶意扫描 | IP 黑名单 | 扫描器来源 IP 批量拉黑 | 封禁 24 小时 |
| 境外攻击 | 地域封禁 | 仅保留目标用户所在地区 | 直接拦截 |
| 支付回调 | IP 白名单 | 第三方回调服务器 IP 加白 | 放行 |
总结
WAF 规则配置的核心思路就三步:先观察、再拦截、勤调优。默认规则 + 自定义规则 + 访问控制三层组合,配合源站 Nginx 兜底,才能形成完整防线。如果你没有精力自行维护 WAF 规则,速度网络提供百度云防护 WAF 部署、规则调优与安全加固一站式服务,欢迎咨询。
