Naxsi模块
目录 |
概述
是一款优秀的基于白名单的主动防御模块,可以支持包括SQL注入、跨站脚本攻击等在内的多种攻击手段的检测。
SEnginx中默认集成了Naxsi模块,其使用方式没有发生变化,可以参考Naxsi的文档进行设置,也可以参考下面的说明进行设置。
命令
除naxsi原有命令外,SEnginx还额外提供如下命令:
naxsi_whitelist
语法 | naxsi_whitelist ua_var_name=UA whitlist ip_var_name=IP whitelist ip_var_value=value; |
默认值 | - |
上下文 | Location |
有效版本 | 1.5.11及以后版本 |
此命令设置引用的全局IP白名单和User-Agent白名单,其中,IP白名单是和nginx的geo模块配合使用
例如:
#定义IP白名单 geo $ip_wl { ranges; default 0; 127.0.0.1-127.0.0.1 1; 3.0.0.1-3.2.1.254 1; } #定义UA白名单 whitelist_ua $ua_wl { "autotest" ".*\.test\.com"; } server { location / { naxsi_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; } }
使用SEnginx中集成的naxsi模块
senginx集成的naxsi模块位于senginx安装目录下的naxsi目录中,包括一些生成白名单的工具和规则集等。
首次使用senginx中集成的naxsi,你需要做如下事情:
创建白名单文件
创建白名单文件空,例如wl.conf,文件位置任意,例如/path/to/senginx/conf/wl.conf。
配置naxsi规则
在senginx的nginx.conf配置文件中include naxsi的核心规则库:
/usr/local/senginx/naxsi/naxsi_config/naxsi_core.rules;
配置Location命令
在nginx.conf中,需要进行安全过滤的location上设置naxsi的相关命令并指定白名单文件的位置:
location /cn { error_log logs/error.cn.log; ... ... LearningMode; SecRulesEnabled; #SecRulesDisabled; DeniedUrl "/RequestDenied"; include wl.conf; ## check rules CheckRule "$XSS >= 4" BLOCK; CheckRule "$TRAVERSAL >= 4" BLOCK; CheckRule "$EVADE >= 8" BLOCK; CheckRule "$UPLOAD >= 8" BLOCK; CheckRule "$RFI >= 8" BLOCK; CheckRule "$SQL >= 8" BLOCK; }
设置阻断的Location
写一个/RequestDenied location,当然名字可以任意,需要和DeniedUrl指令的参数一致即可:
location /RequestDenied { return 403; }
阻断的请求会被送到这个Location中,你可以在这里做任何你想做的事情,例子中简单的返回了403。
启动或者reload senginx
此时naxsi处于学习状态。
让naxsi充分学习
遍历整个网站,让naxsi充分学习,以便生成尽可能完整的学习记录。
注意,在这个阶段所有命中规则的攻击都不会被阻断,而是会被记录到senginx的error.log中,在这个例子中,我定义了一个location的error.log,名为error.cn.log,因此所有的naxsi记录都会记录到error.cn.log中。另外一点,在这个阶段,需要确保你的网站流量是纯净的,也就是不能混杂有攻击流量,否则攻击流量会被记录到白名单中,从而导致naxsi对这些攻击类型无法识别。
生成白名单
执行如下命令:
修改naxsi/nx_util/nx_util.conf:
data_dir=/path/to/nx_datas/directory #修改为nx_datas目录所在的路径 database_dir= naxsi_core_rules=/path/to/core/rules #修改为core rules所在的路径
执行naxsi/nx_util/nx_util.py生成白名单
python nx_util.py -l /path/to/error.log -o -c ./nx_util.conf
将会产生类似如下的输出:
########### Optimized Rules Suggestion ################## # total_count:1 (50.0%), peer_count:1 (100.0%) | , in stuff BasicRule wl:1015 "mz:$URL:/en/load.php|$ARGS_VAR:modules"; # total_count:1 (50.0%), peer_count:1 (100.0%) | mysql keyword (|) BasicRule wl:1005 "mz:$URL:/en/load.php|$ARGS_VAR:modules";
复制到之前创建的wl.conf中去。
进入保护模式
编辑nginx.conf,将LearningMode注释掉,最后reload senginx,此时naxsi进入保护状态,后续的攻击会被以error级别的日志记录到error log中。