ModSecurity-nginx 連接器是 nginx 和 libmodsecurity (ModSecurity v3) 之間的連接點。換句話說,這個專案提供了 nginx 和 libmodsecurity 之間的通訊通道。需要此連接器才能將 LibModSecurity 與 nginx 結合使用。
ModSecurity-nginx 連接器採用 nginx 模組的形式。這個模組只是充當 nginx 和 ModSecurity 之間的通訊層。
請注意,該專案依賴 libmodsecurity 而不是 ModSecurity(版本 2.9 或更低)。
舊版本使用獨立的 ModSecurity,它是 Apache 內部的包裝器,用於將 ModSecurity 連結到 nginx。目前版本更接近 nginx,使用不再依賴 Apache 的新 libmodsecurity。因此,當前版本的依賴性更少,錯誤更少,並且速度更快。此外,還提供了一些新功能,例如可以使用全域規則配置和每個目錄/位置自訂(例如 SecRuleRemoveById)。
在編譯此軟體之前,請確保已安裝 libmodsecurity。您可以從 ModSecurity git 儲存庫下載它。有關 libmodsecurity 的編譯和安裝的信息,請參閱隨附的文件。
安裝 libmodsecurity 後,您可以繼續安裝 ModSecurity-nginx 連接器,該連接器遵循 nginx 第三方模組安裝程序。從 nginx 來源目錄:
./configure --add-module=/path/to/ModSecurity-nginx
或者,建立動態模組:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
請注意,在建立動態模組時,您的 nginx 原始版本需要與您為其編譯的 nginx 版本相符。
有關 nginx 第三方插件支援的更多信息,請訪問:http://wiki.nginx.org/3rdPartyModules
ModSecurity for nginx 擴充了您的 nginx 設定指令。它添加了四個新指令,它們是:
語法: modsecurity on |離開
上下文: http、伺服器、位置
預設值:關閉
開啟或關閉 ModSecurity 功能。請注意,此配置指令不再與 SecRule 狀態相關。相反,它現在僅用作 nginx 標誌來啟用或停用該模組。
語法: modsecurity_rules_file <規則檔案的路徑>
上下文: http、伺服器、位置
預設值:否
指定 modsecurity 設定檔的位置,例如:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
}
語法: modsecurity_rules_remote <key> <規則的 URL>
上下文: http、伺服器、位置
預設值:否
指定從何處(在互聯網上)下載 modsecurity 設定檔。它還指定將用於驗證該伺服器的金鑰:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
語法: modsecurity_rules <modsecurity 規則>
上下文: http、伺服器、位置
預設值:否
允許將 ModSecurity 規則直接包含到 nginx 配置中。以下範例從檔案載入規則並為每個目錄/別名註入特定配置:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
location /ops {
root /var/www/html/opts;
modsecurity_rules '
SecRuleEngine On
SecDebugLog /tmp/modsec_debug.log
SecDebugLogLevel 9
SecRuleRemoveById 10
' ;
}
}
語法: modsecurity_transaction_id 字串
上下文: http、伺服器、位置
預設值:否
允許從 nginx 傳遞交易 ID,而不是在庫中產生它。這對於追蹤目的很有用,例如考慮以下配置:
log_format extended ' $remote_addr - $remote_user [ $time_local ] '
'" $request " $status $body_bytes_sent '
'" $http_referer " " $http_user_agent " $request_id ' ;
server {
server_name host1;
modsecurity on;
modsecurity_transaction_id "host1- $request_id " ;
access_log logs/host1-access.log extended;
error_log logs/host1-error.log;
location / {
...
}
}
server {
server_name host2;
modsecurity on;
modsecurity_transaction_id "host2- $request_id " ;
access_log logs/host2-access.log extended;
error_log logs/host2-error.log;
location / {
...
}
}
使用 log_format 和 modsecurity_transaction_id 的組合,您將能夠使用相同的唯一識別碼找到存取日誌和錯誤日誌條目之間的相關性。
字串可以包含變數。
作為一個開源項目,我們邀請(並鼓勵)社區中的任何人為我們的項目做出貢獻。這可能採取以下形式:新功能、錯誤修復、錯誤報告、初學者用戶支援以及您願意提供協助的任何其他內容。謝謝。
我們更願意將您的修補程式放在 GitHub 基礎設施中,以促進我們的審核工作和 QA 整合。 GitHub 提供了有關如何執行「拉取請求」的優秀文件。更多資訊請見:https://help.github.com/articles/using-pull-requests/
請尊重所使用的編碼風格。拉取請求可以包含各種提交,因此每次提交都提供一項修復或一項功能。不要更改目標工作範圍之外的任何內容(例如,您經過的函數中的編碼風格)。
在我們的程式碼中,有多個標記為 TODO 或 FIXME 的專案可能需要您注意。透過執行 grep 檢查項目清單:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
您還可以查看最近的錯誤報告和未解決的問題,以了解我們正在尋求什麼樣的幫助。
除了手動測試之外,我們強烈建議您使用 nginx 測試實用程序,以確保您的修補程式不會對 nginx 的行為或效能產生不利影響。
nginx 測驗位於:http://hg.nginx.org/nginx-tests/
要使用這些測試,請確保您擁有 Perl 實用程式 Prove(Perl 5 的一部分)並繼續執行以下命令:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
如果您在讓新增的功能通過所有 nginx 測試時遇到問題,請隨時聯絡我們或 nginx 郵件清單:http://nginx.org/en/support.html
我們尊重 nginx 調試模式。透過在 nginx 設定期間使用設定選項“--with-debug”,您還將啟用連接器的偵錯訊息。核心轉儲和崩潰預計以與調試 nginx 相同的方式進行調試。更多資訊請查看nginx偵錯資訊:http://wiki.nginx.org/Debugging
如果您遇到設定問題或某些內容未按您的預期運行,請使用 ModSecurity 使用者的郵件清單。 GitHub 上的問題也是受歡迎的,但我們更喜歡先讓用戶在郵件列表上提出問題,這樣您就可以聯繫整個社區。另外,在開啟新問題之前,不要忘記尋找現有問題。
最後,如果您打算在 GitHub 上提出問題,請不要忘記告訴我們您的 libmodsecurity 的版本以及您正在執行的 nginx 連接器的版本。
請不要公開報告任何安全問題。相反,請透過 [email protected] 與我們聯絡來回報問題。一旦問題得到解決,我們將為您的發現提供榮譽。
我們很樂意討論您對新功能的任何想法。請記住,這是一個由社群驅動的項目,因此請務必透過郵件清單聯繫社群以首先獲取回饋。或者,您可以隨意開啟 GitHub 問題來要求新功能。在開啟新問題之前,請檢查是否存在所需功能的現有功能要求。
我們非常希望能夠按時發布我們的軟體包。如果我們可以做些什麼來促進您作為包裝工的工作,請告訴我們。