基于Nginx的Waf开源模块Naxsi:安装及验证

目标:在Nginx中成功安装Naxsi模块并验证防护策略是否生效

准备环境:宿主机-Windows10系统、虚拟机-Ubantu(通过win10应用商店安装)、Nginx(在Ubantu中)、Chrome(在win10中)

目录

1.查看当前的Nginx版本及相关文件目录

2.下载Naxsi、Nginx源代码、编译Nginx并替换Nginx可执行文件

3.新增Naxsi策略配置文件

4.修改Nginx配置及其Http站点配置

5.验证配置是否生效


1.查看当前的Nginx版本及相关文件目录

  PS:本文登陆Ubantu是以非超管权限的账号登录的,所以命令前要加上sudo,然后输入超管密码即可以管理员权限操作(下同)。

sudo nginx -v
  • 确认当前nginx版本为:基于Nginx的Waf开源模块Naxsi:安装及验证,即,1.17.10
  • 确认当前nginx的配置(nginx.conf)位置,一般在Ubantu根目录下的etc/nginx,即,/etc/niginx
  • 确认当前nginx可执行文件的位置(在第2步要被新编译完的Nginx替换),一般在Ubantu根目录下的usr/sbin(该目录下还包括各种其他程序的可执行文件),即,/usr/sbin
  • 可以在Ubantu系统中,用以下命令查找nginx文件和文件夹。
    find / -name nginx

     

2.下载Naxsi、Nginx源代码、编译Nginx并替换Nginx可执行文件

  • 在宿主机win10下载nginx-1.17.10版本的源代码(http://nginx.org/download/nginx-1.17.10.tar.gz),注意,必须与当前已经安装的nginx版本一致。

  • 在宿主机win10下载naxsi最新发布的版本的源代码(https://github.com/nbs-system/naxsi),在页面右侧找到基于Nginx的Waf开源模块Naxsi:安装及验证

  • 把源代码文件包从宿主机win10移动到虚拟机Ubantu系统中(移动文件的方法见:https://blog.csdn.net/u010046615/article/details/110135930),放在系统根目录的tmp文件夹下(即,/tmp/),并用tar命令进行解压缩,

     tar zxvf nginx-1.17.10.tar.gz
     tar zxvf naxsi-1.3.tar.gz

     

  • 查看当前nginx版本的详细配置参数(注意是大写的V):

    sudo nginx -V

    打印:

    nginx version: nginx/1.17.10 (Ubuntu)
    built with OpenSSL 1.1.1f  31 Mar 2020
    TLS SNI support enabled
    configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-Pmk9_C/nginx-1.17.10=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

    把打印的参数(configure arguments:)后面的全部内容拷贝存起来,PS:在编译时,在参数前面加上addmodule重新编译。

  • 进入到nginx-1.17.10源代码目录里基于Nginx的Waf开源模块Naxsi:安装及验证,使用以下命令重新配置nginx:

    ./configure  --add-module=/tmp/naxsi-1.3/naxsi_src/ --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-Pmk9_C/nginx-1.17.10=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

    重点在于,在configure后(configure是一个系统脚本,用来配置源代码),加上以下语句,表示把naxsi的源代码也配进来。

    --add-module=/tmp/naxsi-1.3/naxsi_src/

     

  • 接着系统会开始Run脚本,可能run到一半会有问题,报错,例如:基于Nginx的Waf开源模块Naxsi:安装及验证,这说明当前系统找不到对应的依赖库.

    (图中的例子是OpenSLL lib库,其他库可以百度一下,大同小异),需要先安装。因此先执行安装语句:

sudo apt-get install libssl-dev

       然后重新执行上一步的./configure语句。如果还有其他库未安装,再继续执行sudo apt-get 进行安装。(如果有库找不到,可以考虑换软件源为清华大学或阿里云。)

  • 配置成功后系统返回各种配置路径:

    Configuration summary
      + using threads
      + using system PCRE library
      + using system OpenSSL library
      + using system zlib library
    
      nginx path prefix: "/usr/share/nginx"
      nginx binary file: "/usr/share/nginx/sbin/nginx"
      nginx modules path: "/usr/lib/nginx/modules"
      nginx configuration prefix: "/etc/nginx"
      nginx configuration file: "/etc/nginx/nginx.conf"
      nginx pid file: "/run/nginx.pid"
      nginx error log file: "/var/log/nginx/error.log"
      nginx http access log file: "/var/log/nginx/access.log"
      nginx http client request body temporary files: "/var/lib/nginx/body"
      nginx http proxy temporary files: "/var/lib/nginx/proxy"
      nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
      nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi"
      nginx http scgi temporary files: "/var/lib/nginx/scgi"

     

  • 接着执行编译语句,

    make

     编译完成后最后返回,其中包括了Nginx配置和Nginx错误日志的文件的路径:

    sed -e "s|%%PREFIX%%|/usr/share/nginx|" \
            -e "s|%%PID_PATH%%|/run/nginx.pid|" \
            -e "s|%%CONF_PATH%%|/etc/nginx/nginx.conf|" \
            -e "s|%%ERROR_LOG_PATH%%|/var/log/nginx/error.log|" \
            < man/nginx.8 > objs/nginx.8
    make[1]: Leaving directory '/tmp/nginx-1.17.10'

     

  • 将Naxsi的核心规则模块拷贝到nginx配置目录中:

     sudo cp naxsi_core.rules /etc/nginx/naxsi_core.rules

     

  • 在/tmp/nginx-1.17.10/objs目录下,把刚编译好的nginx可执行文件替换掉原有的nginx可执行文件(保险起见,可以先把原有的可执行程序nginx备份后,再替换):

     sudo cp nginx /usr/sbin/

     

  • 完成以上步骤,再次执行nginx -V,会发现新的配置已生效:基于Nginx的Waf开源模块Naxsi:安装及验证

     

3.新增Naxsi策略配置文件

  • 进入/etc/nginx/目录,新建防护策略文件:mysite.rules  , 其内容为:
    #LearningMode; #Enables learning mode
    SecRulesEnabled;
    ##SecRulesDisabled;
    DeniedUrl "/403.html";
    ### check rules
    CheckRule "$SQL >= 8" BLOCK;
    CheckRule "$RFI >= 8" BLOCK;
    CheckRule "$TRAVERSAL >= 4" BLOCK;
    CheckRule "$EVADE >= 4" BLOCK;
    CheckRule "$XSS >= 8" BLOCK;

    其中,SecRulesEnabled,表示开启WAF防护;DeniedUrl,表示策略生效后,指向的Url的位置,相对位置,相对当前目录(/etc/nginx/)。

  • 其他规则可查询:https://github.com/nbs-system/naxsi/wiki

4.修改Nginx配置及其Http站点配置

 

5.验证防护策略的配置是否生效

上一篇:中小企业自建云WAF有多难?只需20分钟!而且:全程免费


下一篇:SQL注入waf绕过