iptables 字串匹配的可行性;可與fail2ban一起使用

iptables 字串匹配的可行性;可與fail2ban一起使用

我們在負載平衡器和 CDN 前端後面有多個 Apache 2.4 Web 伺服器 - HTTPS 被終止 - 我們在後端 Apache 日誌中看到來自前端的標頭中的客戶端 IP。我想知道是否可以使用 iptables 的字串匹配(在 Web 伺服器電腦上)僅基於特定標頭(即內部包含客戶端 ip 的標頭)來阻止 IP?

我們的 Linux 核心是最新的,我們的 iptables 核心模組已編譯為:CONFIG_NETFILTER_XT_MATCH_STRING=m。

我讀過它可能是 CPU 密集型的,如果字串匹配超出包含客戶端 IP 的特定標頭,可能會產生意想不到的後果。或者有更好的工具可以實現這一點,例如代理,但我仍然想更多地了解其他人使用 iptables 的字串匹配功能與 Apache 以及可能的fail2ban 的經驗。

理想情況下,Apache 會有類似 nginx 的 444 之類的東西。基於匹配標頭中的 IP,但與 403 相比,444 連接丟失似乎等級較低(更突然/理想)且資源密集程度較低;但我想知道 - 是嗎?也許 444 比 403 更需要資源?

感謝您的任何見解!

答案1

當fail2ban 和相關邏輯在後端伺服器上運行時,沒有簡單的解決方案。

我認為第一步是使用 Apachemod_remoteip;那麼後端伺服器上的 Apache 日誌將包含實際的客戶端 IP,而不是前端/負載平衡器的 IP 位址:

預設情況下,Apache 使用連線值來識別使用者代理client_ip,並且連接remote_hostremote_logname是從該值派生的。這些欄位在其他可載入模組的身份驗證、授權和日誌記錄以及其他目的中發揮作用。

在請求期間,mod_remoteip 使用代理程式或負載平衡器提供的廣告用戶代理 IP 覆蓋連接的用戶端 IP。負載平衡器可能會與伺服​​器建立長期的 keepalive 連接,並且每個請求都將具有正確的用戶代理 IP,即使負載平衡器的底層用戶端 IP 位址保持不變。

然後您可以輕鬆地針對 Apache 日誌檔案執行fail2ban 來識別違規 IP

然後你將需要一個風俗和合適的fail2ban禁止行動從後端伺服器發出時,將阻止違規 IP。例如,這可以是對前端前面的防火牆的 API 呼叫,將違規 IP 新增到封鎖清單或其他內容。

相關內容