Fail2ban
大型fail2ban數據庫,正常嗎?
我伺服器上的 fail2ban 數據庫非常大(420MB)。
fail2ban 日誌非常繁忙(每兩秒就有一個“過濾器”條目),但
iptables
只顯示了幾個被禁止的地址。dbpurage 為 86400 秒(24 小時)
這個尺寸與活動一致還是發生了什麼?
我假設如果我停止/擦除數據庫/啟動,我會恢復到合理的大小,但這不會使活動禁令永久化嗎?
我剛剛在我自己的伺服器上發現了這個問題。我
dbpurgeage
的也設置為預設的 24 小時,但我的fail2ban.sqlite3
增長到 400MB,並且在過去 2 年中有 800,000 條禁令。事實證明fail2ban 實際上直到 v0.11 才具有清除數據庫的程式碼。它是在這個送出中添加的。dburgeage 在此之前什麼都不做。
要查看數據庫中有多少禁令:
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select count(*) from bans"
要查看您最舊的數據庫條目的年齡:
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select datetime(min(timeofban), 'unixepoch') from bans"
要清理數據庫,例如只保留最後一周的數據:
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "delete from bans where timeofban < strftime('%s', 'now', '-7 days')" sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "vacuum"
刪除可能需要幾分鐘,在此期間,如果 fail2ban 嘗試訪問數據庫,它將被阻止。也許您可能希望以較小的批量刪除(首先是超過 2 年的所有內容,然後是 1 年等),以便讓 fail2ban 有機會在兩者之間執行,並在最後進行清理。