
Fail2ban partager les ips bannies
28/12/2024 : Petites mises à jour sur les failregex et bannissement de tous les ports
Lorsque l'on possède plusieurs serveurs et services que l'on expose sur internet il est important de protéger ceux-ci contre les différentes tentatives de scan et d'intrusion qu'il peut y avoir.
Historiquement il existe le projet Fail2ban qui permet de bannir des adresses IP un certains temps données en analysant les logs en fonction de certaines règles que l'on peut personnaliser.
Il existe aujourd'hui beaucoup d'autres alternatives à cet outil aujourd'hui mais malgré tout il a encore beaucoup d'avantage :
- C'est un ancien projet qui est toujours actif, suivi et avec plusieurs contributeurs.
- Il a très grande flexibilité et donc s'adapte à beaucoup de cas d'usage, cela peut devenir aussi un inconvénient pour certains car si on ajoute trop de règles complexes il peut vite prendre de la charge mémoire.
- Les données reste en local et cela est très important de mon point de vue surtout lorsque l'on parle d'analyser des logs qui peuvent contenir beaucoup d'information.
Le besoin, dans le cas présent est de bannir sur chacun des serveurs, une IP qui a été bannie sur un des serveurs, pour éviter que les autres subissent les même tentatives.
Pour cela on va utiliser la flexibilité des règles de Fail2ban et les logs qu'il génère.
Ici je prends le parti que vous avez déjà une configuration de Fail2ban fonctionnelle et je ne vais décrire que la fonctionnalités additionnelles de bannissements inter-serveurs.
La première étape est de mettre en place un espace de fichiers partagés entre les différents serveurs.
Plusieurs solutions existent, je ne vais pas détailler la configuration de celles-ci car cela dépendra de votre infrastructure, il peut s'agir simplement d'un partage NFS, Samba, SSHFS mais également des systèmes de fichier tel que Cephfs, Glusterfs ou des réplication tel que DRBD...
Ici dans cet exemple, le point de montage lié à ce partage de fichier sur chacun des serveurs sera
/mnt/fail2ban
Nous allons tout d'abord, sur chacun des serveurs éditer le fichier de configuration de Fail2ban pour modifier le répertoire où il enregistre ces logs.
sudo vi /etc/fail2ban/fail2ban.local
Puis modifier la ligne suivante en remplaçant nomserveur par le nom approprié
logtarget = /mnt/fail2ban/nomserveur.log
Puis nous créons le fichier pour notre nouvelle règle regex de détection des bans dans les logs
sudo vi /etc/fail2ban/filter.d/fail2ban-log.conf
Et nous insérons les lignes suivantes
[Definition]
failregex = ^.* Ban <HOST>$
^.* <HOST> already banned$
ignoreregex =
Et enfin le fichier de jail, où nous définissons la localisation des fichiers de logs, les ports à bannir, dans mon cas j'ai décidé de bannir tous les ports mais vous pouvez limiter à ceux dont vous avez besoin.
Nous étendons aussi le findtime à une journée pour prendre en compte le cas d'une interruption d'accès aux fichiers logs pour quelques raisons que ce soit.
[fail2ban-log]
enabled = true
port = 0-65535
findtime = 86400
logpath = /mnt/gv0/fail2ban/*.log
maxretry = 1
Nous vérifions que toutes les règles sont valides avant de redémarrer Fail2ban
sudo fail2ban-client -d
sudo systemctl restart fail2ban
sudo systemctl status fail2ban