Nginx使用dpkg源码编译安装Mod_Security web防火墙

Github https://github.com/SpiderLabs/ModSecurity

官网 http://www.modsecurity.org/

安装相关依赖

# apt-get install build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev

下载并编译最新版的 Mod_Securite 

# cd /usr/src
# wget https://github.com/SpiderLabs/ModSecurity/archive/v2.9.0.tar.gz
# tar -zxvf v2.9.0.tar.gz

将Mod_Security编译成一个标准模块,以便Nginx编译成模块

# cd /usr/src/ModSecurity-2.8.0/
# ./autogen.sh
# ./configure --enable-standalone-module
# make

加入模块配置到 /opt/rebuildnginx/nginx-1.8.0/debain/rules 中的full段

–add-module=/opt/ModSecurity-2.9.0/nginx/modsecurity

QQ截图20150801143904

使用dpkg编译nginx 

cd /opt/rebuildnginx/nginx-1.6.2
sudo dpkg-buildpackage -b

编译完后,可以看到如下目录结构:

QQ截图20150801144136

安装 nginx 

# .deb files appear one level above the `nginx-1.6.2` directory
cd /opt/rebuildnginx
sudo dpkg --install nginx-full_1.6.2-5+trusty0_amd64.deb

安装 nginx-common

sudo dpkg --install nginx-common_1.8.0-1+trusty1_all.deb

注意,在这里编译nginx时遇到以下错误:

QQ截图20150801141223

提示需要使用 -fPIC 重新编译

relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

于是又重新编译了一次mod_securite,然后再次编译nginx成功

# CFLAGS="-fPIC" ./configure –enable-standalone-module –disable-mlogc 

参考 relocation R_X86_64_32 against `.rodata.str1.1' http://blog.sina.com.cn/s/blog_4156950c0102vcr9.html

导入 OWASP规则集: https://github.com/SpiderLabs/owasp-modsecurity-crs

复制modsecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。

# cp /usr/src/ModSecurity-2.9.0/modsecurity.conf-recommended /etc/nginx/conf.d/modsecurity.conf
# cp /usr/src/ModSecurity-2.9.0/unicode.mapping /etc/nginx/conf.d/

下载owasp规则集

# cd /opt
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master -O owasp.tar.gz
# tar -zxvf owasp.tar.gz

Modsecurity_crs_10_setup.conf是ModSecurity工作的主配置文件。导入默认规则集并重命名为 modsecurity.conf

# cd /opt/SpiderLabs-owasp-modsecurity-crs-ebe8790/
# cat modsecurity_crs_10_setup.conf.example >> /usr/local/nginx/conf/modsecurity.conf

分别拷贝以下配置规则集到 nginx 配置文件目录

# cd /opt/SpiderLabs-owasp-modsecurity-crs-ebe8790/base_rules
# cat *.conf >> /etc/nginx/conf.d/modsecurity.conf
# cp *.data /etc/nginx/conf.d/

在需要配置的 nginx server 虚拟主机下配置开启

location / {
    ModSecurityEnabled on;
    ModSecurityConfig modsecurity.conf;
    root   html;
    index  index.html index.htm;
}

ModSecurity核心规则集(CRS)提供以下类别的保户来防止攻击。

•HTTP Protection (HTTP防御) - HTTP协议和本地定义使用的detectsviolations策略。 
•Real-time Blacklist Lookups(实时黑名单查询) -利用第三方IP信誉。 
•HTTP Denial of Service Protections(HTTP的拒绝服务保护) -防御HTTP的洪水攻击和HTTP  
Dos 攻击。  
•Common Web Attacks Protection(常见的Web攻击防护) -检测常见的Web应用程序的安全攻击。  
•Automation Detection(自动化检测) -检测机器人,爬虫,扫描仪和其他表面恶意活动。  
•Integration with AV Scanning for File Uploads(文件上传防病毒扫描) -检测通过Web应用程序上传的恶意文件。  
•Tracking Sensitive Data(跟踪敏感数据) -信用卡通道的使用,并阻止泄漏。  
•Trojan Protection(木马防护) -检测访问木马。  
•Identification of Application Defects (应用程序缺陷的鉴定)-应用程序的错误配置警报。  
•Error Detection and Hiding(错误检测和隐藏) -伪装服务器发送错误消息。

问题一:默认开启 SecRequestBodyAccess On 使用POST请求会出现如下500错误:

no upstream configuration

貌似是一个没有解决的bug,暂时将 SecRequestBodyAccess On 先注释关掉

据说使用 源码编译没试 https://github.com/SpiderLabs/ModSecurity/tree/nginx_refactoring

参考 https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Installation_for_NGINX

参考 Compiling Nginx with ModSecurity on Ubuntu 14.04 LTS https://blog.stickleback.dk/nginx-modsec-on-ubuntu-14-04-lts/

参考 nginx配合modsecurity实现WAF功能 https://www.52os.net/articles/nginx-use-modsecurity-module-as-waf.html

参考配置ModSecurity防火墙与OWASP规则 http://drops.wooyun.org/tips/2614

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注