一 环境
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
[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
开始编译:
[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设置》:
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
启用规则配置:
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
修改配置文件:
注:在上图中
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
日志位置:
tail -f /var/log/modsec_audit.log