前言:此次编译配置modsecurity基于一键安装包环境(centos、nginx等)适用于阿里云,整个过程遇到不少坑,网上关于modsecurity的信息还是太少,有的教程不全,有的教程不适用一键安装包,还有很多坑。为了避免更多人少走弯路,因此打算写这篇文章帮助更多的人用上modsecurity waf。

还有另一款 Nginx 下的免费防火墙 naxsi ,可根据实际需求选择安装 nginx下安装配置naxsi waf防火墙

此次编译安装modsecurity,基于原nginx增加功能,安装完之后保证之前的编译还是原样。。

第一步:备份原环境模块

使用 /../nginx -V 先查看原来都有哪些模块。
w1
然后把上面这些先复制下来以作备用。

第二步:安装依赖,阿里云的服务器可以直接使用yum安装或者升级

yum install -y gcc make automake autoconf libtool
yum install -y pcre pcre-devel libxml2 libxml2-devel curl curl-devel httpd-devel
第三步:下载编译安装modsecurity
git clone https://github.com/SpiderLabs/ModSecurity.git mod_security
cd mod_security
./autogen.sh  
./configure --enable-standalone-module
make

*(为了避免出错,可先将autogen.sh的权限改成777)

第四步:下载nginx
wget http://www.nginx.org/download/nginx-1.10.2.tar.gz

找到nginx-1.10.1/auto/lib/openssl/conf文件,将第31-35行编辑为 (注:此修改不是必须,如果下面的编译出错可尝试修改此项再编译)
w2
*(为下面编译openssl做准备)

第五步:重新编译pcre
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
tar -xvpzf pcre-8.38.tar.gz
cd pcre-8.38
sudo autoreconf -ivf 

*(configure要改为777权限)

第六步:重新编译openssl
wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar -xvpzf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
./config 
make

*(config要改为777权限)

第七步:编译nginx,增加modsecurity模块以及原有模块。
cd nginx-1.10.2
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-openssl=../openssl-1.0.2j --with-pcre=../pcre-8.38 --with-pcre-jit --with-ld-opt=-ljemalloc \
--add-module=../mod_security/nginx/modsecurity
make

*(configure要改为777权限,不要make install)

第八步:拷贝编译后的nginx文件覆盖现有的nginx文件
service nginx stop
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp objs/nginx /usr/local/nginx/sbin/nginx
service nginx start
第九步:查看现有编译模块
/../nginx -V

w3
如图,原有模块不变,增加modsecurity成功!

第十步:下载OWASP规则

下载地址:https://github.com/SpiderLabs/owasp-modsecurity-crs
将规则目录 owasp-modsecurity-crs-master 放置 /usr/local/nginx/conf/ 下,
然后将 owasp-modsecurity-crs-master 目录下的 modsecurity_crs_10_setup.conf.example 改名为 modsecurity_crs_10_setup.conf 。

第十一步:启用OWASP规则

复制modsecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf
编辑modsecurity.conf 文件,将SecRuleEngine设置为 on ,并将你需要的规则导入进来:

Include modsecurity-crs/modsecurity_crs_10_setup.conf
Include modsecurity-crs/base_rules/modsecurity_crs_35_bad_robots.conf
Include modsecurity-crs/base_rules/modsecurity_crs_40_generic_attacks.conf
Include modsecurity-crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf
Include modsecurity-crs/base_rules/modsecurity_crs_41_xss_attacks.conf
Include modsecurity-crs/base_rules/modsecurity_crs_42_tight_security.conf
Include modsecurity-crs/base_rules/modsecurity_crs_45_trojans.conf

*(如果你的网站使用了CDN服务,并且间歇性打不开,可能需要删除 modsecurity_crs_11_proxy_abuse.conf 这条恶意代理IP、IP黑名单规则)

第十二步:配置nginx
location \ {
    ModSecurityEnabled on;
    ModSecurityConfig modsecurity.conf; 
....其他配置
}  </code></pre>