yum install -y wget epel-release gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel lmdb-devel libxml2-devel ssdeep-devel lua-devel libtool autoconf automake
安装 ModSecurity
$ 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 --with-maxmind=/usr/local
$ make & make install
出现 fatal: No names found, cannot describe anything. 报错忽略即可
如果连接不上 git 可以使用 代理服务
git clone –depth 1 -b v3/master –single-branch ghproxy.com/github.com/Spi...
下载用于 ModSecurity 的 nginx 连接器
$ git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
确定当前 nginx 版本
$ nginx -v
nginx version: nginx/1.20.1
下载与安装版本对应的源代码
$ wget http://nginx.org/download/nginx-1.20.1.tar.gz
$ tar -zxvf nginx-1.20.1.tar.gz
编译动态模块,复制到 nginx 模块标准目录
# 查看当前 nginx 编译参数
$ nginx -V
# 复制 nginx 所有参数,删除所有 --add-module 选项
$ ./configure --add-dynamic-module=../ModSecurity-nginx ...
$ make modules
$ cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/
如果需要 openssl,下载 www.openssl.org/source/openssl-1.1... 解压之后再修改 --with-openssl 参数路径
修改 nginx 配置文件,在主配置文件 events 上加入一行,具体路径根据自己 nginx 模块路径来定
load_module modules/ngx_http_modsecurity_module.so;
ModSecurity 配置
建立 ModSecurity 配置文件夹
$ cd /etc/nginx
$ mkdir modesc
# 将默认配置拷贝进去,从 ModSecurity 安装目录
$ cp /root/ModSecurity/modsecurity.conf-recommended /etc/nginx/modesc/modsecurity.conf
$ cp /root/ModSecurity/unicode.mapping /etc/nginx/modesc/
$ vim modsecurity.conf
# 将 SecRuleEngine 修改为 On
SecRuleEngine On
# 在之后添加一行,日志改为 json 格式
SecAuditLogFormat JSON
创建 ModSecurity 主配置文件
$ vim /etc/nginx/modsec/main.conf
# 写入如下内容
include modsecurity.conf
# 测试内容,测试完毕删除
SecRule ARGS:testparam "@contains test" "id:1234,deny,log,status:403"
修改 nginx vhost 配置测试一下
server {
...
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
...
}
$ nginx -s reload
# 返回 403 Forbidden 说明配置成功
$ curl -D http://localhost/foo?testparam=test
启用 OWASP CRS 规则
github 地址
$ cd /etc/nginx/modsec
$ wget -O coreruleset-3.3.2.tar.gz https://codeload.github.com/coreruleset/coreruleset/tar.gz/refs/tags/v3.3.2
$ tar -zxvf coreruleset-3.3.2.tar.gz
$ cd coreruleset-3.3.2
$ cp crs-setup.conf.example crs-setup.conf
在 modsec/main.conf 配置文件里引入 CRS 配置和规则
$ vim /etc/nginx/modsec/main.conf
include coreruleset-3.3.2/crs-setup.conf
include coreruleset-3.3.2/rules/*.conf
测试 CRS, 返回 403 Forbidden,说明 WAF 防护已经生效,此处匹配的规则是 user-agent 中不能包含漏洞扫描器名字
$ curl -H "User-Agent: Nikto" http://localhost