Fail2ban
Fail2ban : protéger ses services contre les attaques
Fail2ban est un outil permettant de protéger les services exposés (comme SSH, nginx ou postfix) contre les attaques répétées par force brute. Il fonctionne en analysant les fichiers de logs et en bannissant automatiquement les adresses IP qui présentent un comportement suspect.
Fonctionnement
Fail2ban surveille les logs (ex : `/var/log/auth.log`) à la recherche de motifs définis (échec d’authentification, erreurs). Lorsqu’une IP déclenche un certain nombre d’alertes dans un intervalle de temps, une règle temporaire est ajoutée au pare-feu pour bloquer cette IP.
Installation
Debian/Ubuntu
Fedora/RHEL/AlmaLinux
Configuration de base
Le fichier principal est `/etc/fail2ban/jail.conf`, mais il est recommandé de le copier vers `jail.local` pour ne pas perdre la configuration lors d’une mise à jour.
Exemple de configuration pour SSH
Dans `/etc/fail2ban/jail.local` :
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
bantime = 3600
findtime = 600
- `maxretry` : nombre d’échecs avant bannissement
- `bantime` : durée du bannissement en secondes
- `findtime` : période pendant laquelle les échecs sont comptés
Démarrer et activer le service
sudo systemctl start fail2ban
Vérifier l’état et les IP bannies
sudo fail2ban-client status sshd
Débannir une IP manuellement
Étendre la protection à d’autres services
Fail2ban peut protéger :
- `nginx` (accès interdits, erreurs 404 répétées)
- `postfix` (auth SMTP ratée)
- `nextcloud` (brute-force sur interface web)
- `sshd` (connexion SSH échouée)
Il suffit d’activer les sections correspondantes dans `jail.local` et de s'assurer que les logs sont bien renseignés.
Logs et journalisation
Les logs de fail2ban se trouvent ici :
/var/log/fail2ban.log
Et on peut aussi surveiller via :
journalctl -u fail2ban
Liens utiles
- [fail2ban.org](https://www.fail2ban.org/wiki/index.php/Main_Page)
- [Liste des filtres disponibles](https://github.com/fail2ban/fail2ban/tree/master/config/filter.d)
- [Surveillance automatique avec fail2web (UI)](https://github.com/Sean-Der/fail2web)