我對 ModSecurity3 Nginx 相當陌生。我今天發現我的服務器凍結了,因為 ModSecurity 創建了大量的日志檔案,每個 10GB 并且服務器的磁盤空間不足。審核日志設定為“僅相關”以顯示警告和錯誤。我發現出現的警告太多了。
經過調查,我發現 99% 的絕大多數警告都是相同的,如下所示:
---5jn0CgkO---H--
ModSecurity: Warning. Matched "Operator `Rx' with parameter `^(?i:(?:[a-z]{3,10}\s (?:\w{3,7}?://[\w\-\./]*(?::\d )?)?/[^?#]*(?:\?[^#\s]*)?(?:#[\S]*)?|connect (?:\d{1,3}\.){3}\d{1,3}\.?(?::\d )?|options \*)\s [\w\./] |get /[^?#]*(?:\?[^#\s]*)?(?:#[\S]*)?)$' against variable `REQUEST_LINE' (Value: `GET /sale/kenwood-kac-6402-by-download-mauritron-221328-264064/ HTTP/2.0' ) [file "/etc/nginx/modsec/coreruleset-3.3.2/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "47"] [id "920100"] [rev ""] [msg "Invalid HTTP Request Line"] [data "GET /sale/kenwood-kac-6402-by-download-mauritron-221328-264064/ HTTP/2.0"] [severity "4"] [ver "OWASP_CRS/3.3.2"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/210/272"] [hostname "***.***.***.***"] [uri "/sale/kenwood-kac-6402-by-download-mauritron-221328-264064/"] [unique_id "166725616876.036760"] [ref "v0,72"]
我有一個市場網站,人們在其中出售商品,因此此處顯示的每個 URL 都采用相同的格式“/sale/something-for-sale-123456/”。
有人可以解釋該網站的實際問題以及如何解決嗎?我知道如何創建一個例外來“隱藏”警告,但我想解決根本原因。
謝謝
uj5u.com熱心網友回復:
你沒有提到你使用哪個 CRS - 我假設它是某個 3.x 版本。
最新版本的 CRS (4.0) 對每條規則都有更好的描述,所以我建議你先閱讀這里提到的規則的注釋。
如您所見,有一行文字: 要更新正則運算式,請運行以下 shell 腳本...
在 4.0 中,每個使用的規則@rx都有一個資料檔案,正則運算式從該資料檔案中生成。在此規則的情況下,資料檔案是this。
我相信閱讀評論將有助于理解規則的機制。
根據正則運算式和您的日志條目,我可以確認,如果 URL 看起來像您顯示的內容,則會觸發此規則。詳細的 regex101 頁面在這里。
為了幫助 CRS 團隊的作業,您應該在 Github 上打開一個新問題,提供詳細資訊(版本等),因為這是誤報命中,我們要關心這些問題。
作為解決方法,您可以進行排除,如下所示:
SecRule REQUEST_LINE "@beginsWith /sale/" \
"id:100001,\
phase:1,\
t:none,\
pass,\
ctl:ruleRemoveById=920100"
編輯:
根據正則運算式和您的日志條目,我可以確認,如果 URL 看起來像您顯示的內容,則會觸發此規則。詳細的 regex101 頁面在這里。
這是我的錯誤,因為規則否定了匹配的結果,因此它不應該觸發。順便說一句,我們仍然需要調查這種奇怪的行為。@peppy,感謝您在 GH 上打開問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529222.html
標籤:nginx国防部安全
下一篇:在單行上堆疊兩個文本行的替代方法
