Fail2ban contre le brute force de mots de passe
Comment installer et configurer Fail2ban : blocage du brute force SSH et des formulaires web, mise en liste blanche de vos propres adresses, vérification du fonctionnement et déblocage de vous-même.
Mis à jour le 23 août 2026
Fail2ban lit les journaux, compte les tentatives de connexion échouées provenant d'une même adresse et la bloque temporairement via une règle de pare-feu. Il ne remplace pas la connexion par clé, mais il élimine la majeure partie du trafic de force brute en arrière-plan et allège vos journaux.
Installation et configuration de base
apt install -y fail2ban
Utilisez votre propre fichier, /etc/fail2ban/jail.local — les modifications de jail.conf sont écrasées par les mises à jour :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.5
banaction = ufw
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 24h
systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd
Placez votre adresse personnelle ou professionnelle dans ignoreip — c'est votre assurance contre un bannissement de votre propre personne. Si votre adresse change, la console du panneau à /hosting/vds/m/<id> reste votre filet de sécurité : elle fonctionne indépendamment du réseau et des règles.
banaction doit correspondre à votre pare-feu : ufw pour ufw, nftables-multiport pour nftables.
Où vérifier le résultat
fail2ban-client status sshd
tail -f /var/log/fail2ban.log
journalctl -u fail2ban -n 50
Le statut affiche le nombre de tentatives échouées et la liste des adresses bannies. Sur une adresse publique, un décompte quotidien de plusieurs centaines est normal, ce n'est pas le signe d'une attaque ciblée.
Débannir une adresse (y compris la vôtre) :
fail2ban-client set sshd unbanip 203.0.113.5
Protection au-delà de SSH
Fail2ban peut fonctionner avec n'importe quel journal qui montre des tentatives échouées.
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log
[postfix-sasl]
enabled = true
Pour votre propre application, vous aurez besoin d'un filtre — un fichier dans /etc/fail2ban/filter.d/ avec une expression régulière dans laquelle l'adresse est marquée comme <HOST> :
[Definition]
failregex = ^.*login failed.*ip=<HOST>.*$
ignoreregex =
Testez l'expression sur un journal réel :
fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf
Cette commande indique combien de lignes correspondent. Zéro correspondance signifie que la règle est erronée — et une protection qui échoue silencieusement est pire que pas de protection du tout.
Erreurs courantes
| Erreur | Conséquence | Solution |
|---|---|---|
Modifications de jail.conf | Perdues à la mise à jour | Écrire dans jail.local |
Votre adresse absente de ignoreip | Vous vous bannirez un jour | Ajoutez-la, ou connectez-vous via la console du panneau |
banaction ne correspond pas à votre pare-feu | Les bannissements ne sont pas appliqués | Alignez-la sur ufw ou nftables |
| Le filtre ne correspond pas au format du journal | Silence au lieu de protection | Vérifiez avec fail2ban-regex |
| Le service ne peut pas lire le journal systemd | Statut vide | Définissez backend = systemd |
Testez pour de vrai : saisissez délibérément le mauvais mot de passe le nombre de fois requis depuis une adresse externe et confirmez qu'elle finit dans la liste des bannies. Un fail2ban non configuré crée un faux sentiment de sécurité.
Complétez le tout avec une limitation du débit de connexion dans le pare-feu lui-même — ufw limit 22/tcp.