Configurer et gérer Fail2Ban sur Linux
Configurer et gérer Fail2Ban sur Linux
Cet article explique comment Fail2Ban fonctionne, comment le configurer et comment utiliser les commandes d'administration courantes. Destiné aux administrateurs qui sécurisent un serveur Linux contre les attaques par force brute.
Prérequis
- Serveur Linux avec accès root ou droits sudo - Fail2Ban version 0.11.x ou 1.x (vérifiez avec `fail2ban-client --version`) - Un pare-feu actif : `ufw`, `iptables` ou `nftables` - Accès aux fichiers journaux dans `/var/log/` (par défaut sur Debian/Ubuntu)
Étapes
1. Vérifiez la version de Fail2Ban
fail2ban-client --version
Fail2Ban 1.x est la version stable actuelle. La version 0.11.x est encore prise en charge mais ne reçoit plus de nouvelles fonctionnalités. Les commandes de cet article fonctionnent sur les deux versions.
2. Vérifiez si le serveur tourne
fail2ban-client ping
Le serveur doit répondre par `PONG`. Si vous voyez `Fail2Ban is not running`, démarrez le service avec :
sudo systemctl start fail2ban
3. Consultez le statut d'une jail
Une jail est un ensemble de règles qui détermine quel fichier journal est suivi, quels motifs sont recherchés et quelle action est entreprise en cas de tentatives échouées répétées. La jail SSH standard s'appelle `sshd`.
fail2ban-client status sshd
Cela affiche le nombre d'adresses IP actuellement bannies, le total des bans et les règles de pare-feu actives.
4. Ajoutez manuellement une adresse IP à une jail
sudo fail2ban-client set sshd banip 203.0.113.25
Cela bloque l'adresse IP immédiatement, sans attendre le seuil. Utilisez cela pour les adresses IP dont vous êtes certain qu'elles sont malveillantes.
5. Retirez une adresse IP d'une jail
sudo fail2ban-client set sshd unbanip 203.0.113.25
Cela retire l'adresse IP directement de la table de blocage et annule la règle de pare-feu. Pratique en cas de faux positifs ou après avoir résolu un problème.
6. Testez une expression régulière avec fail2ban-regex
fail2ban-regex /var/log/auth.log 'sshd.<em>Failed password.</em>from <HOST>'
Cela teste si les motifs `failregex` de votre configuration de filtre correspondent réellement aux lignes de votre fichier journal. Remplacez `
7. Configurez une jail dans jail.local
Créez un fichier de configuration local qui écrase les valeurs par défaut :
sudo nano /etc/fail2ban/jail.local
Ajoutez ceci pour une jail SSH avec des seuils personnalisés :
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h- `maxretry` : nombre de tentatives échouées avant qu'un ban ne soit imposé - `findtime` : fenêtre de temps dans laquelle les tentatives doivent avoir lieu - `bantime` : durée du blocage en secondes (ou avec un suffixe comme `1h`)
Redémarrez Fail2Ban après les modifications de configuration :
sudo systemctl restart fail2ban
8. Consultez les règles de pare-feu gérées par Fail2Ban
sudo iptables -L f2b-sshd -n
Cela affiche les règles de pare-feu Fail2Ban actives pour la jail sshd. La chaîne `f2b-sshd` contient toutes les adresses IP bannies. Avec `nftables`, utilisez `sudo nft list ruleset` et filtrez sur `f2b-`.
Vérification
Vérifiez que Fail2Ban fonctionne correctement :
sudo fail2ban-client status
Cela affiche toutes les jails actives. Pour chaque jail, vous voyez le nombre d'adresses IP bannies. Pour confirmer qu'une adresse IP spécifique est bloquée :
sudo fail2ban-client status sshd | grep "Banned IP list"
Une liste vide signifie qu'aucune adresse IP n'est bloquée. C'est normal sur un serveur bien sécurisé.
Problèmes fréquents
Fail2Ban ne démarre pas après une modification de configuration
Vérifiez la configuration pour détecter les erreurs de syntaxe :
sudo fail2ban-client -t
Cela teste tous les fichiers de configuration et affiche les éventuelles erreurs. Cause fréquente : une section `[DEFAULT]` manquante ou un format `bantime` invalide.
Les adresses IP ne sont pas bloquées malgré les tentatives échouées
Vérifiez que le bon fichier journal est suivi. Sur les systèmes avec systemd-journald, vous devrez peut-être adapter la jail :
[sshd]
backend = systemdTestez ensuite si les lignes du journal sont reconnues :
sudo fail2ban-regex systemd[sshd] 'sshd.*Failed password'
Fail2Ban bloque des utilisateurs légitimes
Augmentez `maxretry` ou diminuez `findtime` dans `jail.local`. Vous pouvez aussi définir une liste blanche :
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.0/24Cela empêche que les adresses IP de ces plages soient bloquées. Attention : `ignoreip` s'applique à toutes les jails. Le serveur lui-même tourne rarement en root, ce qui limite l'impact d'une vulnérabilité dans Fail2Ban — mais une configuration `ignoreip` erronée peut exclure tout un sous-réseau de la sécurité.
Fail2Ban lit les fichiers journaux comme `/var/log/auth.log` et active les règles de pare-feu via `fail2ban-server`, tandis que `fail2ban-client` offre l'interface de configuration via une connexion socket. Cette séparation entre serveur et client maintient le système stable, mais signifie aussi que vous devez toujours vérifier les deux processus lorsque vous apportez des modifications — un serveur qui tourne avec une configuration obsolète est tout aussi dangereux qu'un serveur qui ne tourne pas.