Nginx+Naxsi模块使用方法
1、什么是Naxsi
- Naxsi是一个开放源代码、高效、低维护规则的Nginx Web应用防火墙模块,Naxsi的主要目标是帮助人们加固Web应用程序,以抵御SQL注入、跨站脚本、跨域伪造请求、本地和远程文件等包含的漏洞。
- Naxsi与其它WAF的区别是,它不靠后签名来检测和阻止攻击。它使用一个简单的模型,而不是试图发现已知的攻击,它在HTTP请求/参数检测意外的字符。
- 中文文档:
- 官方英文文档:
1、Naxsi规则文件生成与说明
1 | ###默认Naxsi规则文件路径: |
2、NGINX配置文件的引用
1 | #针对支持模块化的nginx配置 |
3、Naxsi支持的变量
1 | URL |
4、Naxsi支持的操作符:
1 | str 字符串 |
5、防护规则:naxsi_core.rules的配置与内容
1 | MainRule "rx:select|union|update|delete|insert|table|from|ascii|hex|unhex|drop" "msg:sql keywords" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:4" id:1000; |
6、规则组成
1 | (1) 内部规则1-999 协议解析中的异常问题 |
7、规则实例
1 | (1) get参数 |
8、开源白名单规则
1 | 白名单规则集规则集-wordpress/DokuWiki/ruTorrent |
9、白名单实例:
1 | ###白名单配置文件: |
10、NGINX错误日志解析:nginx_error.log
1 | id0=1008 |
11、注意事项
- Naxis的拦截机制是满足预设分值才进行阻断,所以 当触发了某条规则之后(naxsi_core.rules),就会进行逐步加分,当满足(my_naxsi.rules)中的CheckRule的分值就会触发拦截,详见日志,经验总结:“可以针对个别域名,创建多个规则,采用include的方式进行配置,规则的触发和分数阈值有很大关系,无法拦截或者出现多次拦截匹配等,都会加分,触发阈值就拦截”
1
2
3
4(1)分数阈值
CheckRule "$SQL >= 8" BLOCK;
(2)加分项
MainRule "rx:\band\b|\bor\b" "msg:SQL, probable sql/xss" "mz:BODY" "s:$SQL:8" id:1009;