Vous cherchez comment installer Fail2ban pour protéger SSH sur un VPS Linux ? Fail2ban surveille les journaux du serveur, détecte les échecs de connexion répétés et demande au pare-feu de bloquer temporairement l'adresse IP responsable.
Ce tutoriel explique étape par étape comment installer et configurer Fail2ban sur Debian 12, Debian 13 et Ubuntu 24.04. Vous apprendrez également à vérifier son fonctionnement, afficher les IP bannies, débannir une adresse, créer une whitelist et protéger Nginx.
Pour installer rapidement Fail2ban sur Debian ou Ubuntu :
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
La configuration complète consiste ensuite à :
- créer
/etc/fail2ban/jail.local; - activer la jail
sshd; - définir
maxretry,findtimeetbantime; - tester la configuration avec
fail2ban-client -t; - vérifier les bannissements avec
fail2ban-client status sshd.
Les sections suivantes détaillent chaque étape et les particularités de systemd sur les versions récentes de Debian.
Avant de commencer : évitez de vous bloquer
Une mauvaise configuration de Fail2ban peut couper votre propre accès SSH. Avant toute modification :
- ouvrez la console web ou noVNC de votre VPS ;
- conservez votre session SSH actuelle ouverte ;
- relevez votre adresse IP publique si elle est fixe ;
- vérifiez le port réellement utilisé par SSH ;
- ne testez pas le bannissement depuis votre unique moyen d'accès au serveur.
Pour connaître le port SSH configuré :
sudo sshd -T | grep '^port '
Si la commande retourne par exemple port 2222, il faudra indiquer port = 2222 dans la jail SSH au lieu de port = ssh.
Comment fonctionne Fail2ban ?
Fail2ban repose sur trois éléments :
- un filtre reconnaît les échecs d'authentification dans les journaux grâce à des expressions régulières ;
- une jail compte les échecs provenant de chaque adresse IP ;
- une action applique le bannissement avec le pare-feu disponible, par exemple nftables ou iptables.

Trois paramètres contrôlent principalement le déclenchement d'un ban :
maxretry: nombre d'échecs autorisés avant le bannissement ;findtime: période pendant laquelle ces échecs sont comptabilisés ;bantime: durée initiale du bannissement.
Avec la configuration maxretry = 5, findtime = 10m et bantime = 1h, une adresse produisant cinq échecs en dix minutes est bloquée pendant une heure.
Fail2ban ne remplace pas l'authentification SSH par clé, un pare-feu correctement configuré ou les mises à jour de sécurité. Il constitue une couche supplémentaire destinée à réduire les tentatives répétées.
Comment installer Fail2ban sur Debian 12/13 ou Ubuntu 24.04 ?
Installez le paquet fourni par votre distribution :
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
Affichez ensuite la version installée et vérifiez que le service répond :
fail2ban-client --version
sudo fail2ban-client ping
sudo fail2ban-client status
Une installation fonctionnelle doit notamment retourner Server replied: pong.
Sur Debian et Ubuntu, le paquet active généralement la jail sshd. Ne supposez toutefois pas que SSH est déjà protégé : contrôlez explicitement son état.
sudo fail2ban-client status sshd
Si la jail n'existe pas, si le service refuse de démarrer ou si aucun journal n'est trouvé, poursuivez avec la configuration ci-dessous.
Cas particulier de Debian 12 et Debian 13
Sur une installation neuve de Debian 12 ou 13, /var/log/auth.log peut être absent, car rsyslog n'est plus installé par défaut. Les événements SSH sont alors conservés dans le journal systemd. Sur un serveur mis à niveau ou sur lequel rsyslog a été installé, le fichier peut toujours exister.
Vérifiez la source disponible :
test -f /var/log/auth.log && echo "auth.log présent" || echo "Journaux systemd probablement utilisés"
sudo journalctl -u ssh --since "10 minutes ago" --no-pager
Si Fail2ban affiche l'erreur Have not found any log file for sshd jail, utilisez le backend systemd présenté dans la section suivante.
Comment configurer Fail2ban pour protéger SSH ?
Ne modifiez pas directement /etc/fail2ban/jail.conf. Ce fichier appartient au paquet et peut évoluer lors d'une mise à jour. Placez uniquement vos personnalisations dans /etc/fail2ban/jail.local ou dans un fichier .local sous /etc/fail2ban/jail.d/.
L'ordre principal de chargement est le suivant :
jail.conf;jail.d/*.conf;jail.local;jail.d/*.local.
Les paramètres lus en dernier remplacent les valeurs précédentes.
Créez le fichier local :
sudo nano /etc/fail2ban/jail.local
Voici une base adaptée à un VPS Linux classique utilisant le journal systemd :
[DEFAULT]
# Durée initiale du bannissement
bantime = 1h
# Compter les échecs sur une période de 10 minutes
findtime = 10m
maxretry = 5
# Allonger la durée lorsqu'une même IP récidive
bantime.increment = true
bantime.factor = 1
bantime.maxtime = 1w
# Adresses qui ne doivent jamais être bannies
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
backend = systemd
port = ssh
Si SSH écoute sur un port personnalisé, remplacez port = ssh :
[sshd]
enabled = true
backend = systemd
port = 2222
Important : avec
backend = systemd, n'ajoutez pas de paramètrelogpathdans la jail. Fail2ban interroge directement le journal systemd.
Pourquoi utiliser des bans progressifs ?
Avec bantime.increment = true, Fail2ban conserve l'historique des bannissements dans sa base locale et augmente progressivement leur durée. Avec les valeurs ci-dessus, les récidives peuvent entraîner des bans d'une heure, puis deux heures, quatre heures, etc., sans dépasser une semaine.
Ce mécanisme réduit l'intérêt des tentatives répétées tout en évitant un bannissement permanent provoqué par une simple erreur humaine. Son efficacité dépend néanmoins du comportement des attaquants : un botnet utilisant de nombreuses adresses différentes ne sera pas arrêté par l'allongement du ban d'une seule IP.
Comment vérifier que Fail2ban fonctionne ?
Testez toujours le chargement de la configuration avant de l'appliquer :
sudo fail2ban-client -t
Si aucune erreur n'est retournée, rechargez Fail2ban et contrôlez la jail SSH :
sudo fail2ban-client reload
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 50 --no-pager
Le test fail2ban-client -t vérifie la configuration, mais ne prouve pas à lui seul que le filtre reconnaît vos journaux ni que le pare-feu bloque réellement les IP. Pour tester le filtre SSH avec systemd :
sudo fail2ban-regex --print-all-matched systemd-journal sshd
Si votre serveur utilise /var/log/auth.log :
sudo fail2ban-regex --print-all-matched /var/log/auth.log sshd
Effectuer un test fonctionnel sans perdre l'accès
Utilisez une seconde connexion Internet, par exemple le partage de connexion d'un téléphone, et provoquez volontairement plusieurs échecs SSH. Gardez votre session d'administration et la console web ouvertes.
Contrôlez ensuite le résultat :
sudo fail2ban-client status sshd
sudo fail2ban-client banned
Vérifiez également que le pare-feu contient une règle Fail2ban. Selon votre système :
sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b
L'une de ces commandes peut ne rien retourner si le serveur utilise uniquement l'autre système de pare-feu.
Comment voir les IP bannies par Fail2ban ?
Voir les jails actives
sudo fail2ban-client status
Voir les IP bannies par la jail SSH
sudo fail2ban-client status sshd
Voir toutes les IP bannies
sudo fail2ban-client banned
Comment débannir une IP avec Fail2ban ?
Si votre adresse a été bloquée après plusieurs erreurs de mot de passe, utilisez la console web du VPS ou une autre connexion autorisée pour lancer les commandes suivantes.
Débannir une IP d'une jail précise
sudo fail2ban-client set sshd unbanip 203.0.113.42
Débannir une IP de toutes les jails
sudo fail2ban-client unban 203.0.113.42
Débannir toutes les IP
Cette commande vide les bannissements de toutes les jails. Utilisez-la uniquement si cela est réellement nécessaire :
sudo fail2ban-client unban --all
Bannir manuellement une IP
sudo fail2ban-client set sshd banip 198.51.100.17
Comment ajouter une IP à la whitelist Fail2ban ?
Le paramètre ignoreip contient les adresses que Fail2ban ne doit jamais bannir. Il accepte des adresses IPv4, IPv6, des plages CIDR et des noms DNS.
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.42 192.0.2.0/24
Rechargez ensuite la configuration :
sudo fail2ban-client -t
sudo fail2ban-client reload
N'ajoutez votre adresse personnelle que si elle est fixe et réellement maîtrisée. Évitez de mettre en whitelist une plage trop large appartenant à un opérateur ou à un VPN public : un attaquant utilisant la même plage ne pourrait plus être banni.
Pour ignorer temporairement une IP dans la jail SSH :
sudo fail2ban-client set sshd addignoreip 203.0.113.42
Cette modification est appliquée en mémoire et n'est pas une configuration persistante. Pour la conserver après un redémarrage ou un rechargement, ajoutez l'adresse dans un fichier .local.
Comment protéger Nginx avec Fail2ban ?
Fail2ban fournit plusieurs filtres Nginx. Deux jails sont particulièrement utiles :
nginx-http-auth, pour les échecs répétés d'authentification HTTP Basic ;nginx-limit-req, pour les requêtes rejetées par la limitation de débit Nginx.
Ajoutez les jails nécessaires dans /etc/fail2ban/jail.local :
[nginx-http-auth]
enabled = true
port = http,https
[nginx-limit-req]
enabled = true
port = http,https
maxretry = 10
La jail nginx-limit-req ne crée pas la limitation de débit à votre place. Nginx doit déjà utiliser les directives limit_req_zone et limit_req, et les refus doivent apparaître dans son journal d'erreurs.
Vérifiez la configuration Nginx et testez le filtre avant d'activer la jail :
sudo nginx -T | grep -E 'limit_req(_zone)?'
sudo fail2ban-regex /var/log/nginx/error.log nginx-limit-req
sudo nginx -t
Rechargez ensuite les deux services :
sudo systemctl reload nginx
sudo fail2ban-client -t
sudo fail2ban-client reload
sudo fail2ban-client status nginx-limit-req
Si Nginx se trouve derrière Cloudflare, un reverse proxy ou un load balancer, configurez d'abord la restauration de l'adresse IP réelle du visiteur. Dans le cas contraire, les journaux peuvent contenir l'adresse du proxy et Fail2ban risque de bloquer celui-ci au lieu du client responsable.
Si votre serveur web n'est pas encore installé, consultez notre guide pour installer Nginx et PHP-FPM sur un VPS.
Pour Windows, le principe équivalent est présenté dans notre guide consacré aux attaques brute-force RDP sur un VPS Windows.
Pourquoi Fail2ban ne fonctionne pas ou ne bannit aucune IP ?
1. Vérifier que le service fonctionne
sudo systemctl --no-pager --full status fail2ban
sudo fail2ban-client ping
sudo journalctl -u fail2ban -n 100 --no-pager
2. Vérifier que la jail est active
sudo fail2ban-client status
sudo fail2ban-client status sshd
3. Contrôler la source des journaux
sudo journalctl -u ssh -n 50 --no-pager
sudo tail -n 50 /var/log/auth.log
La seconde commande échouera normalement si /var/log/auth.log n'existe pas. Dans ce cas, utilisez le backend systemd.
4. Tester le filtre
sudo fail2ban-regex systemd-journal sshd
Si les compteurs restent à zéro malgré de vrais échecs de connexion, vérifiez le service journalisé, le filtre sélectionné, le backend et le port SSH.
5. Vérifier l'action de pare-feu
sudo fail2ban-client get sshd actions
sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b
Fail2ban peut utiliser nftables ou iptables selon la distribution, la version du paquet et votre configuration. Ne forcez pas une action différente sans avoir identifié le pare-feu actuellement utilisé.
Les erreurs les plus fréquentes
S'auto-bannir
Cinq mots de passe incorrects peuvent bloquer votre IP pendant toute la durée définie par bantime. Gardez une console web disponible et placez uniquement vos IP fixes de confiance dans ignoreip.
Modifier directement jail.conf
Les fichiers .conf sont distribués avec le paquet. Utilisez un fichier .local pour conserver une configuration lisible et faciliter les mises à jour.
Oublier le port SSH personnalisé
Fail2ban peut détecter les échecs sans bloquer le bon port si la jail et le service ne sont pas cohérents. Comparez la sortie de sshd -T avec le paramètre port.
Supposer que le test de syntaxe suffit
fail2ban-client -t ne remplace pas un test du filtre et une vérification des règles de pare-feu. Contrôlez les trois niveaux : configuration, détection et bannissement.
Bannir l'adresse d'un reverse proxy
Sans configuration correcte des IP réelles, Fail2ban peut voir uniquement l'adresse de Cloudflare ou du proxy. Corrigez d'abord les journaux Nginx avant d'activer les jails HTTP.
Croire que Fail2ban bloque les attaques DDoS
Fail2ban agit après l'arrivée des connexions sur le serveur. Il peut réduire la force brute applicative, mais ne peut pas empêcher une attaque volumétrique de saturer la liaison réseau en amont.
Renforcer réellement la sécurité du VPS
Pour une défense cohérente, associez Fail2ban à plusieurs mesures :
- utilisez des clés SSH et désactivez l'authentification par mot de passe lorsque cela est possible — consultez notre guide pour configurer une clé SSH sur un VPS Linux ;
- refusez la connexion SSH directe de
root; - n'exposez que les ports nécessaires avec un pare-feu ;
- installez régulièrement les mises à jour de sécurité ;
- surveillez les journaux et les alertes du serveur ;
- conservez un accès de secours à la console ;
- activez HTTPS pour les services web.
Notre guide Certbot : installer un certificat SSL Let's Encrypt complète cette configuration. Vous pouvez également retrouver nos autres tutoriels dans la documentation Linux.
Fail2ban et la protection anti-DDoS répondent à deux risques différents. Fail2ban bloque des comportements identifiés dans les journaux du serveur, tandis que l'anti-DDoS filtre le trafic volumétrique en amont. Les VPS Linux OuiHeberg incluent une protection anti-DDoS et un accès root permettant d'appliquer les réglages de ce guide.
FAQ sur Fail2ban
Fail2ban fonctionne-t-il avec UFW, nftables ou iptables ?
Oui, mais l'action utilisée dépend du paquet et de la configuration du serveur. Vérifiez-la avec sudo fail2ban-client get sshd actions, puis contrôlez les règles avec nft list ruleset ou iptables -S. Évitez d'affirmer qu'un système est utilisé par défaut sans le vérifier sur la machine concernée.
Fail2ban protège-t-il contre les attaques DDoS ?
Non. Il traite principalement les comportements répétitifs visibles dans les journaux, comme les échecs SSH ou HTTP. Une attaque volumétrique doit être filtrée par l'infrastructure réseau de l'hébergeur.
Faut-il changer le port SSH ?
Changer le port SSH réduit généralement le bruit des scans automatisés, mais ne constitue pas une protection forte : un scan complet peut retrouver le nouveau port. Les clés SSH, la désactivation des mots de passe et le filtrage réseau restent prioritaires.
Pourquoi Fail2ban ne bannit-il aucune IP ?
Les causes les plus courantes sont une jail inactive, un mauvais backend, un journal absent, un filtre qui ne correspond pas aux logs ou une action de pare-feu incorrecte. Vérifiez successivement status, fail2ban-regex, les journaux du service et les règles du pare-feu.
Sources et méthode de vérification
Ce guide a été vérifié à partir des ressources officielles suivantes :
- configuration officielle de Fail2ban et paramètres de jail ;
- manuel
jail.confde Fail2ban 1.1.0 sous Debian 13 ; - manuel
fail2ban-clientde Fail2ban 1.1.0 ; - manuel de test des filtres avec
fail2ban-regex; - notes de Debian 12 sur le passage de rsyslog à systemd-journald par défaut ;
- paquet Fail2ban 1.0.2 fourni avec Ubuntu 24.04 LTS.
Les commandes doivent toujours être contrôlées sur le serveur cible, car un port SSH personnalisé, un pare-feu remplacé ou une journalisation modifiée peuvent changer le résultat.
Conclusion
Une configuration Fail2ban fiable ne se limite pas à installer le paquet. Il faut vérifier que la jail est active, que le filtre reconnaît réellement les échecs et que le pare-feu applique le bannissement.
Pour un VPS Debian ou Ubuntu classique, une jail SSH avec cinq tentatives sur dix minutes, un ban initial d'une heure et des durées progressives constitue une base raisonnable. Adaptez toutefois ces valeurs à vos utilisateurs, conservez un accès de secours et associez Fail2ban à des clés SSH, un pare-feu strict et des mises à jour régulières.
Fail2ban est un logiciel libre et fonctionne chez tous les hébergeurs compatibles. Si vous recherchez un environnement Linux avec accès root et protection anti-DDoS, découvrez les VPS Linux NVMe OuiHeberg.
