Web应用防火墙(WAF)的配置是保护Web应用免受常见攻击(如SQL注入、XSS、CSRF等)的关键步骤。以下是配置WAF的通用步骤和注意事项,适用于常见的WAF解决方案(如ModSecurity、Cloudflare、AWS WAF等)。
一、WAF配置通用流程
1. 选择WAF解决方案
- 自托管WAF:如ModSecurity(与Nginx/Apache集成)、NAXSI(Nginx插件)。
- 云服务WAF:如AWS WAF、Cloudflare、Azure WAF。
- 商业WAF:如Imperva、F5 BIG-IP。
2. 基础配置
- 定义保护目标:确定需要保护的域名、IP、端口和路径。
启用默认规则集:
- OWASP Core Rule Set(CRS):ModSecurity的常用规则集。
- 云服务提供的托管规则(如AWS的“Managed Rules for OWASP”)。
网络接入
- 将 WAF 部署在 Web 服务器前端(反向代理模式)或云服务中。
- 确保流量经过 WAF 转发(如 Nginx、Apache 反向代理配置)。
基础参数设置
- 启用 HTTPS 过滤(需配置 SSL 证书)。
- 配置请求大小限制、超时时间等。
3. 配置规则
核心防护规则
- 常见攻击防护:启用 SQL 注入、XSS、CSRF、恶意文件上传、命令注入等规则。
- 协议合规性:检查 HTTP 头合法性(如 User-Agent、Referer)、URL 编码等。
- 自定义规则:根据业务逻辑添加特定规则(如限制 API 接口访问频率)。
规则优先级
- 高风险规则(如 SQL 注入)设为 “拦截”,低风险规则(如部分误报)设为 “日志记录”。
IP 黑白名单
- 白名单:信任的 IP 或 IP 段(如内部测试 IP)。
- 黑名单:手动封禁恶意 IP 或通过 AI 自动封禁(需开启相关功能)。
常见攻击防护:
- SQL注入:过滤
UNION SELECT
、DROP TABLE
等关键字。 - XSS:拦截
<script>
、javascript:
等标签或协议。 - 文件包含:阻止路径遍历(如
../
)。
- SQL注入:过滤
自定义规则:
# ModSecurity示例(Nginx配置) SecRule ARGS "@detectSQLi" "id:1001,phase:2,deny,status:403,msg:'SQL Injection Attempt'"
4. 白名单与黑名单
- IP白名单:允许可信IP绕过某些规则。
- URL白名单:排除特定路径(如
/api/healthcheck
)。 - User-Agent黑名单:拦截恶意爬虫。
5. 日志与监控
- 启用WAF日志,记录拦截事件。
- 集成到SIEM工具(如ELK、Splunk)。
二、常见WAF配置示例
1. ModSecurity + OWASP CRS(Nginx/Apache)
安装ModSecurity:
# Ubuntu安装示例 apt-get install libapache2-mod-security2 # Apache apt-get install nginx-module-security # Nginx
启用OWASP规则集:
git clone https://github.com/coreruleset/coreruleset /etc/modsecurity/crs/ cp /etc/modsecurity/crs/crs-setup.conf.example /etc/modsecurity/crs/crs-setup.conf
配置规则敏感度:
nginx
# 在modsecurity.conf中调整规则级别 SecRuleEngine On SecRequestBodyAccess On SecDefaultAction "phase:1,log,auditlog,deny,status:403"
2. AWS WAF配置
创建Web ACL:
- 进入AWS WAF控制台,定义Web ACL并关联资源(如CloudFront、ALB)。
添加托管规则:
- 选择“AWSManagedRulesCommonRuleSet”防御常见攻击。
自定义规则示例(拦截特定IP):
yaml
- Name: BlockIP Priority: 1 Action: Block Statement: IPSetReferenceStatement: ARN: arn:aws:wafv2:us-east-1:123456789012:regional/ipset/MyIPSet VisibilityConfig: SampledRequestsEnabled: true CloudWatchMetricsEnabled: true MetricName: BlockIP
三、测试与验证
模拟攻击测试:
# SQL注入测试 curl http://your-site.com/?id=1' UNION SELECT username, password FROM users-- # XSS测试 curl http://your-site.com/?search=<script>alert(1)</script>
- 检查WAF是否返回
403 Forbidden
或记录拦截事件。
- 检查WAF是否返回
查看日志:
- ModSecurity日志:
/var/log/modsec_audit.log
- AWS WAF日志:通过CloudWatch或S3存储桶查看。
- ModSecurity日志:
四、注意事项
避免误杀:
- 使用“观察模式”(Log Only)测试新规则。
- 通过白名单排除合法流量(如API接口)。
性能优化:
- 限制复杂正则表达式。
- 启用缓存(如Cloudflare的WAF缓存规则)。
定期更新规则:
- 同步OWASP CRS最新版本。
- 云服务WAF需检查托管规则的更新。
五、常见问题
- 误拦截合法请求:调整规则敏感度(如
paranoia level
从4降为2)。 - 性能下降:禁用低优先级规则或启用流量采样。
- 绕过WAF:确保WAF部署位置正确(如反向代理前置)。
通过以上步骤,可以快速配置一个基础的WAF。具体细节需根据实际使用的WAF解决方案调整。