Purge manuelle Fail2ban
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.
Sommaire
Votre avis
Nobody voted on this yet
|
|
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
.
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
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