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 SELECTDROP TABLE等关键字。
    • XSS:拦截<script>javascript:等标签或协议。
    • 文件包含:阻止路径遍历(如../)。
  • 自定义规则

    # 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)

  1. 安装ModSecurity

    # Ubuntu安装示例
    apt-get install libapache2-mod-security2  # Apache
    apt-get install nginx-module-security     # Nginx
    
  2. 启用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
    
  3. 配置规则敏感度

    nginx

    # 在modsecurity.conf中调整规则级别
    SecRuleEngine On
    SecRequestBodyAccess On
    SecDefaultAction "phase:1,log,auditlog,deny,status:403"
    

2. AWS WAF配置

  1. 创建Web ACL

    • 进入AWS WAF控制台,定义Web ACL并关联资源(如CloudFront、ALB)。
  2. 添加托管规则

    • 选择“AWSManagedRulesCommonRuleSet”防御常见攻击。
  3. 自定义规则示例(拦截特定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
    

三、测试与验证

  1. 模拟攻击测试

    # 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或记录拦截事件。
  2. 查看日志

    • ModSecurity日志:/var/log/modsec_audit.log
    • AWS WAF日志:通过CloudWatch或S3存储桶查看。

四、注意事项

  1. 避免误杀

    • 使用“观察模式”(Log Only)测试新规则。
    • 通过白名单排除合法流量(如API接口)。
  2. 性能优化

    • 限制复杂正则表达式。
    • 启用缓存(如Cloudflare的WAF缓存规则)。
  3. 定期更新规则

    • 同步OWASP CRS最新版本。
    • 云服务WAF需检查托管规则的更新。

五、常见问题

  • 误拦截合法请求:调整规则敏感度(如paranoia level从4降为2)。
  • 性能下降:禁用低优先级规则或启用流量采样。
  • 绕过WAF:确保WAF部署位置正确(如反向代理前置)。

通过以上步骤,可以快速配置一个基础的WAF。具体细节需根据实际使用的WAF解决方案调整。

Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-03-13 18:31:43

results matching ""

    No results matching ""