WAF 配置指南:Web 应用防火墙规则设置与网站安全防护
WAF(Web 应用防火墙)是保护网站免受 Web 攻击的关键安全层。它可以检测和拦截 SQL 注入、XSS 跨站脚本、文件包含、恶意爬虫等常见攻击。本文将详解主流 WAF 的配置方法和推荐规则。
一、WAF 的工作原理
WAF 的位置
用户请求 → CDN → WAF → Web 服务器 → 应用 → 数据库
↓
拦截恶意请求 ❌
放行正常请求 ✅
WAF 的检测方式
| 检测方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 签名匹配 | 匹配已知攻击特征 | 准确率高 | 无法检测新的攻击 |
| 行为分析 | 分析请求行为模式 | 可检测未知攻击 | 误报率高 |
| 速率限制 | 限制单位时间请求数 | 防御暴力攻击 | 可能误伤正常用户 |
| IP 信誉 | 基于 IP 的历史行为 | 阻止已知恶意 IP | 依赖数据源更新 |
二、Cloudflare WAF 配置
Cloudflare 的免费套餐包含基础 WAF 功能,付费版(Pro/Business/Enterprise)提供更高级的规则引擎。
安全级别设置
Cloudflare Dashboard → Security → Settings:
安全级别:
- Essentially Off:基本关闭(仅拦截最明显的攻击)
- Low:低(拦截常见攻击)
- Medium:中(推荐 ✅)
- High:高(可能误伤正常访问)
- I'm Under Attack:紧急模式(当遭受 DDoS 攻击时开启)
推荐设置:设置为 Medium 级别,如果收到误报报告,再针对特定规则调整为 Off。
WAF 自定义规则
Cloudflare 允许创建自定义 WAF 规则:
# 规则示例 1:拦截已知恶意 IP
表达式:
(ip.src eq 192.0.2.1) or (ip.src in {203.0.113.0/24})
操作:
Block
# 规则示例 2:阻止非中国大陆 IP 访问管理后台
表达式:
(http.request.uri.path contains "/wp-admin") and (ip.geoip.country ne "CN")
操作:
Block
# 规则示例 3:限制登录尝试频率
表达式:
(http.request.uri.path eq "/wp-login.php")
操作:
Rate Limit: 10 requests per 60 seconds
托管规则集
Cloudflare 提供预配置的托管规则集:
| 规则集 | 免费版 | Pro 版 | 说明 |
|---|---|---|---|
| Cloudflare 托管规则集 | ✅ 基础版 | ✅ 完整版 | OWASP Top 10 防护 |
| Cloudflare OWASP 核心规则集 | ❌ | ✅ | 细粒度规则控制 |
| 已知攻击签名规则集 | ✅ | ✅ | 定期更新 |
三、ModSecurity 配置
ModSecurity 是最流行的开源 WAF 引擎,可以与 Nginx 和 Apache 集成。
Nginx 集成 ModSecurity
# 1. 安装 ModSecurity
apt install libmodsecurity3 nginx-mod-modsecurity -y
# 2. 启用 ModSecurity 模块
cat > /etc/nginx/modsecurity/modsecurity.conf << 'EOF'
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecResponseBodyMimeType text/plain text/html text/xml application/json
EOF
# 3. 下载 OWASP CRS(核心规则集)
git clone https://github.com/coreruleset/coreruleset /etc/nginx/modsecurity/crs/
cp /etc/nginx/modsecurity/crs/crs-setup.conf.example /etc/nginx/modsecurity/crs/crs-setup.conf
# 4. Nginx 配置中启用 ModSecurity
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
# ...
}
OWASP CRS 核心规则集
OWASP CRS 是 ModSecurity 最常用的规则集,防护以下攻击类型:
| 规则 ID 范围 | 防护类型 | 说明 |
|---|---|---|
| 900000-900999 | 初始化 | 规则集配置和初始化 |
| 901000-901999 | 请求体检查 | 配置请求体处理 |
| 911000-911999 | IP 信誉 | 恶意 IP 检测 |
| 912000-912999 | DDoS 防护 | 速率限制 |
| 913000-913999 | 扫描器检测 | 检测漏洞扫描器 |
| 920000-920999 | 协议攻击 | HTTP 协议违规 |
| 921000-921999 | 请求走私 | HTTP 请求走私攻击 |
| 930000-930999 | LFI/RFI | 文件包含攻击 |
| 931000-931999 | RFI | 远程文件包含 |
| 932000-932999 | RCE | 远程代码执行 |
| 933000-933999 | PHP 注入 | PHP 代码注入 |
| 942000-942999 | SQL 注入 | SQL 注入攻击 |
| 950000-950999 | XSS | 跨站脚本攻击 |
四、WAF 规则最佳实践
规则部署流程
1. 初始部署:设置为「仅检测」模式(Log Only)
↓
2. 观察 1-2 周:收集误报数据
↓
3. 添加例外规则:放行被误报的正常请求
↓
4. 逐步启用:从低风险规则开始「拦截」
↓
5. 持续监控:定期审查日志,调整规则
误报处理
误报(False Positive)是 WAF 配置中最常见的挑战:
# 在 Cloudflare 中添加例外规则
# 或者使用 ModSecurity 规则排除
# 排除特定 URL 的规则检查
SecRule REQUEST_URI "@beginsWith /api/webhook" "id:1001,phase:1,pass,nolog,ctl:ruleEngine=Off"
常见误报来源:
- 富文本编辑器(TinyMCE、CKEditor)中的 HTML 内容
- API 请求中的特殊字符
- 搜索功能中的特殊查询
- 文件上传功能
速率限制配置
# Nginx 速率限制
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
server {
location /wp-login.php {
limit_req zone=login burst=3 nodelay;
# ...
}
}
# Cloudflare 速率限制规则
规则名称:限制登录页面访问
匹配条件:URL 包含 /login 或 /wp-login.php
速率限制:10 次/60 秒
触发操作:阻止 30 分钟
五、WAF 与其他安全措施的配合
WAF + CDN
Cloudflare CDN
→ DDoS 防护(网络层)
→ WAF(应用层)
→ Bot Management(爬虫管理)
WAF + 服务器端安全
WAF(边缘层)
↓ 拦截大部分攻击
服务器安全模块(应用层)
→ 输入验证
→ 参数化查询
→ CSP 策略
→ HttpOnly Cookie
安全体系分层
| 层级 | 防护措施 | 目的 |
|---|---|---|
| ⛅ 边缘层 | Cloudflare WAF + DDoS 防护 | 在到达服务器前拦截攻击 |
| 🌐 网络层 | 防火墙 + Fail2Ban | 阻止恶意 IP |
| 🖥️ 应用层 | ModSecurity + 代码审计 | 拦截应用层攻击 |
| 📊 数据层 | 数据库防火墙 + 加密 | 保护数据安全 |
六、WAF 性能影响
WAF 会带来一定的性能开销。以下是最小化影响的建议:
- 使用 CDN 层 WAF:Cloudflare WAF 不会增加源站负载
- 优化规则数量:规则越少,处理越快
- 使用缓存:对静态页面启用缓存,减少 WAF 处理次数
- 合理配置检测级别:生产环境建议使用最高效的规则集
七、WAF 日志分析
关键日志指标
# Cloudflare 查看 WAF 日志
# Dashboard → Security → Events
# 关注以下指标:
# 1. 最多被拦截的攻击类型
# 2. 攻击来源 IP 和国家
# 3. 被攻击的目标 URL
# 4. 误报数量(被错误拦截的正常请求)
定期安全审计
- 每日:检查 WAF 拦截统计是否有异常
- 每周:审查误报报告,更新白名单
- 每月:评估规则集更新,调整配置
- 季度:完整的 WAF 规则审计和优化
16IDC 观察
WAF 是网站安全体系中性价比最高的防护手段之一。对于大多数中小网站,推荐以下方案:
- 基础防护:Cloudflare 免费 WAF + 合理配置(0 成本,覆盖大部分常见攻击)
- 增强防护:Cloudflare Pro WAF + 自定义规则($20/月,适合电商和重要站点)
- 自建方案:Nginx + ModSecurity + OWASP CRS(适合需要完全控制权的场景)
安全不是一次性配置,而是一个持续优化和适应的过程。建议每季度审查一次 WAF 规则,根据最新的威胁情报进行更新。