NGINX 搭配 ModSecurity - Debian
BUBU 因公司新站台是使用 Nginx 服務那需要搭配 ModSecurity 資安套件來阻擋惡意的攻擊
運行環境
環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境: Debian 11、12
- Web 服務: Nginx 1.27.2
安裝過程
-
安裝必要套件
- Debian 11
apt-get install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev
- Debian 12
apt-get install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev
-
下載最新版的 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
- 編譯套件(這編譯會需要一段時間)
make && make install
- 回到上層
cd ..
- 如果在建置過程中出現此訊息直接略過即可,根據官方說明是不會影響到後面服務
fatal: No names found, cannot describe anything.
- 下載 For Nginx 使用套件
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
- 下載與您對應版本 Nginx 套件,如您是參考本篇安裝可以跳過
git clone https://github.com/nginx/nginx.git
- 開始建構與 Nginx 連動元件
cd nginx
auto/configure --with-compat --add-dynamic-module=../ModSecurity-nginx
- 執行編譯模組
make modules
- 將編譯好的模組複製到 Nginx 模組目錄下
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
- 編輯 Nginx 全域設定檔載入該模組
vim /etc/nginx/nginx.conf
load_module modules/ngx_http_modsecurity_module.so;
- 建立 ModSecurity 專用目錄
mkdir /etc/nginx/modsec
- 下載官方建議參數做使用
wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
- 重新修改設定檔名稱
mv /etc/nginx/modsec/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
- 回到您剛剛下載好的 ModSecurity 那層複製該檔到
unicode.mapping
modsec 目錄下
cp ModSecurity/unicode.mapping /etc/nginx/modsec
- 修改參數
SecRuleEngine
原只有監控模組改為阻檔模組
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
- 建立 modsecurity 設定檔
vim /etc/nginx/modsec/main.conf
# From https://github.com/SpiderLabs/ModSecurity/blob/master/
# modsecurity.conf-recommended
#
# Edit to set SecRuleEngine On
Include "/etc/nginx/modsec/modsecurity.conf"
# Basic test rule
SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403"
- 在您的服務設定檔裡面新增加這兩行參數
server {
# ...
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}
- 測試剛剛所寫的測試規則是否有生效
curl localhost?testparam=test
- 結果如下
規則設定
- 進到
modsec
目錄
cd /etc/nginx/modsec
- 下載新版的規則
git clone --depth 1 https://github.com/coreruleset/coreruleset.git
- 載入您想要使用規則
vim /etc/nginx/modsec/modsecurity.conf
在最後面新增
Include "/etc/nginx/modsec/coreruleset/rules/*.conf"