nginx安装ModSecurity-nginx防火墙
nginx和modsecurity3.X官方配置文档地址:https://www.nginx.com/blog/compiling-and-installing-modsecurity-for-open-source-nginx
-
ModSecurity是一个开源的跨平台Web应用程序防火墙(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs开发。它具有强大的基于事件的编程语言,可以防止对Web应用程序的一系列攻击,并允许HTTP流量监控,日志记录和实时分析 - https://www.modsecurity.org
-
所述的ModSecurity-nginx的连接器是NGINX和libmodsecurity(ModSecurity的V3)之间的连接点。
-
OWASP ModSecurity核心规则集(CRS)是一组用于ModSecurity或兼容的Web应用程序防火墙的通用攻击检测规则。CRS旨在保护Web应用程序免受各种攻击,包括OWASP十大攻击,并且只需最少的虚假警报。该目录/data/nginx/owasp-modsecurity-crs包含owasp-modsecurity-crs存储库。
安装概述
- 从nginx官方存储库下载安装 从官网下载源码:https://nginx.org nginx版本1.11.5或更高版本(使用nginx动态模块)
- 安装依赖包
yum install gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre pcre-devel libxml2 libxml2-devel autoconf automake lmdb-devel ssdeep-devel ssdeep-libs lua-devel libmaxminddb-devel git
- 下载编译libmodsecurity
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
make install
-
下载nginx连接器源码,并编译成动态模块
克隆镜像
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
下载NGINX安装版本对应的源代码(即使只编译动态模块,也需要完整的源代码):
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxvf nginx-1.16.1.tar.gz
编译动态模块,并复制模块到标准目录
cd nginx-1.16.1
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx $ make modules
cp objs/ngx_http_modsecurity_module.so /data/nginx/modules
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx \
--prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module \ --with-http_image_filter_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_v2_module
- 加载nginx连接器动态模块(注意需要添加到最上层)
load_module modules/ngx_http_modsecurity_module.so;
- 配置,启用和测试ModSecurity
设置适当的ModSecurity配置文件。
$ mkdir /data/nginx/modsec
$ wget -P /data/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
$ mv /data/nginx/modsec/modsecurity.conf-recommended /data/nginx/modsec/modsecurity.conf
更改SecRuleEngine配置中的指令以从默认的“仅检测”模式更改为主动丢弃恶意流量。
$ sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /data/nginx/modsec/modsecurity.conf
配置一个或多个规则。出于本博客的目的,我们创建了一个简单的规则,该规则删除了一个请求,其中调用的URL参数在其值中testparam包含字符串test。将以下文本放在/data/nginx/modsec/main.conf中:
# From https://github.com/SpiderLabs/ModSecurity/blob/master/
# modsecurity.conf-recommended
#
# Edit to set SecRuleEngine On
Include "/data/nginx/modsec/modsecurity.conf"
# Basic test rule
SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403"
将modsecurity和modsecurity_rules_file指令添加到NGINX配置以启用ModSecurity
server {
# ...
modsecurity on;
modsecurity_rules_file /data/nginx/modsec/main.conf;
}
发出以下curl命令。该403状态代码确认规则工作
$ curl localhost?testparam=test
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.13.1</center>
</body>
</html>