Skip to content
VDS · Sécurité

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

ErreurConséquenceSolution
Modifications de jail.confPerdues à la mise à jourÉcrire dans jail.local
Votre adresse absente de ignoreipVous vous bannirez un jourAjoutez-la, ou connectez-vous via la console du panneau
banaction ne correspond pas à votre pare-feuLes bannissements ne sont pas appliquésAlignez-la sur ufw ou nftables
Le filtre ne correspond pas au format du journalSilence au lieu de protectionVérifiez avec fail2ban-regex
Le service ne peut pas lire le journal systemdStatut videDé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.