From a1f9cc296c11ff3a1ac159ea76ba39fc2aa4cd18 Mon Sep 17 00:00:00 2001 From: whirigoyen Date: Tue, 22 Feb 2022 10:50:37 +0100 Subject: [PATCH] =?UTF-8?q?Pr=C3=A9cision=20version=20Debian=20affect?= =?UTF-8?q?=C3=A9e=20bug=20fail2ban=20purge=20DB=20+=20dur=C3=A9e=20ban=20?= =?UTF-8?q?custom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoFail2Ban.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/HowtoFail2Ban.md b/HowtoFail2Ban.md index 697ca644..1a3645af 100644 --- a/HowtoFail2Ban.md +++ b/HowtoFail2Ban.md @@ -813,17 +813,23 @@ 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. +[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` : ~~~ #!/bin/sh -sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "DELETE FROM bans WHERE date('now', '-1 day') > datetime(timeofban, 'unixepoch'); VACUUM;" +sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "DELETE FROM bans WHERE date('now', '-$days day') > datetime(timeofban, 'unixepoch'); VACUUM;" systemctl restart fail2ban ~~~ +On remplacera la valeur $days par la durée maximale définie dans l'option `bantime` (l'unité par défaut est la seconde) : + +~~~ +grep -R -E "bantime[[:blank:]]*=[[:blank:]]*[0-9]+" /etc/fail2ban/ +~~~ + 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 : @@ -831,6 +837,7 @@ Il faut d'abord faire des `DELETE` successifs à la main, pour libérer de l'esp # 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', '-10 day') > datetime(timeofban, 'unixepoch'); -sqlite > DELETE FROM bans WHERE date('now', '-1 day') > datetime(timeofban, 'unixepoch'); +sqlite > DELETE FROM bans WHERE date('now', '-$days day') > datetime(timeofban, 'unixepoch'); sqlite > VACUUM; ~~~ +