2022-12-20 By junsuwhy
你會擔心你用 NGINX 架設的網站安不安全嗎?會不會很容易就被駭客用大量測試的方式找出漏洞呢?ModSecurity 是一個開源軟體,提供 NGINX 伺服器軟體一個完整的防護機制,搭配開源的規則 Core Rule Set 專案,可以防護大部份的駭客攻擊。
以下教學描述如何安裝、設定 ModSecurity 在 Debian 的 NGINX,如果您使用不同的作業系統,其中有些指令可能略有不同。
安裝 ModSecurity 在 NGINX
Compile ModSecurity 成 Nginx 的模組:
apt-get install 必要的套件
apt-get install -y -qq 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 libmodsecurity-dev libmodsecurity3
下載必要的程式碼
cd /usr/local/src && git clone -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git cd /usr/local/src && git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git NGX_VERSION=$(nginx -v 2>&1 | cut -s -f2 -d '/') wget -O /tmp/nginx-$NGX_VERSION.tar.gz http://nginx.org/download/nginx-$NGX_VERSION.tar.gz cd /usr/local/src && tar xzf /tmp/nginx-$NGX_VERSION.tar.gz
到 nginx 資料夾下面 compile 成模組的檔案,加到 nginx 的模組資料夾
NGX_VERSION=$(nginx -v 2>&1 | cut -s -f2 -d '/') cd /usr/local/src/nginx-$NGX_VERSION ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx make modules cp objs/ngx_http_modsecurity_module.so /usr/lib/nginx/modules
產生和設定各個需要用到的資料夾
mkdir -p /var/cache/modsec mkdir /etc/nginx/modsec mkdir /etc/nginx/modsec/data mkdir /var/log/modsec chmod 770 /var/log/modsec chgrp www-data /var/log/modsec
加入並重新執行 nginx 讓它讀到模組
把這行加到 /etc/nginx/nginx.conf
load_module modules/ngx_http_modsecurity_module.so;
並且在你要加上的站台的 config 檔中加入
modsecurity_rules ' SecRuleEngine ON '
然後重新啟動 nginx 看看
/etc/init.d/nginx restart
這時應該就正確啟動 ModSecurity 了
可能出現的錯誤
./configure 時跑出這結果:
configuring additional dynamic modules adding module in ../ModSecurity-nginx checking for ModSecurity library ... not found checking for ModSecurity library in /usr/local/modsecurity ... not found
解法:下這串
export MODSECURITY_INC="/usr/local/src/ModSecurity/headers/"
來自這裡
可能出現的錯誤2
出現這些訊息:
adding module in ../ModSecurity-nginx checking for ModSecurity library in "" and "/usr/local/src/ModSecurity/headers/" (specified by the MODSECURITY_LIB and MODSECURITY_INC env) ... found + ngx_http_modsecurity_module was configured checking for PCRE library ... not found checking for PCRE library in /usr/local/ ... not found checking for PCRE library in /usr/include/pcre/ ... not found checking for PCRE library in /usr/pkg/ ... not found checking for PCRE library in /opt/local/ ... not found ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.
解法: 前面的 libraries (apt-get) 沒有裝完整
後續要做的事情:
ModSecurity 提供一個防火牆的架構,但還缺一個「防火牆規則」的拼圖,叫 Core Rule Set ,我們會在別篇部落格說明如何使用,敬請期待。