ModSecurity是一个开源的跨平台Web应用程序防火墙(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs开发。作为WAF产品,ModSecurity专门关注HTTP流量,当发出HTTP请求时,ModSecurity检查请求的所有部分,如果请求是恶意的,它会被阻止和记录。
优势:
完美兼容nginx,是nginx官方推荐的WAF
支持OWASP规则
3.0版本比老版本更新更快,更加稳定,并且得到了nginx、Inc和Trustwave等团队的积极支持
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。我们可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证
ModSecurity的功能:
优势
SQL Injection (SQLi):阻止SQL注入
Cross Site ing (XSS):阻止跨站脚本攻击
Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
PHP Code Injectiod:阻止PHP代码注入
HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
HTTPoxy:阻止利用远程代理感染漏洞进行攻击
Shellshock:阻止利用Shellshock漏洞进行攻击
Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
Scanner Detection:阻止黑客扫描网站
Metadata/Error Leakages:阻止源代码/错误信息泄露
Project Honey Pot Blacklist:蜜罐项目黑名单
GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断
SQL Injection (SQLi):阻止SQL注入
Cross Site ing (XSS):阻止跨站脚本攻击
Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
PHP Code Injectiod:阻止PHP代码注入
HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
HTTPoxy:阻止利用远程代理感染漏洞进行攻击
Shellshock:阻止利用Shellshock漏洞进行攻击
Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
Scanner Detection:阻止黑客扫描网站
Metadata/Error Leakages:阻止源代码/错误信息泄露
Project Honey Pot Blacklist:蜜罐项目黑名单
GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断
劣势:
不支持检查响应体的规则,如果配置中包含这些规则,则会被忽略,nginx的的sub_filter指令可以用来检查状语从句:重写响应数据,OWASP中相关规则是95X。
不支持OWASP核心规则集DDoS规则REQUEST-912-DOS- PROTECTION.conf,nginx本身支持配置DDoS限制
不支持在审计日志中包含请求和响应主体
不支持检查响应体的规则,如果配置中包含这些规则,则会被忽略,nginx的的sub_filter指令可以用来检查状语从句:重写响应数据,OWASP中相关规则是95X。
不支持OWASP核心规则集DDoS规则REQUEST-912-DOS- PROTECTION.conf,nginx本身支持配置DDoS限制
不支持在审计日志中包含请求和响应主体
modsecurity3.0部署
https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz
安装系统依赖包
yum install -y geoip geoip-devel yajl-devel lmdb-devel ssdeep-devel lua lua-devel
./configure --prefix=/usr/local/modsecurity &&make &&make install
安装modsecurity-nginx 连接器
https://github.com/SpiderLabs/ModSecurity-nginx/releases/download/v1.0.1/modsecurity-nginx-v1.0.1.tar.gz
./configure --prefix=/usr/local/nginx ..... --add-dynamic-module=/root/modsecurity-nginx-v1.0.1
make modules
make
make install
cp objs/ngx_http_modsecurity_module /usr/local/nginx/modules/
cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp unicode.mapping /usr/local/nginx/conf/
vim nginx.conf 顶部添加
load_module modules/ngx_http_modsecurity_module.so;
下载owasp规则https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz
将rules下文件拷贝到/usr/local/nginx/conf/rules/ 将两个后缀为example的文件 去掉后缀
cp crs-setup.conf.example /usr/local/nginx/conf/modsec/crs-setup.conf
vim /usr/local/nginx/conf/modsecurity.conf 设置 SecRuleEngine on
编辑/usr/local/nginx/conf/main.conf
Include /usr/local/nginx/conf/modsecurity.conf
Include /usr/local/nginx/conf/modsec/crs-setup.conf
Include /usr/local/nginx/conf/rules/*.conf
server项添加
modsecurity on;
modsecurity_rules_file /usr/local/nginx/conf/main.conf;
添加网址白名单
vim REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
SecRule REQUEST_URI "@contains /post.php" "phase:1,id:1005,log,pass,ctl:ruleEngine=off"