nginx安装ModSecurity-nginx防火墙

nginx和modsecurity3.X官方配置文档地址:https://www.nginx.com/blog/compiling-and-installing-modsecurity-for-open-source-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 
  1. 下载编译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
  1. 下载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
  1. 加载nginx连接器动态模块(注意需要添加到最上层)
    load_module modules/ngx_http_modsecurity_module.so;
    
  2. 配置,启用和测试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>