Nginx 配置 ModSecurity 網(wǎng)絡(luò)應(yīng)用防火墻實(shí)現(xiàn)
OSI(開放系統(tǒng)互聯(lián)) 是最常被網(wǎng)絡(luò)相關(guān)討論引用的網(wǎng)絡(luò)流量框架之一。當(dāng)數(shù)據(jù)包通過第 6 層(表示層)移動(dòng)到第 7 層(應(yīng)用層)時(shí),它會(huì)進(jìn)行解密或解碼操作。這些操作可能會(huì)因異常解碼和解釋而產(chǎn)生漏洞,而這些漏洞可能被利用來打破標(biāo)準(zhǔn)應(yīng)用上下文。注入就是這種漏洞的一種類型,而且因?yàn)閭鹘y(tǒng)的 IDS/IPS 設(shè)備無法應(yīng)對(duì)這些威脅,所以其長(zhǎng)時(shí)間以來一直是人們特別關(guān)注的問題。
ModSecurity 簡(jiǎn)介
ModSecurity 本質(zhì)上就是 網(wǎng)絡(luò)應(yīng)用防火墻web application firewall(WAF)引擎。它與 Apache、IIS 和 Nginx 兼容,并由第三方公司維護(hù)。該防火墻會(huì)將一份規(guī)則列表與由 Web 服務(wù)器/代理提供的 HTTP 頭流進(jìn)行交叉引用。目前這個(gè)倉(cāng)庫(kù)已經(jīng)被簡(jiǎn)化,只包含主要的 LibModSecurity 庫(kù)。你可以直接在自己的服務(wù)器實(shí)現(xiàn)中調(diào)用這個(gè)庫(kù),或通過特定編程語言的封裝進(jìn)行調(diào)用。
其母公司的支持計(jì)劃于 2024 年 7 月 1 日結(jié)束,之后這個(gè)項(xiàng)目將由開源社區(qū)維護(hù)。
安裝 Nginx 連接器
Nginx 連接器 是一個(gè) Nginx 動(dòng)態(tài)模塊,可以通過 Fedora 包 nginx-mod-modsecurity 進(jìn)行安裝。它依賴于 libmodsecurity.so,所以在這個(gè)使用場(chǎng)景中,這個(gè)包本身就是防火墻。
[user@fedora ~]$ sudo dnf install -y nginx nginx-mod-modsecurity [user@fedora ~]$ rpm -qR nginx-mod-modsecurity config(nginx-mod-modsecurity) = 1.0.3-3.fc38 libc.so.6(GLIBC_2.4)(64bit) libmodsecurity.so.3()(64bit) nginx(abi) = 1.24.0 nginx-filesystem ...
安裝完成后,你會(huì)見到連接器在 /etc/nginx 中添加了一些重要的文件。
[user@fedora ~]$ rpm -ql nginx-mod-modsecurity /etc/nginx/modsecurity.conf # waf 配置 /etc/nginx/nginx.conf.modsecurity # nginx 示例配置 /usr/lib64/nginx/modules/ngx_http_modsecurity_module.so /usr/share/nginx/modules/mod-modsecurity.conf /usr/share/doc/nginx-mod-modsecurity/README.md ...
通過提供一些額外的配置指令,連接器對(duì) Nginx 進(jìn)行了擴(kuò)展。下面的部分將演示 nginx.conf.modsecurity 文件中一些示例指令。指令的完整列表可以在 README.md 文件或項(xiàng)目的 GitHub 頁(yè)面找到。
啟動(dòng)網(wǎng)絡(luò)應(yīng)用防火墻
nginx.conf.modsecurity 是我們將要運(yùn)行的 Nginx 配置。解開如下所示的 modsecurity
[user@fedora ~]$ sudo sed -i 's/#modsec/modsec/g' /etc/nginx/nginx.conf.modsecurity
[user@fedora ~]$ grep -C2 modsecurity /etc/nginx/nginx.conf.modsecurity
# 如有需要,啟用 ModSecurity WAF
modsecurity on;
# 如有需要,加載 ModSecurity CRS
modsecurity_rules_file /etc/nginx/modsecurity.conf;
在 shell 中啟動(dòng)服務(wù)器并查看日志,確保在 modsecurity.conf 加載了七個(gè)默認(rèn)規(guī)則。
[user@fedora ~]$ sudo nginx -c /etc/nginx/nginx.conf.modsecurity [user@fedora ~]$ head /var/log/nginx/error.log 2023/10/21 23:55:09 [notice] 46218#46218: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/7/0) 2023/10/21 23:55:09 [notice] 46218#46218: using the "epoll" event method 2023/10/21 23:55:09 [notice] 46218#46218: nginx/1.24.0 2023/10/21 23:55:09 [notice] 46218#46218: OS: Linux 6.5.7-200.fc38.x86_64
通過發(fā)送一些不符合 Content-Type 頭格式的數(shù)據(jù)來測(cè)試默認(rèn)規(guī)則。
[user@fedora ~]$ curl -X POST http://localhost -H "Content-Type: application/json" --data "<xml></xml>" [user@fedora ~]$ tail /var/log/modsec_audit.log ... ---rH5bFain---H-- ModSecurity: Warning. Matched "Operator `Eq' with parameter `0' against variable `REQBODY_ERROR' (Value: `1' ) [file "/etc/nginx/modsecurity.conf"] [line "75"] [id "200002"] [rev ""] [msg "Failed to parse request body."] [data "JSON parsing error: lexical error: invalid char in json text.\n"] [severity "2"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "10.0.2.100"] [uri "/"] [unique_id "169795900388.487044"] [ref "v121,1"]
用 OWASP 核心規(guī)則集擴(kuò)展你的網(wǎng)絡(luò)應(yīng)用防火墻
默認(rèn)的 Nginx 連接器帶有七條規(guī)則。OWASP Core Rule Set v3.3.5 則更為詳盡,涵蓋了許多場(chǎng)景。
復(fù)制并提取規(guī)則的存檔。
[user@fedora ~]$ curl -fSL https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz --output /tmp/v3.3.5.tar.gz [user@fedora ~]$ sudo tar -C /etc/nginx -xvf /tmp/v3.3.5.tar.gz [user@fedora ~]$ tree -L 1 /etc/nginx/ /etc/nginx/ ├── conf.d ├── default.d ├── modsecurity.conf # waf 配置 ├── nginx.conf ├── nginx.conf.modsecurity # nginx 啟用 waf ├── coreruleset-3.3.5 ├ ├── rules # 規(guī)則目錄 ├ ... ├ ...
現(xiàn)在,你在 Nginx 配置文件夾中有了一個(gè)包含所有當(dāng)前 OWASP 規(guī)則的 rules 目錄。接下來,讓 Nginx 知道這些規(guī)則。以下操作指南來源于 OWASP INSTALL 文件。
創(chuàng)建一個(gè) crs.conf 文件,并在全局網(wǎng)絡(luò)應(yīng)用防火墻配置文件( modsecurity.conf )中包含所有相關(guān)的配置文件。
[user@fedora ~]$ sudo cp /etc/nginx/coreruleset-3.3.5/crs-setup.conf.example /etc/nginx/coreruleset-3.3.5/crs.conf [user@fedora ~]$ echo -e "\nInclude /etc/nginx/coreruleset-3.3.5/crs.conf" | sudo tee -a /etc/nginx/modsecurity.conf [user@fedora ~]$ echo -e "\nInclude /etc/nginx/coreruleset-3.3.5/rules/*.conf" | sudo tee -a /etc/nginx/modsecurity.conf [user@fedora ~]$ tail /etc/nginx/modsecurity.conf Include /etc/nginx/coreruleset-3.3.5/crs.conf Include /etc/nginx/coreruleset-3.3.5/rules/*.conf
根據(jù)文檔,包含這些文件的順序很重要。上面的 tee 的命令將新的 Include 行放在了 modsecurity.conf 文件的末尾。現(xiàn)在,用這個(gè)新配置重啟 Nginx。
[user@fedora ~]$ sudo nginx -s stop && sudo nginx -c /etc/nginx/nginx.conf.modsecurity [user@fedora ~]$ tail /var/log/nginx/error.log 2023/10/22 10:53:23 [notice] 202#202: exit 2023/10/22 10:53:50 [notice] 230#230: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/921/0) 2023/10/22 10:53:50 [notice] 230#230: using the "epoll" event method 2023/10/22 10:53:50 [notice] 230#230: nginx/1.24.0 2023/10/22 10:53:50 [notice] 230#230: OS: Linux 6.5.7-200.fc38.x86_64 2023/10/22 10:53:50 [notice] 230#230: getrlimit(RLIMIT_NOFILE): 524288:524288 2023/10/22 10:53:50 [notice] 231#231: start worker processes
注意,Nginx 成功加載了 921 條規(guī)則。還需要做一些測(cè)試來確保規(guī)則實(shí)際上是被網(wǎng)絡(luò)應(yīng)用防火墻檢查過的。這里再次引用 INSTALL 文件中的 “Testing the Installation” 片段。
[user@fedora ~]$ curl 'http://localhost/?param=''><script>alert(1);</script>' [user@fedora ~]$ tail /var/log/modsec_audit.log ... ---8NSpdnLe---H-- ModSecurity: Warning. detected XSS using libinjection. [file "/etc/nginx/coreruleset-3.3.5/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "38"] [id "941100"] [rev ""] [msg "XSS Attack Detected via libinjection"] [data "Matched Data: XSS data found within ARGS:param: ><script>alert(1);</script>"] [severity "2"] [ver "OWASP_CRS/3.3.5"] ...
結(jié)論
本文演示了如何為 Nginx 服務(wù)器配置網(wǎng)絡(luò)應(yīng)用防火墻。這個(gè)部署使用了標(biāo)準(zhǔn)規(guī)則和 OWASP Core Rule Set v3.3.5。演示的防火墻在檢測(cè)模式中運(yùn)行并記錄不尋常的行為。將防火墻運(yùn)行在防御模式要對(duì) modsecurity.conf 進(jìn)行更多改動(dòng)。請(qǐng)參考 ModSecurity Reference Manual v3.x 獲取如何啟用防御模式和更多信息。
到此這篇關(guān)于Nginx 配置 ModSecurity 網(wǎng)絡(luò)應(yīng)用防火墻實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx ModSecurity 應(yīng)用防火墻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx實(shí)現(xiàn)靜態(tài)資源的反向代理實(shí)例
這篇文章主要介紹了Nginx實(shí)現(xiàn)靜態(tài)資源的反向代理實(shí)例,本文通過分析github發(fā)現(xiàn)這個(gè)應(yīng)用,可以避免在https的網(wǎng)站中出現(xiàn)http鏈接,需要的朋友可以參考下2015-03-03
Nginx不關(guān)機(jī)升級(jí)(平滑升級(jí))的實(shí)戰(zhàn)指南
隨著 nginx 越來越流行,并且 nginx 的優(yōu)勢(shì)也越來越明顯,nginx 的版本迭代也來時(shí)加速模式,伴隨著 nginx 的廣泛應(yīng)用,版本升級(jí)必然越來越快,線上業(yè)務(wù)不能停,所以本文給大家介紹了Nginx不關(guān)機(jī)升級(jí)(平滑升級(jí))的實(shí)戰(zhàn)指南,需要的朋友可以參考下2025-09-09
Windows下Nginx的啟動(dòng)停止等基本操作命令詳解
在Windows下使用Nginx,我們需要掌握一些基本的操作命令,今天為大家分享幾個(gè)Windows下操作Nginx的基本命令2018-10-10
Nginx/Apache服務(wù)器SSL證書自動(dòng)化部署與續(xù)期實(shí)戰(zhàn)教程
文章主要介紹了手動(dòng)管理SSL證書的繁瑣和風(fēng)險(xiǎn),特別是證書過期導(dǎo)致的業(yè)務(wù)中斷,文章介紹了如何使用ACME協(xié)議和Certbot工具實(shí)現(xiàn)Nginx和Apache的自動(dòng)化部署與續(xù)期,感興趣的朋友一起看看吧2026-04-04
Mac M1 Nginx 配置多站點(diǎn)的實(shí)現(xiàn)
這篇文章主要介紹了Mac M1 Nginx 配置多站點(diǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Nginx進(jìn)行平滑升級(jí)的實(shí)戰(zhàn)指南(不中斷服務(wù)版本更新)
Nginx的平滑升級(jí)(也稱為熱升級(jí))是一種在不停止服務(wù)的情況下更新Nginx版本或添加模塊的方法,這種升級(jí)方式確保了服務(wù)的高可用性,避免了因升級(jí)導(dǎo)致的請(qǐng)求中斷問題,以下是實(shí)現(xiàn)Nginx平滑升級(jí)的具體步驟,需要的朋友可以參考下2025-08-08
nginx實(shí)現(xiàn)指定url轉(zhuǎn)發(fā)詳解
這篇文章主要為大家詳細(xì)介紹了nginx實(shí)現(xiàn)指定url轉(zhuǎn)發(fā)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
Nginx搭配cpolar實(shí)現(xiàn)遠(yuǎn)程開發(fā)無縫協(xié)作全過程
Nginx是一款高性能的本地Web服務(wù)器,以其卓越的穩(wěn)定性和靈活的配置能力,成為開發(fā)者搭建本地服務(wù)的首選工具,本文將介紹如何利用 Ubuntu操作系統(tǒng)、Docker容器技術(shù)以及cpolar內(nèi)網(wǎng)穿透工具來實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問本地Nginx服務(wù)器的具體操作流程,需要的朋友可以參考下2026-01-01

