nginx+modsecurity:WAF防火牆


                               WEB waf應用

 

Nginx+modsecurity WAF防火牆

ModSecurity是一個開源的跨平台Web應用程序防火牆(WAF)模塊。它被稱為WAF瑞士軍刀,它使Web應用程序防御者能夠了解HTTPS)流量,並提供強大的規則語言和API來實現高級保護。

ModSecurity有以下作用:

SQL Injection (SQLi):阻止SQL注入

Cross Site Scripting (XSS):阻止跨站腳本攻擊

Local File Inclusion (LFI):阻止利用本地文件包含漏洞進行攻擊

Remote File Inclusione(RFI):阻止利用遠程文件包含漏洞進行攻擊

Remote Code Execution (RCE):阻止利用遠程命令執行漏洞進行攻擊

PHP Code Injectiod:阻止PHP代碼注入

HTTP Protocol Violations:阻止違反HTTP協議的惡意訪問

HTTPoxy:阻止利用遠程代理感染漏洞進行攻擊

Sshllshock:阻止利用Shellshock漏洞進行攻擊

Session Fixation:阻止利用Session會話ID不變的漏洞進行攻擊

Scanner Detection:阻止黑客掃描網站

Metadata/Error Leakages:阻止源代碼/錯誤信息泄露

Project Honey Pot Blacklist:蜜罐項目黑名單

GeoIP Country Blocking:根據判斷IP地址歸屬地來進行IP阻斷

 

准備環境:

1.克隆github存儲庫 :                                                             

        

   git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity

 

 

2.ModSecurity-nginx(nginx連接器)【需要編譯進NGINX模塊里】
1  git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

 

3.准備一個nginx壓縮包  :      
 wget http://nginx.org/download/nginx-1.10.2.tar.gz

  

 
步驟一:安裝依賴

 

yum -y install httpd-devel pcre pcre-devel libxml2-devel libxml2 git

 

 

(后面編譯的時候缺啥裝啥)

步驟二.進入ModSecurity目錄進行編譯

                   目錄內容如圖

 
#編譯安裝modsecurity
[root@xx ModSecurity]# git submodule init
 [root@xx ModSecurity]# git submodule update
[root@xx ModSecurity]# ./build.sh
 [root@xx ModSecurity]#./configure
[root@xx ModSecurity]# make
[root@xx ModSecurity]# make install

  


注意:在構建過程中忽略以下消息是安全的。即使它們出現,編譯也會完成並創建一個工作對象。
fatal: No names found, cannot describe anything.
步驟二:編譯添加新模塊   
--add-dynamic-module=$PATH【連接器編譯進入】
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

進入將解壓后的nginx包
1.[root@xx nginx-1.10.2]# ./configure --help 選擇你要編譯的模塊

2.如果你之前編譯過nginx,,也需要完整的編譯添加動態模塊
#由於之前我已經編譯好nginx1.10版本。
編譯添加 --add-dynamic-module=/tmp/ModSecurity-nginx

#【我自己測試的編譯模塊】
[root@xx nginx-1.10.2]# /opt/nginx/sbin/nginx -V
nginx version: nginx/1.10.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.1.0b  26 Sep 2016
TLS SNI support enabled
./configure --prefix=/opt/nginx --without-http_memcached_module \
--user=www --group=www --with-http_stub_status_module --with-http_ssl_module \ 
--with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.1.0b \
--with-zlib=/usr/local/src/zlib-1.2.11 --with-pcre=/usr/local/src/pcre-8.39 
[#上面測試僅供參考!]
make && make install

 

 
步驟三:生成ngx_http_modsecurity_module.so文件
#兩種生成辦法
第一種
./configure后 make && make install 如果是make && make install 會直接在編譯的nginx路徑生成一個 /opt/nginx/modules/ngx_http_modsecurity_module.so
第二種
./configure后
make modules【官方提供的命令】
如果是make modules則會在
/Modescurity/生成一個objs
#編譯完成后生成一個objs的目錄,目錄下面也會有一個ngx_http_modsecurity_module.so 文件
拷貝到
/nginx/modules下面 cp objs/ngx_http_modsecurity_module.so /opt/nginx/modules

 

 
步驟四:加載NGINX ModSecurity連接器動態模塊
 
load_module modules/ngx_http_modsecurity_module.so;

  

添加到/opt/nginx/conf/nginx.conf中

 

 
步驟五:配置啟動和測試ModSecurity
1.#設置適當的ModSecurity配置文件。在這里,
我們使用由ModSecurity的企業贊助商TrustWave Spiderlabs提供的推薦的ModSecurity配置。
mkdir /opt/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
2.#更改SecRuleEngine配置中的指令以從默認的“僅檢測”模式更改為主動丟棄惡意流量。 sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.
#或者vim配置【第七行】: [root@xx ~]# vim /opt/nginx/modsec/modsecurity.conf 7 SecRuleEngine On

 

 
 
 
 
1.規則簡單測試
配置一個或者多個規則,創建一個簡單的規則,該規則刪除了一個請求,其中調用的URL參數在其值中testparam包含字符串test.
將以下文本放在/opt/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"

  

 
 
  1. 在生產環境中,您可能會使用實際防止惡意流量的規則,例如免費的OWASP核心規則集
modsecuritymodsecurity_rules_file指令添加到NGINX配置以啟用ModSecurity;
3.進行curl命令,返回403狀態碼確認規則工作 
測試成功
 
報錯小提示:如果配置中提示unicode.mapping字段錯誤,把Modsecurity目錄下unicode.mapping復制到/opt/nginx/modsec/下面
 
 
步驟六:OWASP CRS規則與NGINX WAF配合使用
1.下載
#下載規則
wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.2.tar.gz
#解壓
$ tar -xzvf v3.0.2.tar.gz
#移動目錄【自定義】
$ sudo mv owasp-modsecurity-crs-3.0.2 /opt/
 

  

2.創建CRS-setup.conf文件的副本CRS-setup.conf.example 
#進入解壓目錄
cd /usr/local/owasp-modsecurity-crs-3.0.2
#創建副本
sudo cp crs-setup.conf.example crs-setup.conf

  

 
 
 
 3. 添加 Include 的主要NGINX WAF配置文件中的指令( /etc/nginx/modsec/main.conf ,在步驟4中創建 保護演示Web應用程序 )的CRS配置和規則來讀取。注釋掉文件中可能已存在的任何其他規則,例如 SecRule 在該部分中創建的示例指令。
# modsecurity.conf-recommended
#
# Edit to set SecRuleEngine On
Include "/opt/nginx/modsec/modsecurity.conf"

# Basic test rule
#SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403"
Include /opt/owasp-modsecurity-crs-3.0.2/crs-setup.conf
#Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-901-INITIALIZATION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
#Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-910-IP-REPUTATION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-912-DOS-PROTECTION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-913-SCANNER-DETECTION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-921-PROTOCOL-ATTACK.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/REQUEST-949-BLOCKING-EVALUATION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-950-DATA-LEAKAGES.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-980-CORRELATION.conf
Include /opt/owasp-modsecurity-crs-3.0.2/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
 
 

  

【tip:有些報錯仔細審審,owasp中的部分模板是.example結尾的,修改一下即可】
4.重啟nginx
 sudo nginx -s reload

  

 
 
 
參考文章
woasp--modsecurity-crs
nginx+modsecurity

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM