drools动态配置规则_小白都能配置的WAF

1bb98cb1e9f82e5e81a804fda3342b78.png

今天介绍Nginx官方推荐的安全模块ModSecurity

ModSecurity在之前的版本中对于Nginx的兼容性不是很友好,其仅作为依赖模块使用在Apache Web服务器中,因此无法在其他HTTP应用程序中使用,但是在ModSecurity新发布的V3版本中,其作为独立库libModSecurity的ModSecurity的核心功能,即HTTP过滤引擎,它可以通过“连接器”集成到任何其他应用程序中,连接器是一小段代码,允许任何应用程序访问libModSecurity

WAF(Web应用程序防火墙)是一种用户HTTP请求的防火墙。标准防火墙在数据包到达时检查这些数据包,并在转发到网络接口,在这个过程中,将数据包的属性和规则列表进行比较。规则固定防火墙是允许数据包通过还是阻止

ModSecurity的执行和标准防火墙类似,它不查看数据包,而是在HTTP流量达到服务器时检查它。当HTTP请求到达服务器时,首先通过ModSecurity路由,然后路由到目标应用服务器,比如Apache或Nginx,ModSecurity将入站HTTP请求与规则列表进行比较。这些规则定义了恶意或者有害的请求形式,所以如果请求与规则匹配,则ModSecurity会阻止请求到达目标应用程序,从而起到防护作用。

说了这么多理论,下面实践下:

上面说到ModSecurity主要依赖libModSecurity库,目前来说在大部分的linux发行版中,都可以通过包管理工具来安装libModSecurity库,比如CentOS

f9c99e65843beb1d1356656becc6bb9c.png

but,实际测试中发现,包管理器安装的库,在Nginx添加链接器模块编译的时候,无法编译,缺少头文件,所以建议通过源码编译的方式安装最新版本的libModSecurity库

编译libModSecurity库需要的构建工具和依赖库如下:

gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel

这些可以通过包管理工具安装,对于CentOS来说,需要先安装epel-release源

依赖包安装完成后,开始从git克隆libModSecurity,通常我是放在/opt/目录中

cd /opt/git clone https://github.com/SpiderLabs/ModSecurity

通过git下载源代码到/opt/后,进入ModSecurity目录,切换到V3分支,并初始化及从远端同步子模块

cd ModSecuritygit checkout v3/mastergit submodule initgit submodule update

提一下git submodule,它是当两个项目是独立的,但是当其中一个项目需要包含其他项目支持时使用的功能,及主项目可以使用另外一个项目的支持,需要在主项目的项目仓库根目录下添加.gitmodules文件,并配置需要的子项目,比如ModSecurity的库

e67f3009504932cb585215165d2dbd1d.png

言归正传,现在已经准备好了ModSecurity的构建需要,还是编译老三件套,不过在开始前,需要先通过build.sh生成编译文件

sh build.sh./configuremakemake install

编译安装完成后,会在/usr/local/modsecurity/lib下生成so库文件,在添加Nginx连接器模块前,需要将库动态加载到ldconfig中,在/etc/ld.so.conf中添加上面的路径,并通过ldconfig加载

上面的过程已经安装完libModSecurity库,但要想Nginx使用,还需要安装Nginx链接器。我们都知道,Nginx可以动态加载第三方模块,这也是它的一个优点,我们这里就通过它来编译添加Nginx连接器。

Nginx是在1.11.5之后的版本中,提供动态编译第三方模块的功能的,如果是之前版本的Nginx,首先建议你直接升级,放心,不会有什么问题,目前我升级过很多,直接从1.8升级到1.16我也干过,没有任何问题,可能会有一些配置文件的编写方式修改,但是不会有大问题。如果坚持用低版本的,那也没关系,重新编译nginx文件就可以,在编译时将该模块添加进去就可以。不要make install就可以,编译完,将新生成的nginx文件替换就可以

这里首先需要确认Nginx的版本,通过Nginx -V命令查看

19c5760f77be921d1b077257d1fbd313.png

因为我是通过包管理工具安装的,所以我需要确认版本,从官网下载一个nginx的源码包,来编译添加Nginx连接器模块,如果你之前是通过编译安装的,你还保留了之前的源码包,那可以直接使用

确认版本之后,从nginx官网下载nginx对应版本的源码包,放/opt下面,并解压,之后再通过git下载Nginx连接器源码,也放/opt下面。(目录这里无所谓,看个人习惯,不过还是规范一点的好)

git clone https://github.com/SpiderLabs/ModSecurity-nginx

现在都准备好了,可以开始添加模块了,进入nginx源码目录开始添加

./configure --with-compat

以上命令编译后,会在当前目录下生成一个objs目录,该目录下会生成

ngx_http_modsecurity_module.so文件,然后将该文件复制到/etc/nginx/modules目录下,当然这是包管理工具安装的,如果是自己编译安装的,放相应的modules目录下,就可以开始配置Nginx使用了

在nginx.conf配置文件中,将以下内容添加到nginx的主配置文件中

load_module modules/ngx_http_modsecurity_module.so;

这行要加在配置文件的开头部分,配置pid文件上下的地方,而不是在events或http部分中

接下来,创建一个新目录并将ModSecurity规则和配置加载到其中

mkdir /etc/nginx/modseccd /etc/nginx/modsecgit clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

将从git上下载下来的示例配置文件重命名为正式的配置文件

mv /etc/nginx/modsec/owasp-modsecurity-crs/↪crs-setup.conf.example /etc/nginx/modsec/↪owasp-modsecurity-crs/crs-setup.conf

然后将ModSecurity配置文件,从源码目录复制到/etc/nginx/modsec目录中

cp /opt/ModSecurity/modsecurity.conf-recommended
 ↪/etc/nginx/modsec/modsecurity.conf

最后,创建一个主配置文件main.conf,用来加载上面两个配置文件和规则文件,该文件在nginx服务器配置块中调用,在main.conf配置文件中添加如下

Include /etc/nginx/modsec/modsecurity.confInclude /etc/nginx/modsec/owasp-modsecurity-crs/crs-setup.confInclude /etc/nginx/modsec/owasp-modsecurity-crs/rules/*.conf

然后在nginx的server配置文件中就可以调用main.conf配置文件了,在server_name下面添加以下内容,开启ModSecurity

modsecurity>
modsecurity_rules_file /etc/nginx/modsec/main.conf;

到这里就配置完成了,然后测试nginx配置(nginx -t),重新加载nginx配置文件(nginx -s reload)。OK,ModSecurity开始工作了

ModSecurity有两种操作模式,默认情况下,它只会记录与禁止规则匹配到的任何请求,但允许它们传递到后端应用,这种模式不会因为误报而阻止请求,只会在/var/log/modsec_audit.log中记录。这种模式是DetectionOnly模式

488c194d15b0171e27796ebb6fd659b9.png

如果要记录并将恶意请求阻止,需要编辑modsecurity.conf配置文件,修改其中的SecRuleEngine参数为On

SecRuleEngine On

这样对于恶意的请求,会返回403状态码,并且记录也会被记录到/var/log/modsec_audit.log中

相关链接:

https://github.com/SpiderLabs/ModSecurity-nginx

https://github.com/SpiderLabs/ModSecurity

更多运维知识、安全咨询、安全测试,欢迎关注微信公众号《运维实谈》

0e5b50dc95a86dfc9e9f2bf88cd8dc57.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值