09月23日, 2020 358 views

心血来潮,想在nginx上配置个WAF,经多方搜索,最终选择ModSecurity.选择这个,一方面是因为开源,二方面是官方更新比较勤,而这类应用拼的就是防护规则~好吧,话不多说,开始正文.
ModSecurity是由Trustwave的SpiderLabs开发的开源,跨平台Web应用程序防火墙(WAF)。它具有强大的基于事件的编程语言,可提供针对Web应用程序的多种攻击保护,并允许HTTP流量监视,日志记录和实时分析。ModSecurity在全球范围内进行了10,000多次部署,是现有部署最广泛的WAF。
以debian9为例,运行以下命令
apt install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity cd ModSecurity git checkout -b v3/master origin/v3/master git submodule init git submodule update sh build.sh ./configure make make install
git clone https://github.com/SpiderLabs/ModSecurity-nginx
安装完安装ModSecurity还不行,你需要重新编译nginx,./configure添加以下一行
./configure --add-module=/path/ModSecurity-nginx
make && make install即可
或者
--with-compat --add-dynamic-module=/path/ModSecurity-nginx
mkdir -p /usr/local/nginx/modules
make modules
cp objs/ngx_http_modsecurity_module.so /usr/local/nginx/modules
我这里选择静态编译的方式,两种方式选一个即可.
mkdir /usr/local/nginx/conf/modsecurity
返回到ModSecurity源码目录
cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity/modsecurity.conf cp unicode.mapping /usr/local/nginx/conf/modsecurity wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.zip unzip v3.3.0.zip cd coreruleset-3.3.0 cp crs-setup.conf.example /usr/local/nginx/conf/modsecurity/crs-setup.conf cp -r rules /usr/local/nginx/conf/modsecurity
(可选)可以将/usr/local/nginx/conf/modsecurity/rules下的REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example与RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example的.example去掉,以后可将自己写的规则纳入其中~
找到nginx.conf文件,在末尾填入以下行,nginx -t没问题就可以service nginx reload即可.
modsecurity on;
modsecurity_rules_file /usr/local/nginx/conf/modsecurity/modsecurity.conf;
如果选择动态.so方式,你需要额外填以下代码到nginx.conf(顶部)
load_module modules/ngx_http_modsecurity_module.so;
vi /usr/local/nginx/conf/modsecurity/modsecurity.conf
修改 SecRuleEngine DetectionOnly 为On.至此,整个安装过程结束了.
默认规则不做改动的话wordpress肯定是不能正常运行的,你要要添加以下代码到crs-setup.conf(350行),其实就是开启REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf规则
SecAction \
"id:900130,\
phase:1,\
nolog,\
pass,\
t:none,\
setvar:tx.crs_exclusions_wordpress=1"
参考链接
Nginx + ModSecurity and OWASP CRS
ModSecurity