Purge manuelle Fail2ban

De EjnTricks

Fail2ban utilise une base de données SQLite pour stoker des informations comme les bannissements mis en place. Il existe une paramètre dans la configuraiton afin de purger cette base de données. Cependant, ce comportement ne fonctionne pas dans des versions inférieurs à 0.11.

Cet article présente les commandes nécessaires pour réaliser la purge manuellement.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

Pour une installation standard de Fail2ban sur un système Ubuntu, il est constaté que la taille de la base de données ne fait que croître. L'emplacement de cette base est spécifié dans le fichier de configuration, à l'emplacement /etc/fail2ban/fail2ban.conf dans le paramètre dbfile.

# Options: dbfile
# Notes.: Set the file for the fail2ban persistent data to be stored.
#         A value of ":memory:" means database is only stored in memory
#         and data is lost when fail2ban is stopped.
#         A value of "None" disables the database.
# Values: [ None :memory: FILE ] Default: /var/lib/fail2ban/fail2ban.sqlite3
dbfile = /var/lib/fail2ban/fail2ban.sqlite3

Le paramètre dbpurgeage permet de spécifier le temps de conservation des données.

# Options: dbpurgeage
# Notes.: Sets age at which bans should be purged from the database
# Values: [ SECONDS ] Default: 86400 (24hours)
dbpurgeage = 1d

Un ticket a été ouvert sur le projet concernant le non fonctionnement de cette purge, https://github.com/fail2ban/fail2ban/issues/1267#issuecomment-323336619.

Cette anomalie est fixée dans la version 0.11.


Dependencies.gif Dépendances

La purge est réalisée manuellement à l'aide de requêtes SQL. Il est donc nécessaire d'installer un client SQLite. Por une installation sous Ubuntu, il suffit d'installer le paquet sqlite3.

#sudo apt-get install sqlite3


Start-icon.png Purge

Pour une version 0.10.X, la purge n'impacte que la table bans qui contient la colonne timeofban. Celle-ci permet de stocker sous la forme d'un nombre l'instant du bannissement.

#sudo sqlite3 /var/lib/fail2ban/fail2ban.sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> .tables
bans        fail2banDb  jails       logs
sqlite> .schema bans
CREATE TABLE bans(jail TEXT NOT NULL, ip TEXT, timeofban INTEGER NOT NULL, data JSON, FOREIGN KEY(jail) REFERENCES jails(name) );
CREATE INDEX bans_jail_timeofban_ip ON bans(jail, timeofban);
CREATE INDEX bans_jail_ip ON bans(jail, ip);
CREATE INDEX bans_ip ON bans(ip);

Afin d'effetuer la purge, il est nécessaire de calculer ce nombre pour l'instant souhaité, avec le site http://www.timestamp.fr/? par exemple. Une fois la référence calculée, il suffit d'exécuter une requête delete avec un filtre sur timeofban.

#sudo sqlite3 /var/lib/fail2ban/fail2ban.sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> select count(*) from bans where timeofban < 1540226555;
74636