软件环境
Kylin Linux Advanced Server release V10 (Sword)
ModSecurity 3.0.9
nginx 1.21
安装依赖
yum install -y wget vim git libtool pcre pcre-devel gcc gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel libxml2 libxml2-devel lua lua-devel -y
安装ModSecurity
$ git clone https://github.com/SpiderLabs/ModSecurity.git
$ cd ModSecurity
$ git checkout v3/master
$ git submodule init
$ git submodule update
$ ./build.sh
$ ./configure
$ make
$ make install
将安装到 /usr/local/modsecurity/lib/libmodsecurity.so.3.0.9
。
安装nginx
$ yum install nginx -y
编译ModSecurity-nginx连接器
$ cd /root/nginx
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
使用nginx -V
查看已经安装的nginx编译选项。获取编译选项后,下载同版本的nginx源码,解压后进入nginx源码目录:
$ cd ModSecurity-nginx
#编译动态模块
$ ./configure <所有nginx -V看到的编译选项> --add-dynamic-module=/root/nginx/ModSecurity-nginx
#只编译模块
$ make modules
将编译后的连接器复制到nginx module目录中
$ cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/
在nginx主配置文件中加载模块:
$ vim /etc/nginx/nginx.conf
#在全局添加
load_module modules/ngx_http_modsecurity_module.so;
下载ModSecurity规则和配置
$ cd /root/nginx
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
$ cd owasp-modsecurity-crs
$ mv crs-setup.conf.example crs-setup.conf
将ModSecurity配置文件拷贝到/root/nginx
$ cp ModSecurity/modsecurity.conf-recommended /root/nginx/modsecurity.conf
加载ModSecurity规则
创建nginx配置文件加载规则
$ cd /root/nginx
$ vim main.conf
Include /root/nginx/modsecurity.conf
Include /root/nginx/owasp-modsecurity-crs/crs-setup.conf
Include /root/nginx/owasp-modsecurity-crs/rules/*.conf
在nginx配置目录下,创建配置文件,启用ModSecurity
$ vim /etc/nginx/conf.d/default.conf
modsecurity on;
modsecurity_rules_file /root/nginx/main.conf;
测试ModSecurity
默认情况下只会记录恶意请求,若想阻塞需要ModSecurity配置文件中配置:
#SecRuleEngine DetectionOnly chage to
SecRuleEngine On
reload nginx
测试nginx
可以从ModSecurity日志中看到恶意请求拦截信息: