随着Web应用攻击手段变得复杂,安全标准越来越高,有的场景/客户会要求应用系统自身具备防护能力,那么使用最广泛的方案可能就是利用开源WAF ModSecurity,配合Nginx有效的增强Web安全性。
环境配置
OS:Ubuntu 20.04.5
ModSecurity: V3
Nginx: 1.22.0
ModSecurity
ModSecurity 是一个Web应用程序防火墙 (WAF),并且具有一个强大的持续维护的规则库,是目前Github上一直有持续维护的WAF项目,也是应用方案最多的。目前最新的版本是V3,较此前的V2有一定的区别,使用时请注意区分版本。
1 | apt install git g++ apt-utils autoconf automake build-essential libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev |
ModSecurity v3 Nginx Connector
ModSecurity项目只提供了libmodsecurity组件库,在Nginx中应用时,需要ModSecurity v3 Nginx Connector,将libmodsecurity和Nginx连接起来。
1 | git clone https://github.com/SpiderLabs/ModSecurity-nginx.git |
Nginx
此处采用最新的Nginx Stable版本1.22.0,编译参数中加入ModSecurity v3 Nginx Connector模块,如果此前有其他的编译参数,可以通过nginx -V
查看编译器版本和配置参数,make install完毕的默认目录在/usr/local/nginx/。
1 | wget https://nginx.org/download/nginx-1.22.0.tar.gz |
配置规则集
下载OWASP ModSecurity 核心规则集,将规则集放置到相应的目录中。
1 | wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.4.tar.gz |
ModSecurity配置
将ModSecurity的配置复制到相应目录,并进行修改。
1 | cd /home/tmp/WorkSpace/t-waf/ModSecurity |
规则启用
编辑/usr/local/nginx/conf/nginx.conf
,启用ModSecurity功能,在http节点添加表示全局配置,在server节点添加表示为指定网站配置:
1 | modsecurity on; |
启动Nginx服务:
1 | /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf |
功能验证
通过浏览器访问以下链接均为403 Forbidden响应。
1 | http://localhost/?id=1 AND 1=1 |
这样就说明ModSecurity配置好了,对于WAF来说,调试、更新规则是很重要的,要关注WAF是否会对业务造成误伤,关于ModSecurity的规则介绍,可以查看:
如何打造好用的ModSecurity系列 Part 2,更多的学习资料可以在http://www.modsecurity.cn
上找到。
参考
1、https://github.com/SpiderLabs/ModSecurity
2、https://github.com/SpiderLabs/ModSecurity-nginx
3、https://github.com/coreruleset/coreruleset
4、https://forum.butian.net/share/300
5、https://waf.comodo.com/user/auth