Linux13 juillet 2026 3 vues

Comment installer et configurer Fail2ban en 2026

Comment installer et configurer Fail2ban en 2026

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 à :

  1. créer /etc/fail2ban/jail.local ;
  2. activer la jail sshd ;
  3. définir maxretry, findtime et bantime ;
  4. tester la configuration avec fail2ban-client -t ;
  5. 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 :

  1. un filtre reconnaît les échecs d'authentification dans les journaux grâce à des expressions régulières ;
  2. une jail compte les échecs provenant de chaque adresse IP ;
  3. une action applique le bannissement avec le pare-feu disponible, par exemple nftables ou iptables.

Image

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.

ImageFail2ban 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 :

  1. jail.conf ;
  2. jail.d/*.conf ;
  3. jail.local ;
  4. 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ètre logpath dans 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 

ImageComment 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 :

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.