Offre Durée limitée : -10% sur tout le site avec le code WELCOME10

Installer et configurer Fail2ban sur un VPS Linux pour bloquer les attaques SSH

Mis à jour le 29 septembre 2026 7 min de lecture 11 sections

Votre VPS Linux reçoit des centaines de tentatives de connexion SSH par jour dès sa mise en ligne. Fail2ban surveille les logs système et bannit automatiquement les adresses IP qui dépassent un seuil de tentatives échouées. Ce guide vous montre comment l'installer et le configurer sur Ubuntu ou Debian, protéger SSH et d'autres services exposés (Nginx, Apache, Postfix, MySQL), et gérer les bans depuis la ligne de commande.

Ce que fait Fail2ban

Fail2ban est un logiciel de prévention d'intrusion (IPS) libre, disponible dans les dépôts officiels de toutes les distributions Linux courantes. Il lit les journaux système (auth.log, syslog, journald) à la recherche de patterns d'échecs répétés : tentatives de connexion SSH, connexions TCP refusées, requêtes HTTP malformées, tentatives d'authentification sur un service web. Quand un seuil est atteint, il déclenche une action de bannissement via le pare-feu réseau.

Par défaut, Fail2ban utilise iptables ou nftables pour bloquer l'adresse IP fautive pendant une durée configurable. Sur Ubuntu avec UFW actif, il peut déléguer les bans à UFW directement. Contrairement à une liste statique, Fail2ban réagit dynamiquement aux attaques en cours sans intervention manuelle.

Fail2ban est particulièrement utile sur un serveur web ou un VPS Linux exposé sur Internet, où les scripts automatisés scannent en permanence les ports SSH et les interfaces d'administration PHP (WordPress, Plesk, cPanel). Il complète la protection DDoS de votre hébergeur en filtrant les attaques applicatives que la mitigation volumétrique ne couvre pas.

Installation sur Ubuntu ou Debian

Fail2ban est disponible dans les dépôts officiels d'Ubuntu et Debian. L'installation se fait en une seule commande avec apt sur votre serveur Linux :

sudo apt update
sudo apt install fail2ban

Après l'installation, le service est démarré automatiquement. Vérifiez son état :

sudo systemctl status fail2ban

Activez-le au démarrage si ce n'est pas déjà fait :

sudo systemctl enable --now fail2ban

Sur Rocky Linux ou AlmaLinux (paquets RPM), utilisez dnf install fail2ban à la place d'apt. Sur CentOS, le package est disponible via le dépôt EPEL.

Configuration de base : jail.local

Fail2ban lit d'abord /etc/fail2ban/jail.conf, puis les fichiers .local qui le surchargent. Ne modifiez jamais jail.conf directement; copiez-le en jail.local :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Ouvrez jail.local dans un éditeur :

sudo nano /etc/fail2ban/jail.local

Les paramètres globaux importants se trouvent dans la section [DEFAULT] :

[DEFAULT]
# IPs exclues du bannissement (votre propre IP de gestion)
ignoreip = 127.0.0.1/8 ::1

# Durée de bannissement (1 heure)
bantime  = 1h

# Fenêtre d'observation pour compter les échecs (10 minutes)
findtime = 10m

# Nombre maximal d'échecs avant bannissement
maxretry = 5

Si vous utilisez UFW comme pare-feu, ajoutez dans la section [DEFAULT] :

banaction = ufw

Configurer la jail SSH

La jail SSH est la plus couramment utilisée. Elle surveille les tentatives de connexion SSH échouées dans les journaux système. Ajoutez ou adaptez cette section dans jail.local :

[sshd]
enabled  = true
port     = ssh
maxretry = 3
findtime = 10m
bantime  = 3h
logpath  = %(sshd_log)s
backend  = %(sshd_backend)s

Paramètres clés :

  • enabled = true : active la jail.
  • port = ssh : surveille le port 22 (ou remplacez par le numéro de port si vous avez changé le port SSH).
  • maxretry = 3 : 3 connexions SSH échouées dans la fenêtre findtime déclenchent le ban.
  • bantime = 3h : l'adresse IP est bloquée pendant 3 heures.
  • logpath et backend : automatiquement résolus selon la distribution (auth.log pour Debian/Ubuntu, systemd pour les distros récentes).

Appliquez la configuration en redémarrant Fail2ban :

sudo systemctl restart fail2ban

Vérifier le statut des jails

La commande fail2ban-client permet d'inspecter l'état de Fail2ban en temps réel.

Lister toutes les jails actives :

sudo fail2ban-client status

Afficher le détail d'une jail spécifique, avec la liste des IPs bannies :

sudo fail2ban-client status sshd

Vérifier la configuration active d'une jail (bantime, maxretry, findtime) :

sudo fail2ban-client get sshd bantime
sudo fail2ban-client get sshd maxretry
sudo fail2ban-client get sshd findtime

Bannir et débannir une adresse IP manuellement

Pour tester Fail2ban ou corriger une erreur, vous pouvez bannir et débannir des IPs manuellement :

Bannir une IP dans la jail sshd :

sudo fail2ban-client set sshd banip 192.0.2.1

Débannir une IP (utile si vous vous êtes bloqué vous-même) :

sudo fail2ban-client set sshd unbanip 192.0.2.1

Important : avant toute manipulation, ajoutez votre propre adresse IP dans le paramètre ignoreip pour ne jamais risquer de vous bannir. Si vous vous bloquez malgré tout, utilisez la console KVM de votre hébergeur pour vous reconnecter en tant que root.

Protéger Nginx, Apache et Postfix

Fail2ban inclut des jails prêtes à l'emploi pour les serveurs web et les services mail. Ces jails analysent les logs des services et bloquent les IPs malveillantes au niveau du pare-feu réseau. Elles sont particulièrement utiles si vous hébergez des sites web ou un serveur mail sur votre VPS Linux.

Pour protéger Nginx contre les tentatives de force brute sur une page d'authentification :

[nginx-http-auth]
enabled  = true
maxretry = 5
bantime  = 1h

Pour Apache :

[apache-auth]
enabled  = true
maxretry = 5
bantime  = 1h

Pour Postfix (serveur mail SMTP) :

[postfix]
enabled  = true
maxretry = 5
bantime  = 1h

Vérifiez que logpath pointe vers les bons fichiers de logs si vous avez une configuration personnalisée. Les scripts PHP d'authentification malformés (tentatives de connexion sur des CMS comme WordPress ou Joomla) peuvent également être filtrés avec la jail php-url-fopen. La jail mysqld-auth protège les tentatives d'accès sur les bases de données MySQL exposées.

Fail2ban et résolution DNS

Par défaut, Fail2ban ne résout pas les noms de domaine (DNS) pour les IPs bannies, ce qui est intentionnel : la résolution DNS inverse ajouterait de la latence et des dépendances réseau dans le chemin critique de bannissement. Si vous avez besoin d'identifier l'origine d'une IP bannie, utilisez host ou dig manuellement une fois le ban appliqué.

Vérifiez également que la résolution DNS de votre serveur Linux est fonctionnelle avant d'activer les jails qui nécessitent des lookups (comme la jail recidive qui centralise les bans multi-jails). Consultez notre guide diagnostiquer une résolution DNS défaillante si nécessaire.

Consulter les logs Fail2ban

Fail2ban écrit ses propres journaux dans /var/log/fail2ban.log. Pour suivre les bans en temps réel :

sudo tail -f /var/log/fail2ban.log

Vous y verrez les lignes Ban et Unban avec les IPs et les jails concernées. Pour rechercher les bans SSH du jour :

sudo grep "Ban" /var/log/fail2ban.log | grep sshd

Bonnes pratiques

  • Augmentez bantime progressivement : un bantime d'une heure suffit au démarrage, mais 24h ou 48h est recommandé sur un serveur Linux exposant des services admin ou des sites web à fort trafic.
  • Sauvegardez votre configuration : incluez /etc/fail2ban/ dans vos sauvegardes de configuration. Un backup automatique (rsync ou tar) doit couvrir ce répertoire.
  • Ressources système : Fail2ban consomme peu de RAM et de CPU même sur un petit VPS. Adaptez le nombre de jails actives si votre serveur Linux est très limité en ressources.
  • Combinez avec les clés SSH : désactiver l'authentification par mot de passe dans sshd_config supprime l'essentiel des attaques brute-force avant même que Fail2ban ne soit sollicité.
  • Certificat SSL et HTTPS : sur un serveur web, activez HTTPS avec un certificat SSL valide et redirigez tout le trafic HTTP vers HTTPS pour réduire la surface d'attaque couverte par les jails Nginx/Apache.

Aller plus loin

Fail2ban est un premier rempart efficace contre les attaques par force brute sur SSH et les services web, mais il ne remplace pas une configuration SSH solide. Combinez-le avec les guides suivants pour une protection complète de votre serveur Linux :

Votre VPS Linux est prêt pour la production ? Déployez un serveur sécurisé avec protection DDoS incluse chez ElypseCloud.

Voir les offres VPS Linux