nginx配合modsecurity實現WAF功能

2022-07-18 02:30:19 字數 4594 閱讀 8836

modsecurity原本是apache上的一款開源waf,可以有效的增強web安全性,目前已經支援nginx和iis,配合nginx的靈活和高效,可以打造成生產級的waf,是保護和審核web安全的利器。

系統:centos 6.5 64位、 tengine 2.1.0, modsecurity 2.8.0

tengine

依賴關係:

tengine(nginx)依賴: pcre 、zlib、 openssl, 這三個包centos 6.5 系統源裡都有:

yum install zlib zlib-devel openssl openssl-devel  pcre pcre-devel
modsecurty依賴的包:pcre httpd-devel libxml2 apr

make在編譯standalone後,nginx編譯時可以通過"--add-module"新增modsecurity模組:

./configure --add-module=/root/modsecurity-2.8.0/nginx/modsecurity/  --prefix=/opt/tengine

make && make install

modsecurity傾向於過濾和阻止web危險,之所以強大就在於規則,owasp提供的規則是於社群志願者維護的,被稱為核心規則crs(corerules),規則可靠強大,當然也可以自定義規則來滿足各種需求。

git clone 

mv owasp-modsecurity-crs /opt/tengine/conf/

cd /opt/tengine/conf/owasp-modsecurity-crs && mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf

編輯modsecurity.conf 檔案,將secruleengine設定為 on

owasp-modsecurity-crs下有很多存放規則的資料夾,例如base_rules、experimental_rules、optional_rules、slr_rules,裡面的規則按需要啟用,需要啟用的規則使用include進來即可。

include owasp-modsecurity-crs/modsecurity_crs_10_setup.conf

include owasp-modsecurity-crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf

include owasp-modsecurity-crs/base_rules/modsecurity_crs_41_xss_attacks.conf

include owasp-modsecurity-crs/base_rules/modsecurity_crs_40_generic_attacks.conf

include owasp-modsecurity-crs/experimental_rules/modsecurity_crs_11_dos_protection.conf

include owasp-modsecurity-crs/experimental_rules/modsecurity_crs_11_brute_force.conf

include owasp-modsecurity-crs/optional_rules/modsecurity_crs_16_session_hijacking.conf

在需要啟用modsecurity的主機的location下面加入下面兩行即可:

modsecurityenabled on;  

modsecurityconfig modsecurity.conf;

下面是兩個示例配置,php虛擬主機:

server 

}

upstream負載均衡:

upstream 52os.net 

server

}

我們啟用了xss和sql注入的過濾,不正常的請求會直接返回403。以php環境為例,新建乙個phpinfo.php內容為:

<?php

phpinfo();

?>

在瀏覽器中訪問:

正常顯示。

and 1=1 返回403。

'xss'); 返回403。

說明sql注入和xss已經被過濾了

1.缺少apxs會報錯

configure: looking for apache module support via dso through apxs

configure: error: couldn't find apxs

apxs是乙個為apache http伺服器編譯和安裝擴充套件模組的工具,用於編譯乙個或多個源程式或目標**檔案為動態共享物件。

解決方法:

yum install httpd-devel
2.沒有pcre

configure: *** pcre library not found.

configure: error: pcre library is required

解決方法:

yum install pcre pcre-devel
3.沒有libxml2

configure: *** xml library not found.

configure: error: libxml2 is required

解決方法:

yum install  libxml2 libxml2-devel

tengine version: tengine/2.1.0 (nginx/1.6.2)

nginx: [warn] modsecurity: loaded apr do not match with compiled!

原因:modsecurity編譯時和載入時的apr版本不一致造成的,並且會有以下error.log

2015/01/26 02:04:18 [notice] 29036#0: modsecurity for nginx (stable)/2.8.0 () configured.

2015/01/26 02:04:18 [notice] 29036#0: modsecurity: apr compiled version="1.5.0"; loaded version="1.3.9"

2015/01/26 02:04:18 [warn] 29036#0: modsecurity: loaded apr do not match with compiled!

2015/01/26 02:04:18 [notice] 29036#0: modsecurity: pcre compiled version="7.8 "; loaded version="7.8 2008-09-05"

2015/01/26 02:04:18 [notice] 29036#0: modsecurity: libxml compiled version="2.7.6"

2015/01/26 02:04:18 [notice] 29036#0: status engine is currently disabled, enable it by set secstatusengine to on.

解決方法,移除低版本的apr (1.3.9)

yum remove apr
5.error.log中有: audit log: failed to lock global mutex

2015/01/26 04:15:42 [error] 61610#0: [client 10.11.15.161] modsecurity: audit log: failed to lock     

global mutex: permission denied [hostname ""] [uri "/i.php"] [unique_id "acacacacacacaca4dca7acac"]

secauditlogdirmode 0777

secauditlogfilemode 0550

secauditlogstoragedir /var/log/modsecurity

secauditlogtype concurrent

參考文章:

fastdfs 配合nginx 麻煩的

nginx可以做什麼?看完這篇你就懂了 ly csdn部落格 以自有的內容為操作,其它版本操作會不同 解壓縮nginx tar xvfz nginx 1.8.1.tar.gz 解壓縮 root ecs python01 fastdfs安裝 unzip fastdfs nginx module mas...

Apache安全 安裝啟用 ModSecurity

modsecurity apache modsecurity crs 2 安裝 1 啟用 mod unique id 模組 2 驗證伺服器安裝了最新版本libxml2函式庫 3 停止apache httpd 4 解壓 gzip d modsecurity apache 2.6.3.tag.gz ta...

frp配合nginx實現內網穿透

linux 執行 wget tar zxvf frp 0.24.0 linux amd64.tar.gz 解壓後 common 為父網域名稱 subdomain host youxiu326.xin frps服務埠 bind port 7000 web遠端訪問埠 frp客戶和服務端token相同才可...