ModSecurity部署与配置指南

Ubuntu/Debian

sudo apt-get update sudo apt-get install -y libmodsecurity3 modsecurity-crs apache2 libapache2-mod-security2

CentOS/RHEL

sudo yum install -y mod_security mod_security_crs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

## 2. 配置ModSecurity
```bash
# 启用ModSecurity模块
sudo a2enmod security2

# 创建规则目录
sudo mkdir -p /etc/modsecurity/rules
sudo cp /path/to/your/rules/*.conf /etc/modsecurity/rules/

# 备份原始配置
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

3. 修改主配置

编辑 /etc/apache2/sites-available/000-default.conf 或对应虚拟主机配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<VirtualHost *:80>
    # 其他配置...

    # ModSecurity配置
    <IfModule security2_module>
        SecRuleEngine On
        SecRequestBodyAccess On
        SecResponseBodyAccess Off
        SecAuditLogType Concurrent
        SecAuditLog /var/log/modsec_audit.log
        SecDebugLog /var/log/modsec_debug.log
        SecDebugLogLevel 3

        # 包含规则文件
        IncludeOptional /etc/modsecurity/rules/*.conf
    </IfModule>
</VirtualHost>

4. 配置OWASP CRS规则

1
2
3
4
5
6
# 下载OWASP CRS规则集
sudo git clone https://github.com/coreruleset/coreruleset.git /usr/share/modsecurity-crs

# 创建符号链接
sudo ln -s /usr/share/modsecurity-crs/crs-setup.conf /etc/modsecurity/crs-setup.conf
sudo ln -s /usr/share/modsecurity-crs/rules/ /etc/modsecurity/rules/

5. 性能优化配置

1
2
3
4
5
6
7
# 编辑 /etc/modsecurity/modsecurity.conf
SecStatusEngine DynamicOnly
SecRulePerfMeasurement Off
SecConnEngine Off
SecRuleEngine On
SecRequestBodyLimit 13107200
SecRequestBodyInMemoryLimit 131072

6. 日志分析配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建审计日志轮转配置 /etc/logrotate.d/modsecurity
/var/log/modsec_audit.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
}

7. 测试与验证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 语法检查
sudo apachectl configtest

# 重启Apache
sudo systemctl restart apache2

# 运行测试脚本
cd /path/to/test/script
curl http://localhost/test.php?id=1' OR '1'='1
python3 modsec_test_cases.py

8. 监控与维护

1
2
3
4
5
# 实时查看日志
sudo tail -f /var/log/modsec_audit.log

# 查看拦截统计
grep "\[client" /var/log/modsec_audit.log | awk '{print $4}' | sort | uniq -c | sort -nr | head -n 20

9. 常见问题处理

9.1 规则误报处理

  • /etc/modsecurity/rules/exclusions.conf中添加排除规则:
1
2
SecRuleRemoveById 942100
SecRuleUpdateTargetById 942100 !ARGS:search

9.2 性能调优建议

  • 调整SecGEOLookupDb路径以使用GeoIP数据库
  • 对JSON请求启用SecRule REQUEST_HEADERS:Content-Type "application/json" "t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=JSON"
  • 使用SecAction "phase:1,nolog,pass,setvar:tx.no_combinations"避免复杂规则组合

9.3 升级规则集

1
2
cd /usr/share/modsecurity-crs
git pull origin main

10. 安全加固建议

  • 定期更新规则集:每周至少一次
  • 设置日志审计:每月进行安全事件分析
  • 配置集中式日志:使用ELK或Splunk进行日志分析
  • 实施旁路模式:在生产环境先使用SecRuleEngine DetectionOnly模式观察
0%