Nginx下ModSecurity模塊安裝的實(shí)現(xiàn)步驟
以下是針對(duì)Nginx 1.28.0的ModSecurity v3完整安裝指南,包含編譯優(yōu)化和最新依賴處理:
系統(tǒng)環(huán)境準(zhǔn)備(Ubuntu 22.04/Debian 11為例)
# 安裝編譯依賴 sudo apt update sudo apt install -y git build-essential libpcre3 libpcre3-dev libssl-dev \ libtool autoconf automake flex bison curl libcurl4-openssl-dev \ libxml2 libxml2-dev libyajl-dev doxygen zlib1g-dev pkg-config \ liblmdb-dev libmaxminddb-dev libgeoip-dev libpcre++-dev
步驟1:編譯安裝ModSecurity庫(kù)(libmodsecurity)
# 下載最新穩(wěn)定版源碼 cd /usr/src git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity cd ModSecurity # 更新子模塊(解決常見(jiàn)初始化問(wèn)題) git submodule update --init --recursive # 編譯優(yōu)化參數(shù)設(shè)置 ./build.sh ./configure \ --prefix=/usr/local/modsecurity \ --with-maxmind=/usr \ --with-geoip \ --with-lmdb \ --with-yajl \ --with-ssdeep \ --enable-standalone-module=no \ CXXFLAGS="-O3 -march=native -pipe" # 編譯安裝 make -j$(nproc) sudo make install # 添加庫(kù)路徑 echo "/usr/local/modsecurity/lib" | sudo tee /etc/ld.so.conf.d/modsecurity.conf sudo ldconfig
步驟2:編譯Nginx 1.28.0動(dòng)態(tài)模塊
# 下載Nginx 1.28.0源碼 cd /usr/src wget https://nginx.org/download/nginx-1.28.0.tar.gz tar xvzf nginx-1.28.0.tar.gz # 下載ModSecurity-Nginx連接器 git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git # 獲取當(dāng)前Nginx編譯參數(shù) nginx -V 2>&1 | grep configure > nginx-config.txt # 添加動(dòng)態(tài)模塊編譯參數(shù) sed -i "s/--with-compat//g" nginx-config.txt # 移除舊兼容參數(shù) echo --with-compat --add-dynamic-module=../ModSecurity-nginx >> nginx-config.txt # 編譯動(dòng)態(tài)模塊 cd nginx-1.28.0 sudo bash -c ". ../nginx-config.txt && make modules" # 驗(yàn)證模塊編譯 ls objs/ngx_http_modsecurity_module.so # 確認(rèn)文件存在
步驟3:配置Nginx加載模塊
# 創(chuàng)建模塊目錄 sudo mkdir -p /etc/nginx/modules-available sudo mkdir -p /etc/nginx/modules-enabled # 復(fù)制模塊文件 sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules-available/ # 加載模塊配置 sudo tee /etc/nginx/modules-enabled/modsecurity.conf <<EOF load_module modules-available/ngx_http_modsecurity_module.so; EOF # 主配置引用 sudo sed -i '1i include /etc/nginx/modules-enabled/*.conf;' /etc/nginx/nginx.conf # 創(chuàng)建ModSecurity配置目錄 sudo mkdir -p /etc/nginx/modsec
步驟4:配置ModSecurity核心設(shè)置
# 復(fù)制基礎(chǔ)配置 sudo cp /usr/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf sudo cp /usr/src/ModSecurity/unicode.mapping /etc/nginx/modsec/ # 修改關(guān)鍵配置 sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf sudo sed -i 's#SecAuditLog /var/log/modsec_audit.log#SecAuditLog /var/log/nginx/modsec_audit.log#' /etc/nginx/modsec/modsecurity.conf # 添加性能優(yōu)化參數(shù) sudo tee -a /etc/nginx/modsec/modsecurity.conf <<EOF # 性能優(yōu)化設(shè)置 SecArgumentSeparator "&" SecAuditLogParts ABIJDEFHZ SecAuditLogType Serial SecAuditLogStorageDir /var/log/nginx/modsec_audit/ SecUploadDir /tmp SecTmpDir /tmp SecDataDir /tmp EOF # 創(chuàng)建日志目錄 sudo mkdir -p /var/log/nginx/modsec_audit sudo chown www-data:adm /var/log/nginx/modsec_audit
步驟5:安裝OWASP核心規(guī)則集(CRS v4.0)
# 下載最新CRS cd /etc/nginx/modsec sudo git clone https://github.com/coreruleset/coreruleset sudo mv coreruleset owasp-modsecurity-crs # 配置規(guī)則集 cd owasp-modsecurity-crs sudo cp crs-setup.conf.example crs-setup.conf sudo cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf sudo cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf # 創(chuàng)建主規(guī)則文件 sudo tee /etc/nginx/modsec/main.conf <<EOF Include modsecurity.conf Include owasp-modsecurity-crs/crs-setup.conf Include owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf Include owasp-modsecurity-crs/rules/*.conf Include owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf EOF
步驟6:Nginx站點(diǎn)配置
# 在目標(biāo)站點(diǎn)配置中添加 server { ... modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; # 可選:特定路徑禁用規(guī)則 location /api { modsecurity off; } # 錯(cuò)誤頁(yè)面定制 error_page 403 /403.html; location = /403.html { internal; } }
步驟7:測(cè)試與啟動(dòng)
# 配置文件測(cè)試 sudo nginx -t # 啟動(dòng)服務(wù) sudo systemctl restart nginx # 查看日志驗(yàn)證 sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/nginx/modsec_audit.log # 測(cè)試規(guī)則有效性 curl -I "http://localhost/?param=<script>alert(1)</script>" # 應(yīng)返回 403 Forbidden
性能優(yōu)化建議
規(guī)則排除:在
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
中添加應(yīng)用例外# WordPress排除示例 SecRule REQUEST_URI "@contains /wp-admin/" \ "id:1000,phase:1,pass,nolog,ctl:ruleEngine=DetectionOnly"
精簡(jiǎn)規(guī)則:僅啟用必要規(guī)則集
# 禁用不常用規(guī)則文件 sudo mv /etc/nginx/modsec/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf{,.disabled}
調(diào)整防護(hù)級(jí)別:編輯
crs-setup.conf
SecAction \ "id:900000,\ phase:1,\ nolog,\ pass,\ t:none,\ setvar:tx.paranoia_level=1"
常見(jiàn)問(wèn)題解決
1. 模塊加載失敗
sudo grep "modsecurity" /var/log/nginx/error.log
- 解決方案:確認(rèn)Nginx版本匹配,重新執(zhí)行步驟2
2. 規(guī)則不生效
- 檢查
nginx -T
輸出確認(rèn)模塊加載 - 驗(yàn)證配置文件路徑權(quán)限:
sudo chmod -R 755 /etc/nginx/modsec
3. 高CPU占用
# 在modsecurity.conf添加: SecPcreMatchLimit 100000 SecPcreMatchLimitRecursion 100000 SecCollectionTimeout 600
自動(dòng)更新腳本
#!/bin/bash # ModSecurity自動(dòng)更新腳本 cd /usr/src/ModSecurity git pull git submodule update --init --recursive ./build.sh ./configure --prefix=/usr/local/modsecurity make -j$(nproc) sudo make install sudo ldconfig cd /etc/nginx/modsec/owasp-modsecurity-crs git pull sudo nginx -t && sudo systemctl reload nginx
將此腳本保存為/usr/local/bin/update-modsec并添加可執(zhí)行權(quán)限
完成以上步驟后,您的Nginx 1.28.0將獲得企業(yè)級(jí)WAF防護(hù)。建議初次部署時(shí)使用SecRuleEngine DetectionOnly
模式運(yùn)行24小時(shí),分析日志后再啟用主動(dòng)防護(hù)。
到此這篇關(guān)于Nginx下ModSecurity模塊安裝的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Nginx ModSecurity安裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows下nginx+tomcat配置負(fù)載均衡的方法
這篇文章主要介紹了windows下nginx+tomcat配置負(fù)載均衡的方法,需要的朋友可以參考下2016-09-09Nginx+RTMP+nginx-http-flv-module環(huán)境搭建
本文主要介紹了Nginx+RTMP+nginx-http-flv-module環(huán)境搭建,搭建方式可用于直播、視頻會(huì)議等場(chǎng)景,同時(shí)支持HTTP-FLV,方便在瀏覽器中進(jìn)行播放2024-03-03Nginx 設(shè)置域名轉(zhuǎn)發(fā)到指定端口的實(shí)現(xiàn)方法
這篇文章主要介紹了Nginx 設(shè)置域名轉(zhuǎn)發(fā)到指定端口的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08借用nginx.vim工具進(jìn)行語(yǔ)法高亮和格式化配置nginx.conf文件
今天小編就為大家分享一篇關(guān)于借用nginx.vim工具進(jìn)行語(yǔ)法高亮和格式化配置nginx.conf文件,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02Nginx的nginx.conf配置文件中文注釋說(shuō)明
這篇文章主要介紹了Nginx的nginx.conf配置文件中文注釋說(shuō)明,本文是個(gè)人注釋版,在生產(chǎn)環(huán)境中經(jīng)常使用,需要的朋友可以參考下2014-12-12nginx中封禁ip和允許內(nèi)網(wǎng)ip訪問(wèn)的實(shí)現(xiàn)示例
Nginx不僅僅只是一款反向代理和負(fù)載均衡服務(wù)器,本文主要介紹了nginx中封禁ip和允許內(nèi)網(wǎng)ip訪問(wèn)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03