#### nginx+ModSecurity构建防火墙 > ModSecurity是一个开源的、跨平台的Web应用防火墙,它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。 #### 安装依赖包 yum install -y pcre pcre-devel libxml2 libxml2-devel curl curl-devel httpd-devel yum install -y gcc make automake autoconf libtool yum install lmdb lmdb-devel ssdeep ssdeep-devel lua lua-devel yum install gcc-c++ flex bison yajl yajl-devel GeoIP-devel doxygen zlib-devel #### 下载ModSecurity-nginx,ModSecurity(v3版本)和服务器的nginx版本一致 git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity wget http://nginx.org/download/nginx-1.14.2.tar.gz #### 安装ModSecurity cd ModSecurity/ git submodule init git submodule update ./build.sh ./configure make make install #### 接下来要进行ModSecurity-nginx的操作 ##### 直接移动到/usr/local/nginx/modules下(nginx默认不带modules目录需要自己创建) mv ModSecurity-nginx/ /usr/local/nginx/modules/ #### 然后解压nginx tar -zxvf nginx-1.14.2.tar.gz cd nginx-1.14.2 > 由于我已经安装了nginx了,所以这里直接重新编译一下并且加上 --add-dynamic-module=/usr/local/nginx/modules/ModSecurity-nginx 如果想知道已经编译了那些模块可以用nginx -V 查看 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/home/lnmp/lnmp1.6/src/openssl-1.1.1b --with-openssl-opt=enable-weak-ssl-ciphers --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib --add-dynamic-module=/usr/local/nginx/modules/ModSecurity-nginx ##### 然后 make modules (这里不需要make install) cp objs/ngx_http_modsecurity_module.so /usr/local/nginx/modules ##### 移动ModSecurity下的文件 cp ../ModSecurity/unicode.mapping /usr/local/nginx/modsec/ ##### 由于已经安装了nginx,所以要移动一下启动文件,把编译的这个启动文件替换原有的启动文件(新安装可以省略) cp objs/nginx /usr/local/nginx/sbin/nginx #### 然后编辑nginx的配置文件 vi /usr/local/nginx/conf/nginx.conf #### 在 event的上面添加 load_module /usr/local/nginx/modules/ngx_http_modsecurity_module.so; #### 然后下载规则 git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git #### 进入文件夹移动文件 mv owasp-modsecurity-crs/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf cp -R owasp-modsecurity-crs/rules /usr/local/nginx/conf/ cp owasp-modsecurity-crs/crs-setup.conf.example /usr/local/nginx/conf/crs-setup.conf #### 然后编辑 vim /usr/local/nginx/conf/modsecurity.conf #### 添加 include crs-setup.conf include rules/*.conf ###### 把 SecRuleEngine DetectionOnly ###### 改为 SecRuleEngine on - SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。 - SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。 - SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。 - SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。 - SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。 - SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。 #### 编辑nginx配置文件加入 modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; #### 查看log日志(在modsecurity.conf中配置) cat /var/log/modsec_audit.log ###### 如果报错那么修改modsecurity.conf中的 SecUnicodeMapFile unicode.mapping 20127 ###### 改为 SecUnicodeMapFile /usr/local/nginx/modsec/unicode.mapping 20127 ##### 然后访问网址 url/?id=1 AND 1=1 (模拟简单的SQL注入) url/?search=<scritp>alert('xss');</script>(xss)