Fail2ban
解禁後fail2ban“過期bantime”
我有這個針對 apache 日誌的 fail2ban 監獄(目前有一些小值,所以我可以試驗):
enabled = true maxretry = 3 bantime = 10 findtime = 5 action = 429-ban
我使用
ab
(並發:10,請求:10000)對其進行壓力測試,我的自定義過濾器幾乎立即擷取“高”流量並禁止 IP。問題是 10 秒後,禁令到期,如果我繼續執行
ab
,fail2ban 日誌現在充滿:Ignore 192.168.XX.XX, expired bantime Ignore 192.168.XX.XX, expired bantime Ignore 192.168.XX.XX, expired bantime
從那時起,很長一段時間內,沒有出現任何禁令。同時fail2ban日誌顯示處理,即使我停止
ab
。如果我等待足夠長的時間並確認 fail2ban 日誌活動停止,那麼重新啟動壓力測試會有效地禁止 IP。我的問題是:
- 這
expired bantime
到底是什麼意思?- 即使壓力測試
ab
很久以前就停止了,fail2ban 似乎仍會繼續處理內容。是否有可能在fail2ban上存在某種我可以減少的緩衝區,這也可能解決我的第一個問題?
這個過期的bantime到底是什麼意思?
這意味著如果禁令發生,由於您的配置,禁令將立即過期,因此 unban 將在禁令後立即呼叫,這將使禁令過程變得不必要。
禁令結束使用公式計算:
end_of_ban = time_of_last_known_failure_causing_ban + bantime
發生這種情況是因為與您的配置相關的大量消息禁令結束可能比現在小,所以 fail2ban 過濾器忽略了這一點,只是搜尋更多消息。
另一種可能性可能是您的禁止操作並沒有真正起作用,因此被禁止的“入侵者”(或者更確切地說是模擬壓力測試器)仍然能夠產生消息,所以這確實會溢出日誌。
或者 fail2ban 根本無法比您生成消息更快地滾動日誌。
即使很久以前使用 ab 進行壓力測試,fail2ban 似乎仍會繼續處理內容
好吧,這確實表明您的配置中有些地方不正確:正則表達式速度慢、操作錯誤等,甚至消息太多。
請查看fail2ban wiki ::描述某些優化的最佳實踐。
是否有可能在fail2ban上有某種緩衝,我可以減少
並不真地。但是,如果您要切換程序,則可能會減少寄生蟲日誌流量:
- 不要監視帶有太多消息的訪問日誌或使用優化的正則表達式(以及更合適的日誌格式)來提高過濾器的速度(行匹配);
- 嘗試使用 web-server 的一些模組(如 nginx 的 limit-req 和 fail2ban 的過濾器,如nginx-limit-req)而不是掃描訪問日誌;
- 或使用更合適的方法來生成更少的日誌消息,例如使用 iptables 與 limit-burst 或其他類似的東西一起記錄 IP 的 http 數據包。