WAF配置实例
在现代Web应用安全防护中,Web应用防火墙(WAF)是抵御恶意攻击的第一道防线,通过合理的WAF配置,可以有效防止SQL注入、跨站脚本(XSS)、文件包含等常见攻击,本文将以Nginx WAF为例,介绍具体的配置实例,涵盖基础规则、高级防护及日志监控等内容。

基础防护规则配置
基础防护规则是WAF的核心,用于拦截常见的Web攻击,以下是一个基于Nginx的WAF基础配置示例:
http {
# 定义WAF规则
map $request_uri $waf_rule {
default 0;
~*union.*select 1; # 拦截SQL注入
~*script.*alert 1; # 拦截XSS攻击
~*etc.*passwd 1; # 拦截文件包含攻击
}
# 应用WAF规则
server {
listen 80;
server_name example.com;
location / {
if ($waf_rule = 1) {
return 403 "Forbidden: Malicious Request Detected";
}
proxy_pass http://backend;
}
}
} 说明:
- 通过
map指令匹配恶意请求模式,若匹配则返回403错误。 - 支持正则表达式灵活定义规则,如表示不区分大小写的匹配。
高级防护策略
除了基础规则,WAF还可配置CC防护、IP黑白名单等高级策略。
CC防护
防止恶意用户通过高频请求耗尽服务器资源:

http {
limit_req_zone $binary_remote_addr zone=cc_zone:10m rate=10r/s;
server {
location / {
limit_req zone=cc_zone burst=20 nodelay;
proxy_pass http://backend;
}
}
} 参数说明:
rate=10r/s:每秒最多处理10个请求。burst=20:突发流量缓冲20个请求。
IP黑白名单
通过IP地址控制访问权限:
http {
# 白名单
geo $white_list {
default 0;
192.168.1.0/24 1;
}
# 黑名单
geo $black_list {
default 0;
10.0.0.1 1;
}
server {
if ($black_list = 1) {
return 403;
}
if ($white_list = 0 && $black_list = 0) {
return 403;
}
}
} 日志监控与优化
WAF日志是分析攻击行为的关键,以下是日志配置示例:
http {
log_format waf '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'waf_rule=$waf_rule';
access_log /var/log/nginx/waf.log waf;
} 日志字段说明:

$waf_rule:记录触发的WAF规则编号。- 可通过ELK等工具分析日志,生成攻击报告。
常见攻击防护对照表
| 攻击类型 | 规则示例 | 防护效果 |
|---|---|---|
| SQL注入 | ~*(union|select|insert) | 阻断恶意SQL查询 |
| XSS攻击 | ~*(<script|javascript|onload) | 防止脚本注入执行 |
| 文件包含 | ~*(etc/passwd|win.ini) | 避免服务器敏感文件泄露 |
| 命令执行 | ~*(;|&|&&||) | 拦截系统命令调用 |
FAQs
Q1: 如何动态更新WAF规则?
A1: 可通过以下方式实现动态更新:
- 规则文件热加载:将规则存储在外部文件(如JSON/SQLite),通过脚本定期同步到WAF配置中,执行
nginx -s reload重载。 - API接口管理:部分WAF(如ModSecurity)支持REST API,调用接口添加/删除规则,无需重启服务。
Q2: WAF误拦正常请求如何处理?
A2: 解决误拦问题的步骤:
- 分析日志:通过WAF日志定位误拦的请求特征(如URL参数、User-Agent)。
- 调整规则:优化正则表达式或添加例外条件(如白名单IP)。
- 人工审核:对可疑请求进行人工验证,确认无误后加入信任列表。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复