Naxsi模块

来自SEnginx
跳转至: 导航, 搜索

目录

概述

是一款优秀的基于白名单的主动防御模块,可以支持包括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中。

Naxsi原理

个人工具
名字空间
  • 页面
  • 讨论

变换
操作
导航
其他语言
工具箱