Lösung 1:
Es gibt einen dbpurgeage
Parameter in fail2ban.conf
, der angibt, wie viele Tage Daten in der Datenbank aufbewahrt werden sollen. Der Standardwert ist ein Tag (1d
), versuchen Sie also, es auf ein paar Stunden zu reduzieren:
dbpurgeage = 8h
Diese Einstellung ist mit findtime
gekoppelt :Es macht keinen Sinn, einen findtime
zu haben länger als dbpurgeage
.
Bearbeiten (2021) :Der folgende Hinweis war zum Zeitpunkt des Schreibens wahr. Heutzutage schauen Sie sich jedoch neingeist an stattdessen antworten.
Veralteter Hinweis :Durch einen Blick auf mein eigenes fail2ban Datenbank, die dbpurgeage
Einstellung scheint nicht zu funktionieren. Daher ist die einzige Lösung, die Einträge manuell zu löschen. Um beispielsweise die Einträge des letzten Jahres zu löschen, führen Sie Folgendes aus:
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 \
"DELETE FROM bans WHERE DATE(timeofban, 'unixepoch') < '2020-01-01'; VACUUM;"
(die sqlite3 ausführbare Datei befindet sich normalerweise im gleichnamigen Paket).
Es scheint keine Möglichkeit zu geben, VACUUM
auszuführen der Datenbank ohnesqlite Durchführen einer Kopie der Datenbank im selben Verzeichnis. Sie können die Datei jedoch vor dem Ausführen der Operation in ein anderes Dateisystem kopieren und dann die kleinere Datenbank zurückkopieren.
Lösung 2:
Sie können auf 0.11.x aktualisieren (das den Code zum Bereinigen enthält) und dann die riesige Datenbank löschen, gefolgt von einem Neustart von fail2ban. Die Datenbank wird neu erstellt. Dies ist die einfachste Lösung ohne Nachteile für die meisten Menschen.
Während fail2ban 0.11.x tatsächlich Code enthält, um alte Einträge zu löschen (die ältere Version tat dies nicht!), enthält es keinen VACUUM
. Eine andere Möglichkeit ist also, auf fail2ban zu warten, um die alten Einträge zu löschen (passiert jede Stunde) und einen manuellen sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "VACUUM;"
durchzuführen . Ohne die VACUUM
die Datenbankdatei behält ihre Größe.