一 环境

1.png

Nginx必须是1.12及以上版本,因为使用了动态链接库加载。

二 modsecurity介绍

       ModSecurity是apache web服务器的web应用程序防火墙。除了提供日志记录功能,还可以实时监控http流量,以便检测工具。Modsecurity还可以作为web***检测工具,允许您对web系统中发生的可疑事件作出反应。目标是增强web应用程序的安全性,防止web应用程序收到已知或未知的***。

三 安装:

3.1 准备编译环境

[root@nginx ~]# yum groupinstall "Development Tools"

 

[root@nginx ~]# yum install autoconf automake bzip2 flex gcc git httpd-devel libaio-devel libass-devel libjpeg-turbo-devel libpng12-devel libtheora-devel libtool libva-devel libvdpau-devel libvorbis-devel libxml2-devel libxslt-devel perl texi2html unzip zip openssl openssl-devel geoip geoip-devel

 

[root@nginx ~]# yum -y install gd-devel perl-ExtUtils-Embed gperftools-devel

3.2 安装libmodsecurity

[root@nginx opt]# mkdir nginx_waf

[root@nginx opt]# cd nginx_waf/

[root@nginx nginx_waf]# pwd

/opt/nginx_waf

[root@nginx nginx_waf]# git clone https://github.com/SpiderLabs/ModSecurity

[root@nginx nginx_waf]# cd ModSecurity/

[root@nginx ModSecurity]# git checkout -b v3/master origin/v3/master

[root@nginx ModSecurity]# sh build.sh

[root@nginx ModSecurity]# git submodule init

[root@nginx ModSecurity]# git submodule update

 [root@nginx ModSecurity]# ./configure

2.png

[root@nginx ModSecurity]# make && make install

安装完成的路径:

[root@mysql ModSecurity]# ls /usr/local/modsecurity/lib/

libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.2  pkgconfig

3.3 编译modsecurity-nginx

[root@mysql nginx_waf]# pwd

/opt/nginx_waf

[root@mysql nginx_waf]# git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

这个模块的编译需要nginx的源码,下载nginx源码:

[root@mysql nginx_waf]# wget http://nginx.org/download/nginx-1.14.0.tar.gz

[root@mysql nginx_waf]# tar -zxf nginx-1.14.0.tar.gz

查看编译参数,复制configure arguments:之后的备用:

[root@mysql ~]# nginx –V

3.png

开始编译:

[root@mysql nginx_waf]# cd nginx-1.14.0

[root@mysql nginx-1.14.0]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-dynamic-module=../ModSecurity-nginx

 

[root@mysql nginx-1.14.0]# make modules

 

编译完成的so文件位置:

[root@mysql nginx-1.14.0]# ls ./objs/ngx_http_modsecurity_module.so

./objs/ngx_http_modsecurity_module.so

3.4 下载默认配置文件

[root@mysql nginx-1.14.0]# cd ../

[root@mysql nginx_waf]# ls

ModSecurity  ModSecurity-nginx  nginx-1.14.0  nginx-1.14.0.tar.gz

[root@mysql nginx_waf]# mkdir modsec

[root@mysql nginx_waf]# cd modsec/

[root@mysql modsec]# wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended

[root@mysql modsec]# cp modsecurity.conf-recommended  /etc/nginx/modsecurity.conf

 

配置此文件《开启waf设置》:

4.png

3.5 配置核心规则

WAF进行web应用防护全靠规则的配置:

[root@mysql modsec]# cd ../

[root@mysql nginx_waf]# ls

modsec  ModSecurity  ModSecurity-nginx  nginx-1.14.0  nginx-1.14.0.tar.gz

[root@mysql nginx_waf]# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

 

[root@mysql nginx_waf]# cd owasp-modsecurity-crs/

[root@mysql owasp-modsecurity-crs]# mkdir /etc/nginx/conf

[root@mysql owasp-modsecurity-crs]# cp -R rules /etc/nginx/conf/

[root@mysql owasp-modsecurity-crs]# ls /etc/nginx/conf/

Rules

 

[root@mysql owasp-modsecurity-crs]# cp crs-setup.conf.example /etc/nginx/crs-setup.conf

[root@mysql owasp-modsecurity-crs]# ls /etc/nginx/crs-setup.conf

/etc/nginx/crs-setup.conf

 

 

 

启用规则配置:

5.png

3.6 nginx启用so链接库

[root@mysql nginx_waf]# cp ./nginx-1.14.0/objs/ngx_http_modsecurity_module.so /etc/nginx/modules/

[root@mysql nginx_waf]# ls /etc/nginx/modules/

ngx_http_modsecurity_module.so

 

修改配置文件:

6.png

7.png

注:在上图中

modsecurity on;

modsecurity_rules_file /etc/nginx/modsecurity.conf;

在server中表示全局启用,在location / {}中表示对单个应用启用。

移除此规则《否则报错》:

[root@mysql rules]# mv REQUEST-914-FILE-DETECTION.conf REQUEST-914-FILE-DETECTION.conf.bak

 

3.7 重启nginx

8.png

日志位置:

tail -f /var/log/modsec_audit.log