# 开启 ModSecurity 仅限最新的 Current 版本
本项目提供的默认规则十分容易被绕过,而且许多用户并没有足够的能力和时间去维护一套可靠的规则。
这种情况下你可以选择启用 ModSecurity (opens new window) 并启用 OWSAP(Open Web Application Security Project) 核心规则集 (opens new window) 来增强防护能力。
# 第一步:下载规则集
cd /usr/local/src
git clone https://github.com/SpiderLabs/ModSecurity.git
git clone https://github.com/coreruleset/coreruleset.git
# 第二步:拷贝规则文件
mkdir -p /etc/nginx/rules/modsecurity
cp coreruleset/crs-setup.conf.example /etc/nginx/rules/modsecurity/crs-setup.conf
cp ModSecurity/modsecurity.conf-recommended /etc/nginx/rules/modsecurity/modsecurity.conf
cp ModSecurity/unicode.mapping /etc/nginx/rules/modsecurity/unicode.mapping
cp -r coreruleset/rules /etc/nginx/rules/modsecurity/owasp
# 第三步:修改规则文件
- 编辑
/etc/nginx/rules/modsecurity/modsecurity.conf
,将SecRuleEngine DetectionOnly
修改为SecRuleEngine on
。 - 编辑
/etc/nginx/rules/modsecurity/modsecurity.conf
,在文件末尾追加下列内容。Include /etc/nginx/rules/modsecurity/crs-setup.conf Include /etc/nginx/rules/modsecurity/owasp/*.conf
# 第四步:加载规则
编辑 nginx 的配置文件。
waf_modsecurity on file=/etc/nginx/rules/modsecurity/modsecurity.conf;
# 第五步:优化性能
启用规则后会导致性能大幅度降低,这是因为 ModSecurity 的规则引擎十分复杂,但这也为其带来了强大的功能。
一般来说我们无需对一些静态文件进行检查,因此可以根据这一点来优化性能。
编辑 nginx 的配置文件。
location ~* \.(gif|jpg|png|jpeg|webp|bmp|swf)$ {
waf_modsecurity off;
}
location ~* \.(html|htm|js|css)$ {
waf_modsecurity off;
}
# 第六步:重启 nginx
nginx -s stop
nginx
为什么不用 nginx -s reload ?
因为目前 ModSecurity 存在内存泄露的 bug,直接重载 nginx 会导致内存泄露和性能降低。
# 第七步:测试
此时你应该检查网站的运行情况,确保不会因为误报而导致网站异常。
# 第八步:处理误报
处理误报需要对 ModSecurity 的规则语法有所了解,本文不提供这类信息,你可以访问下面的链接来获取相关信息。