freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

自研WAF之路——Modsecurity安装教程
2021-05-26 08:27:57

Modsecurity介绍

Modsecurity起初是Apache服务器的一个开源模块,用于实现一个简单的WAF,但随着Web服务的发展,Nginx的使用量越来越多,最新统计如下:

但是如果想Nginx也能使用Modsecurity,实现WAF功能,则必须安装Apache相关的软件,因为这个时候,Modsecurity是强依赖于Apache的。所以,作者在最新版V3.x后,直接重构了Modsecurity,去掉了所有Apache相关的依赖,直接把Modsecurity变成了一个库,也就是libmodsecurity,具体区别,可以查看:http://www.modsecurity.cn/practice/post/13.html

安装前说明

如果想要Nginx可以使用libmodsecurity,来实现WAF功能,总共要安全三个部分:

  • 最新版的Nginx:额,为什么是最新版?因为这样最简单。如果是比较旧的版本,就得去查查是否支持了。

  • ModSecurity-nginx connector:负责调用libmodsecurity对Nginx请求进行识别。

  • libmodsecurity:modsecurity核心部分,用于实现请求识别。
    当上述的三部分安装完了,Nginx就具备了WAF功能了,但是刚开始,没有任何规则,有和没有一样。因此我们需要一批初始化的规则,来实现基本的WAF功能,这里有三个免费的规则集,可以用来完成WAF规则初始化。

  • CRS:OWASP维护,也是modsecurity官方规则集

  • Comodo:comodo维护的免费规则,comodo是个商业化安全公司,需要注册账号才能下载,下载时要选择 nginx/modsecurityV3.0 那个版本下载。

  • AtomiCorp:AtomiCorp维护的规则,也需要注册账号才能下载。

实践安装

由于Nginx默认是不支持modsecurity,所以Nginx要采用编译安装,在编译时,把modsecurity模块编译到Nginx里,安装步骤分为三步:

  1. 编译libmodsecurity,得到libmodsecurity 库和头文件。

  2. 下载ModSecurity-nginx connector:git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

  3. 编译Nginx,指定configure参数:./configure --add-module=/path/to/ModSecurity-nginx

编译libmodsecurity

  1. 从项目主页:https://github.com/SpiderLabs/ModSecurity 获取最新的release版本,截止本文发表时,最新版本是V3.0.4

  2. 解压下载到的压缩包,得到目录:modsecurity-v3.0.4

  3. 运行以下命令,编译并安装:

cd modsecurity-v3.0.4
./build.sh
./configure --prefix=/usr/local/modsecurity
make && make install

这样就得到了libmosecurity相关的文件,以供Nginx调用。

编译Nginx

  1. 从Nginx主页:http://nginx.org/en/download.html 下载最新的Nginx源码包,本教程用的是nginx-1.18.0

  2. 下载ModSecurity-nginx connector:git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

  3. 解压Nginx和ModSecurity-nginx源码包,得到两个文件夹:modsecurity-nginx-v1.0.1和nginx-1.18.0

  4. 运行一下命令编译Nginx:

cd nginx-1.18.0
./configure --add-module=/root/download/modsecurity-nginx-v1.0.1/ --prefix=/usr/local/nginx 
make && make install

以上命令没有任何错误输出,即表示安装成功。

配置Nginx并启动

  1. 从libmodsecurity源码文件夹里,获取modsecurity配置文件:modsecurity.conf-recommended

  2. 执行命令:mv modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf

  3. 修改Nginx配置文件,启用modsecurity

  4. 下载CRS规则集:git clone https://github.com/coreruleset/coreruleset/

  5. 在modsecurity.conf文件中修改:SecRuleEngine为on,并在末尾增加如下配置(注意修改路径):

Include /root/coreruleset/crs-setup.conf
Include /root/coreruleset/rules/*.conf
  1. 启动Nginx: /usr/local/nginx/sbin/nginx

效果对比

为了验证modsecurity是否真的可以起到web应用防火墙的作用,这里搭建一个开源安全靶机(搭建方法点击打开项目主页即可获取),并且使用AWVS进行扫描,观察使用前后的漏洞数量变化,结果如下:

从上倒下分别是:

  • 不开启modsecurity:高危漏洞11个

  • 开启modsecurity,使用comodo规则:高危漏洞7个

  • 开启modsecurity,使用crs规则:高危漏洞6个

  • 开启modsecurity,只记录,不拦截攻击:高危漏洞11个

由此可以,开源的规则可以帮我们拦截掉一些攻击,但不能拦截所有的。
modsecurity提供了完整的WAF功能,但是如果拦截、识别攻击,需要我们自己根据自己的业务形态,自定义规则去识别。

写在最后

modsecurity提供了完整的WAF功能,并且免费的规则集可以帮助我们快速搭建起一个可用的WAF,降低Web服务被攻击的风险。但是如果想识别的准确、降低误报率,这还需要我们自己去学习modsecurity规则编写的方法,根据自己公司业务的需求,制定规则。
还有两个地方,在使用modsecurity时需要注意的,第一就是如果服务器时Apache,那么请使用V2.x版本,因为现在apache connector还不太稳定。第二就是别期望太高,正如前面所说的,modsecurity提供的是WAF功能,不是规则,所以,要想准确识别攻击,还是需要自己写规则,这个逃不过去。
如果你想使用modsecurity,这个Modsecurity中文站上的教程还是很完整的,可以多看看:http://modsecurity.cn/

# waf # modsecurity # 自研
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录