之前的文章中介绍了nginx的一种waf,是添加modsecurity模块来作为nginx的waf,功能很强大,nginx官方plus版本中其实也是用modsecurity作为waf的,但是modsecurity对于普通用户来说配置相对复杂,特别是它的规则,所以,今天推荐一个开源、高性能、低规则维护的waf——Naxsi
Naxsi用于防护XSS和SQL注入以及RFI、文件上传、CSRF,这些都是web安全中最常见的攻击方式,它是一个第三方的nginx模块,依赖于libpcre,与任何nginx版本都兼容
为了验证它的功能,我先通过docker,起一个dvwa,用没有安装Naxsi的nginx反代这个dvwa,先用sqlmap跑一下。然后在nginx上安装Naxsi,之后同样用工具跑一下,看下两次结果对比,这个就是整体的一个思路,废话不多说,开搞!
未安装前测试
先docker search一下web-dvwa,就用这个stars 110的
直接启动容器,映射端口
看下日志,是否启动正常了
看来是Apache+MariaDB,正常启动了,通过nginx反向代理一下
重启nginx,访问
通过默认用户名密码登录之后,创建数据库
创建完成后,会跳转到登录页面,同样默认用户名密码登录之后,可以看到创建成功的dvwa
ok,dvwa安装完之后,通过sqlmap测一下注入
直接跑一下数据库,跑出结果如下:
安装Naxsi
开始安装Naxsi,首先从git上下载naxsi源码及配置文件
目录结构如下
如果你没有nginx源码包,下载对应版本的nginx源码包,完成后进入nginx源码包,编译安装naxsi为动态扩展
然后通过make modules,安装模块为ngx_http_naxsi_module.so,保存在objs目录,复制到nginx的modules目录,同时将naxsi的主配置文件复制到/etc/nginx下
在nginx配置文件中,加载naxsi模块和核心规则
ok,添加完成模块,检测配置是否正常,如果遇到以下错误,说明这个第三方模块的编译中包含的签名和nginx的不一致
通过nginx -V获取当前配置的configure参数,复制所有参数,后面添加增加模块的编译参数,重新编译就可以了
安装后测试
上面添加模块后,在需要启用规则的location添加规则
然后重载nginx,再拿sqlmap跑一次注入看下结果
被拦截,查看日志
Naxsi规则
上面简单的加了基本的规则进行测试,下面对Naxsi规则进一步说明
首先是naxsi支持的几个变量,它们通常是在server块进行配置
由于naxsi是在nginx的REWRITE阶段运行的(关于nginx的几个阶段,将在下篇文章介绍),这几个变量需要在调用前设置,否则无效
上面几个变量设置后,会覆盖后面的设置,比如上面例子中设置SecRulesEnabled,是开启naxsi的,当设置naxsi_flag_enable时,会覆盖该项
当然这些变量都可以通过nginx的if或lua脚本进行动态判断设置
接着是常用的配置指令,都是在location块进行配置
这里需要注意学习模式,开启学习模式后,通常不会进行拦截id大于1000的规则,默认情况下小于1000的规则是被注释掉的
DeniedUrl是指配置一个naxsi拒绝访问之后返回的错误页面,比如40x或50x错误页面,也可以是自定义的一个页面
关于白名单,很多时候会用到,通常白名单可以设置在location,也可以设置在MainRule中,通常的语法如下:
BasicRule wl:1013 "mz:
语法规则是wl表示白名单,冒号后面的id表示加入白名单的规则,常见
wl:0
: Whitelist all rules 所有规则加入白名单wl:42
: Whitelist rule #42
42号规则加入白名单wl:42,41,43
: Whitelist rules 42
, 41
and 43
多个规则加入白名单wl:-42
: Whitelist all user rules (>= 1000
), excepting rule 42
除42号规则,其他都加入白名单上面的语法中还有mz部分,这部分是指不是整个id都加入白名单,而是将id中匹配到后面变量和url的部分加入白名单
mz全名是Match Zones,主要有4个区域,分别是URL、ARGS、HEADERS、BODY,分别解释如下:
最后说下CheckRule,CheckRule用来指示naxsi根据与请求相关联的特定得分,采取相应的操作,比如LOG、DROP、BLOCK、ALLOW,这里说的分数通常是由一个或几个规则确定的
例如上面的例子中,CheckRule "$SQL >= 8" BLOCK; 这个分数是在主规则中创建的
所以可以根据你要禁用的匹配规则,利用分数来进行CheckRule设定
除了以上这些基本的规则外,naxsi还可以通过nxapi和nxtool工具组合,并通过es数据库生产白名单,通过导入es数据库正常的请求日志,来制作白名单
另外还可以集成fail2ban等工具,更多的高级使用方式可以通过wiki查看
https://github.com/nbs-system/naxsi/wiki
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有