From c364047ac082c68601544e898ff1f7870d310cc1 Mon Sep 17 00:00:00 2001 From: whirigoyen Date: Tue, 22 Feb 2022 10:25:03 +0100 Subject: [PATCH] Ajout section bug dbpurgeage --- HowtoFail2Ban.md | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/HowtoFail2Ban.md b/HowtoFail2Ban.md index b826f0ab..697ca644 100644 --- a/HowtoFail2Ban.md +++ b/HowtoFail2Ban.md @@ -103,20 +103,6 @@ Pour dumper la configuration courante : ~~~ -### Durée de conservation des ban dans la base de données - - -L'option `dbpurgeage` permet de régler la durée de conservation des données dans `/etc/fail2ban/fail2ban.conf`. -C'est utile notamment si la base de données (par défaut `/var/lib/fail2ban/fail2ban.sqlite3`) prend trop de place. - -Par exemple : - -~~~ -dbpurgeage = 12h -dbpurgeage = 1d -~~~ - - ## Administration Fail2Ban est un démon en Python, on peut s'assurer qu'il tourne bien sur un système : @@ -808,6 +794,7 @@ Ou à chaud : fail2ban-client set JAIL banip IP ~~~ + ### Erreur "fail2ban.actions.action: ERROR" avec jail au nom trop long Si le nom de votre jail dépasse 20 caractères, vous obtiendrez des erreurs du type : @@ -823,3 +810,27 @@ la raison est que Fail2Ban utilise le nom de la jail pour ajouter une chaîne IP 22:52 < reg> iptables v1.4.14: chain name `fail2ban-accesslog-custom-12345' too long (must be under 29 chars) ~~~ + +### 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. +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;" +systemctl restart 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 : + +~~~ +# 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 > VACUUM; +~~~