Nginx 防火牆 ModSecurity 安裝教程

cestbon發表於2021-11-09

官方文件

安裝依賴

$ 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 

安裝最新版 libmaxminddb

github 地址

$ wget https://github.com/maxmind/libmaxminddb/releases/download/1.6.0/libmaxminddb-1.6.0.tar.gz
$ tar -zxvf libmaxminddb-1.6.0.tar.gz
$ ./configure
$ make
$ make check
$ make install
$ ldconfig

安裝 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 可以使用 代理服務

下載用於 ModSecuritynginx 聯結器

$ 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
$ cd nginx-1.20.1

編譯動態模組,複製到 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

誤報處理

檢視文件 搜尋 Step 7: First Encounter with False Alerts

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章