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模式观察