From c3176a90b6d18f8d705123b19b0542d7b194452a Mon Sep 17 00:00:00 2001 From: whirigoyen Date: Thu, 3 Mar 2022 15:44:31 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20pr=C3=A9cisions=20bug=20purge=20db=20sq?= =?UTF-8?q?lite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoFail2Ban.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/HowtoFail2Ban.md b/HowtoFail2Ban.md index c485636a..93f7b926 100644 --- a/HowtoFail2Ban.md +++ b/HowtoFail2Ban.md @@ -814,9 +814,10 @@ la raison est que Fail2Ban utilise le nom de la jail pour ajouter une chaîne IP ### Taille de la base de données SQLite et durée de conservation des bans [Un bug](https://github.com/fail2ban/fail2ban/issues/1267#issuecomment-323336619) affecte les versions antérieures à 0.11 (Debian Bullseye). + La base de données `/var/lib/fail2ban/fail2ban.sqlite3` n'est jamais purgée, malgré l'option `dbpurgeage` dans `/etc/fail2ban/fail2ban.conf` (par défaut à un jour). -Pour les versions 0.10, il faut mettre en place un cron `/etc/cron.hourly/fail2ban_dbpurge` : +Pour les versions 0.10, il faut mettre en place un cron `/etc/cron.daily/fail2ban_dbpurge` ou `/etc/cron.hourly/fail2ban_dbpurge` : ~~~ #!/bin/sh @@ -833,13 +834,17 @@ grep -R -E "bantime[[:blank:]]*=[[:blank:]]*[0-9]+" /etc/fail2ban/ Le défaut de cette solution est qu'il ne permet plus les bans illimités (`bantime = -1`), car ceux-ci seront supprimés par le cron. Si la base de données est volumineuse parce qu'elle n'a jamais été purgée, la requête `DELETE` échouera. -Il faut d'abord faire des `DELETE` successifs à la main, pour libérer de l'espace : +Pour libérer de l'espace, il faut faire des `DELETE` successifs à la main (qui peuvent prendre un certain temps) : ~~~ +# systemctl stop fail2ban # sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 -sqlite > DELETE FROM bans WHERE date('now', '-100 day') > datetime(timeofban, 'unixepoch'); +sqlite > DELETE FROM bans WHERE date('now', '-1000 day') > datetime(timeofban, 'unixepoch'); +sqlite > DELETE FROM bans WHERE date('now', '-500 day') > datetime(timeofban, 'unixepoch'); +(...) sqlite > DELETE FROM bans WHERE date('now', '-14 day') > datetime(timeofban, 'unixepoch'); sqlite > DELETE FROM bans WHERE date('now', '-$days day') > datetime(timeofban, 'unixepoch'); sqlite > VACUUM; +# systemctl start fail2ban ~~~