Ajout précisions bug purge db sqlite

This commit is contained in:
whirigoyen 2022-03-03 15:44:31 +01:00
parent 159272b958
commit c3176a90b6

View file

@ -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 ### 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). [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). 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 #!/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. 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. 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 # 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', '-14 day') > datetime(timeofban, 'unixepoch');
sqlite > DELETE FROM bans WHERE date('now', '-$days day') > datetime(timeofban, 'unixepoch'); sqlite > DELETE FROM bans WHERE date('now', '-$days day') > datetime(timeofban, 'unixepoch');
sqlite > VACUUM; sqlite > VACUUM;
# systemctl start fail2ban
~~~ ~~~