1、安装ModSecurity
cd /usr/local
git clone https://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
git submodule init
git submodule update
sh build.sh
./configure
make
make install

2、安装ModSecurity-nginx
cd /usr/local
git clone https://github.com/SpiderLabs/ModSecurity-nginx

3、进入nginx源码目录
./configure --user=www \
--group=www --with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_slice_module \
--add-module=/usr/local/ModSecurity-nginx

make
make install


4、添加常用的OWASP规则

OWASP(开放式Web应用程序安全项目)是一个开放的社区,由非营利组织 OWASP基金会支持的项目。对所有致力于改进应用程序安全的人士开放,旨在提高对应用程序安全性的认识。其最具权威的就是“10项最严重的Web 应用程序安全风险列表” ,总结并更新Web应用程序中最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。

拷贝modsecurity基础配置文件
mkdir -p /usr/local/nginx/modsecurity/rules
cp /usr/local/ModSecurity/modsecurity.conf-recommended  /usr/local/nginx/modsecurity/modsecurity.conf

下载OWASP规则包,并拷贝配置文件
cd /usr/local
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs
cp crs-setup.conf.example /usr/local/nginx/modsecurity/crs-setup.conf
cp -r rules/ /usr/local/nginx/modsecurity/

进入规则目录,启用自定义规则文件
cd /usr/local/nginx/modsecurity/rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

这2个文件就是自定义规则文件
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

5、编辑nginx.conf,启用ModSecurity

在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置)这里看具体需要,实际生产业务推荐写在server,这样方便控制

modsecurity on;
modsecurity_rules_file /usr/local/nginx/modsecurity/modsecurity.conf;

nginx -t

如果提示:
nginx: [emerg] "modsecurity_rules_file" directive Rules error. File: /usr/local/nginx/modsecurity/modsecurity.conf. Line: 258. Column: 17. Failed to locate the unicode map file from: unicode.mapping Looking at: 'unicode.mapping', 'unicode.mapping', '/usr/local/nginx/modsecurity/unicode.mapping', '/usr/local/nginx/modsecurity/unicode.mapping'.

拷贝缺失文件
cp /usr/local/ModSecurity/unicode.mapping /usr/local/nginx/modsecurity/unicode.mapping

nginx -t

如果提示:
nginx: [emerg] "modsecurity_rules_file" directive Rules error. File: /usr/local/nginx/modsecurity/rules/REQUEST-910-IP-REPUTATION.conf. Line: 75. Column: 22. This version of ModSecurity was not compiled with GeoIP or MaxMind support.

因为nginx没有添加ngx_http_geoip_module模块,这个模块用于对IP地址进行地域信息的读取。客户端在访问时,通过ip地址能够知道客户端所在的国家,城市。常用于处理不同国家的客户访问。不需要的话可以去掉该规则

mv /usr/local/nginx/modsecurity/rules/REQUEST-910-IP-REPUTATION.conf /usr/local/nginx/modsecurity/rules/REQUEST-910-IP-REPUTATION.conf.bak


修改ModSecurity配置文件

vi /usr/local/nginx/modsecurity/modsecurity.conf

启用引擎
SecRuleEngine DetectionOnly 改为 SecRuleEngine On

生产环境应禁用审计,否则审计日志会非常大
SecAuditEngine
RelevantOnly 改为 SecAuditEngine Off

设置审计级别,启用对POST数据审计
SecAuditLogParts ABIJDEFHZ 改为 SecAuditLogParts ABCDEFHZ

I参数不审计通过 multipart/form-data 提交的数据,J参数会审计multipart/form-data 上传的文件的数据,C参数审计所有POST数据,包括通过 multipart/form-data 提交的数据,具体参考:https://wiki.atomicorp.com/wiki/index.php/SecAuditLogParts

SecAuditLog /var/log/modsec_audit.log 审计日志应当保存到磁盘空间充足的目录

添加
Include /usr/local/nginx/modsecurity/crs-setup.conf
Include /usr/local/nginx/modsecurity/rules/*.conf

最后再检查一次配置
nginx -t

6、重启nginx,检查规则是否生效
systemctl restart nginx

测试访问:http://xxx.com/?id=2%27or%201-3

如果返回403拒绝访问则说明配置成果

posted on 2023-06-08 18:02  lbnnbs  阅读(400)  评论(0编辑  收藏  举报