Reduce fail2ban.sqlite3 file

  Algemeen, Linux

op 1 van mijn systemen heb ik fail2ban draaien, deze maakt gebruik van een sqlite3 db, deze database kan na verloop van tijd een behoorlijk groeien. in mijn geval is de size al bijna 700MB.

# ls -al /var/lib/fail2ban
total 700256
drwxr-xr-x  2 root root      4096 Oct 22 12:19 .
drwxr-xr-x 67 root root      4096 Oct  5 20:35 ..
-rw-------  1 root root 717042688 Oct 22 12:19 fail2ban.sqlite3

Laten we eens kijken wat er allemaal in de database staat. om in de database te kunnen kijken moet je sqlite3 op je machine zetten  gebruik hiervoor je package manager. Open vervolgens de database en kijk welke tabellen er allemaal zijn. Als je niet helemaal zeker bent van wat je doet maak gewoon een copy van je database file

# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> .tables
bans        fail2banDb  jails       logs      

er zijn 4 tables in bans zitten de meeste rijen. Als je eerst een row count doet en ook kijkt wat de oudste entry’s zijn krijg je een idee van wat er in de Database staat. Het is gewoon een sql database dus veel bekende sql commando’ s werken hier ook.

sqlite> select count(*) from bans;
1077475
sqlite> 
sqlite> select DATETIME(timeofban, 'unixepoch')  from bans limit 10; 
2016-10-15 03:22:23
2016-10-26 20:08:04
2016-10-27 02:58:43
2016-11-16 00:05:54
2016-11-26 14:53:22
2016-12-15 12:32:05
2017-01-09 22:02:33
2017-01-11 00:00:15
2017-01-14 12:56:21
2017-01-30 16:24:59
sqlite>

in deze database staan dus 1077475 rijen als we naar de eerste datums kijken zien we dat er gegevens in staan uit 2016 das een beetje overdreven dus gaan we een groot deel van de rijen verwijderen ik haal alle data voor september 2021 weg.

sqlite> DELETE FROM bans WHERE DATE(timeofban, 'unixepoch') < '2021-08-31';
sqlite> select count(*) from bans;
44083
sqlite> select DATETIME(timeofban, 'unixepoch')  from bans limit 10; 
2021-09-08 11:12:55
2021-09-21 06:04:02
2021-08-31 04:17:31
2021-08-31 05:05:08
2021-08-31 05:06:09
2021-08-31 05:06:40
2021-08-31 05:06:58
2021-08-31 05:07:21
2021-08-31 05:07:47
2021-08-31 05:08:06
sqlite> 

zo dat ruimt lekker op. Helaas is de file nog de zeflde size om deze kleiner te maken moeten we nog vacuum gebruiken voor de zekeheid herstarten we fail2ban service nog een keer.

 

sqlite> VACUUM;
sqlite> 

# ls -alh /var/lib/fail2ban
total 26M
drwxr-xr-x  2 root root 4.0K Oct 22 13:37 .
drwxr-xr-x 67 root root 4.0K Oct  5 20:35 ..
-rw-------  1 root root  26M Oct 22 13:37 fail2ban.sqlite3

# systemctl restart fail2ban.service 


dat scheelt behoorlijk wat ruimte.