WEB waf應用
Nginx+modsecurity WAF防火牆
ModSecurity是一個開源的跨平台Web應用程序防火牆(WAF)模塊。它被稱為WAF的“瑞士軍刀”,它使Web應用程序防御者能夠了解HTTP(S)流量,並提供強大的規則語言和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
1 git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
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.
步驟二:編譯添加新模塊
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.規則簡單測試
# 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"
- 在生產環境中,您可能會使用實際防止惡意流量的規則,例如免費的OWASP核心規則集。
modsecurity
和modsecurity_rules_file
指令添加到NGINX配置以啟用ModSecurity;



步驟六: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
# 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
4.重啟nginx
sudo nginx -s reload