用 ModSecurity 讓你的 NGINX 伺服器更加安全

你會擔心你用 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 ,我們會在別篇部落格說明如何使用,敬請期待。