基于 Nginx + ModSecurity V3 实现对 web 流量的安全访问控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 Nginx + ModSecurity V3 实现对 web 流量的安全访问控制相关的知识,希望对你有一定的参考价值。

参考技术A 基于 SecRules 的 web 流量处理引擎, 提供了加载/解释与 ModSecurity SecRules 格式编写的规则的能力

1、安装 libmodsecurity 所需依赖库

2、下载编译安装 libmodsecurity v3.05

nginx 和 libmodsecurity 之间的连接器, 其实就是一个第三方 Nginx 模块, Nginx 可以通过静态或动态方式加载该模块

1、Nginx 的编译安装

2、添加 modsecurity 相关配置文件 modsecurity.conf, main.conf

3、完整的 Nginx 配置文件如下

OWASP ModSecurity 核心规则集 (CRS) 是一组通用攻击检测规则, 用于 ModSecurity 或兼容的 Web 应用程序防火墙; CRS 旨在保护 Web 应用程序免受包括 OWASP 前十名在内的各种攻击, 同时将错误警报降至最低

1、在 Modsecurity 中启用 OWASP 核心规则集

1、请求参数 x 不包含字符串 test 的请求, 返回状态 200 http://192.168.31.66/?x=wyun

2、请求参数 x 包含非法字符串 test 的请求, 返回状态 403 http://192.168.31.66/?x=wyuntest

Nginx+Modsecurity实现WAF

一.软件介绍

ModSecurity是一个免费、开源的Web(apache、nginx、IIS)模块,可以充当Web应用防火墙(WAF)。ModSecurity是一个入侵探测与阻止的引擎.它主要是用于Web应用程序所以也可以叫做Web应用程序防火墙.ModSecurity的目的是为增强Web应用程序的安全性和保护Web应用程序避免遭受来自已知与未知的攻击

OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,可以根据自己的需求选择不同的规则,当然ModSecurity还有商用的规则

目前ModSecurity正在测试环境测试使用,以下操作是在nginx下添加modsecurity模块来实现WAF的安装配置步骤,

二.准备工作

系统版本:Centos6

Nginx/1.10.0 最新稳定版本:http://nginx.org/download/nginx-1.10.0.tar.gz

ModSecurity/2.9.1最新稳定版本:https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz

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

三.安装配置

3.1安装依赖包

# yum installgcc make libxml2 libxml2-devel httpd-devel pcre-devel curl-devel libtool –y


3.2编译modsecurity

# tar xfmodsecurity-2.9.1.tar.gz
# cd modsecurity-2.9.1
# ./autogen.sh
# ./configure--enable-standalone-module --disable-mlogc
# make


3.3 编译nginx并添加modsecurity模块

# tar xf nginx-1.10.0.tar.gz
# cd nginx-1.10.0
# ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/  --prefix=/home/data/nginx
# make
# make install


3.4配置规则

3.4.1下载OWASP规则

# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs
# cp -aowasp-modsecurity-crs /home/data/nginx/conf/
# cd/home/data/nginx/conf/owasp-modsecurity-crs/
# mv modsecurity_crs_10_setup.conf.examplemodsecurity_crs_10_setup.conf


 

3.3.2 启动owasp规则

复制modsecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到nginx的conf目录下

#cpmodsecurity.conf-recommended unicode.mapping  /home/data/nginx/conf/
#cd/home/data/nginx/conf  &&  mv modsecurity.conf-recommended  modsecurity.conf


编辑modsecurity.conf 文件,将SecRuleEngine设置为 on,并添加规则

# vimmodsecurity.conf
SecRuleEngine On
# personal  rules
Includeowasp-modsecurity-crs/modsecurity_crs_10_setup.conf
Includeowasp-modsecurity-crs/base_rules/modsecurity_crs_41_xss_attacks.conf
Includeowasp-modsecurity-crs/base_rules/modsecurity_crs_40_generic_attacks.conf


:规则根据自己的需求添加,base_rules中的sql攻击过滤规则在测试中有问题暂时没有启用

3.5 配置nginx

在nginx配置文件中 需要启用的server配置下添加以下两行,然后重启nginx服务

ModSecurityEnabledon;  
ModSecurityConfigmodsecurity.conf;


四.测试

4.1 Modsecurity模块启用前

技术分享

4.2 Modsecurity模块启用后访问出现403错误

技术分享


:xss跨站攻击漏洞测试(此漏洞是阿里云发现)

 

五.规则集说明

5.1基础规则集

modsecurity_crs_20_protocol_violations.confHTTP协议规范相关规则

modsecurity_crs_21_protocol_anomalies.confHTTP协议规范相关规则

modsecurity_crs_23_request_limits.confHTTP协议大小长度限制相关规则

modsecurity_crs_30_http_policy.confHTTP协议白名单相关规则

modsecurity_crs_35_bad_robots.conf恶意扫描器与爬虫规则

modsecurity_crs_40_generic_attacks.conf常见的攻击例如命令执行,代码执行,注入,文件包含、敏感信息泄露、会话固定、HTTP响应拆分等相关规则

modsecurity_crs_41_sql_injection_attacks.confSQL注入相关规则(竟然有一条MongoDB注入的规则,很全)

modsecurity_crs_41_xss_attacks.confXSS相关规则

modsecurity_crs_42_tight_security.conf目录遍历相关规则

modsecurity_crs_45_trojans.confwebshell相关规则

modsecurity_crs_47_common_exceptions.confApache异常相关规则

modsecurity_crs_49_inbound_blocking.conf协同防御相关规则

modsecurity_crs_50_outbound.conf检测response_body中的错误信息,警告信息,列目录信息

modsecurity_crs_59_outbound_blocking.conf协同防御相关规则

modsecurity_crs_60_correlation.conf协同防御相关规则

5.2 SLR规则集

来自确定APP的PoC,不会误报,检测方法是先检查当前请求的文件路径是否出现在data文件中,若出现再进行下一步测试,否则跳过该规则集的检测

modsecurity_crs_46_slr_et_joomla_attacks.confJOOMLA应用的各种漏洞规则

modsecurity_crs_46_slr_et_lfi_attacks.conf各种APP的本地文件包含相关规则

modsecurity_crs_46_slr_et_phpbb_attacks.confPHPBB应用的各种漏洞规则

modsecurity_crs_46_slr_et_rfi_attacks.conf各种APP的远程文件包含相关规则

modsecurity_crs_46_slr_et_sqli_attacks.conf各种APP的SQL注入相关规则

modsecurity_crs_46_slr_et_wordpress_attacks.confWORDPRESS应用的各种漏洞规则

modsecurity_crs_46_slr_et_xss_attacks.conf各种APP的XSS相关规则

 

5.3可选规则集

modsecurity_crs_10_ignore_static.conf静态文件不过WAF检测的相关规则

modsecurity_crs_11_avs_traffic.confAVS(授权的漏洞扫描器)的IP白名单规则

modsecurity_crs_13_xml_enabler.conf请求体启用XML解析处理

modsecurity_crs_16_authentication_tracking.conf记录登陆成功与失败的请求

modsecurity_crs_16_session_hijacking.conf会话劫持检测

modsecurity_crs_16_username_tracking.conf密码复杂度检测

modsecurity_crs_25_cc_known.confCreditCard验证

modsecurity_crs_42_comment_spam.conf垃圾评论检测

modsecurity_crs_43_csrf_protection.conf与modsecurity_crs_16_session_hijacking.conf联合检测,使用内容注入动作append注入CSRF Token

modsecurity_crs_46_av_scanning.conf使用外部脚本扫描病毒

modsecurity_crs_47_skip_outbound_checks.confmodsecurity_crs_10_ignore_static.conf的补充

modsecurity_crs_49_header_tagging.conf将WAF规则命中情况配合Apache RequestHeader指令注入到请求头中,以供后续应用进一步处理

modsecurity_crs_55_marketing.conf记录MSN/Google/Yahoorobot情况

 

5.4实验性规则集

modsecurity_crs_11_brute_force.conf防御暴力破解相关规则

modsecurity_crs_11_dos_protection.conf防DoS攻击相关规则

modsecurity_crs_11_proxy_abuse.conf检测X-Forwarded-For是否是恶意代理IP,IP黑名单

modsecurity_crs_11_slow_dos_protection.confSlow HTTP DoS攻击规则

modsecurity_crs_25_cc_track_pan.conf检测响应体credit card信息

modsecurity_crs_40_http_parameter_pollution.conf检测参数污染

modsecurity_crs_42_csp_enforcement.confCSP安全策略设置

modsecurity_crs_48_bayes_analysis.conf使用外部脚本采取贝叶斯分析方法分析HTTP请求,区分正常与恶意请求

modsecurity_crs_55_response_profiling.conf使用外部脚本将响应体中的恶意内容替换为空

modsecurity_crs_56_pvi_checks.conf使用外部脚本检测REQUEST_FILENAME是否在osvdb漏洞库中

modsecurity_crs_61_ip_forensics.conf使用外部脚本收集IP的域名、GEO等信息

modsecurity_crs_40_appsensor_detection_point_2.0_setup.confAPPSENSOR检测设置文件


本文出自 “Just do myself” 博客,请务必保留此出处http://liubin0505star.blog.51cto.com/5550456/1784499

以上是关于基于 Nginx + ModSecurity V3 实现对 web 流量的安全访问控制的主要内容,如果未能解决你的问题,请参考以下文章

Nginx+Modsecurity实现WAF

在NGINX OSS中编译ModSecurity

nginx在动态modsecurity模块下的waf实现方式

带有 NGINX 的 WAF owasp modsecurity crs 中的“SecCollectionTimeout 尚不支持”

ningx配置ModSecurity重启出现兼容性问题:ModSecurity: Loaded PCRE do not match with compiled!的解决方法

|NO.Z.00004|——————————|^^ 构建 ^^|——|Nginx&Nginx.V1.16&部署&降级&升级.V3|