Protéger votre VPS des attaques par force brute avec Fail2ban
Votre VPS subit des milliers de tentatives de connexion automatisées. Fail2ban détecte ces attaques et bannit les IP fautives. Voici comment l'installer et le configurer.
Le problème : les attaques par force brute contre SSH
Fail2ban VPS protège votre serveur contre les tentatives répétées d’authentification, notamment sur SSH. Une adresse IP publique peut être rapidement détectée par des outils automatisés qui testent des noms d’utilisateur et des mots de passe.
Le volume varie selon l’adresse IP, les services exposés et la durée de fonctionnement du serveur. Vous pouvez néanmoins constater de nombreuses tentatives dans les journaux d’authentification, même si vous n’avez communiqué l’adresse du VPS à personne.
Fail2ban fonctionne selon ce principe :
Tentatives de connexion échouées
↓
Lecture des journaux par Fail2ban
↓
Dépassement du nombre autorisé
↓
Ajout temporaire d'une règle de blocage
Fail2ban ne bloque pas une attaque avant qu’elle ne commence. Il analyse les journaux, reconnaît les échecs correspondant à un filtre, puis déclenche une action de bannissement lorsqu’une adresse dépasse le seuil configuré.
Il complète plusieurs protections indispensables :
- authentification SSH par clé ;
- désactivation de la connexion par mot de passe ;
- utilisation d’un utilisateur non-root ;
- pare-feu limitant les ports accessibles ;
- mises à jour régulières du système.
Fail2ban ne remplace pas une clé SSH ni un pare-feu. Il ajoute une protection dynamique contre les tentatives répétées provenant d’une même adresse IP.
Installer Fail2ban sur Debian ou Ubuntu
Connectez-vous au serveur avec un utilisateur disposant de sudo. Consultez le guide pour vous connecter à un VPS en SSH si votre accès n’est pas encore configuré.
Mettez à jour l’index des paquets :
sudo apt update
Installez Fail2ban :
sudo apt install -y fail2ban
Activez et démarrez le service :
sudo systemctl enable --now fail2ban
Vérifiez son état :
sudo systemctl status fail2ban
Le résultat attendu contient :
Active: active (running)
Vous pouvez également vérifier la communication avec le serveur Fail2ban :
sudo fail2ban-client ping
Réponse attendue :
Server replied: pong
Si le service ne démarre pas encore, ne concluez pas immédiatement à un problème d’installation. Une jail activée avec un journal introuvable ou une erreur dans la configuration peut empêcher Fail2ban de fonctionner.
Pour renforcer les autres éléments du serveur, consultez le guide pour sécuriser votre serveur Linux.
Configurer Fail2ban dans jail.local
Les réglages distribués avec le paquet se trouvent notamment dans :
/etc/fail2ban/jail.conf
Ne modifiez pas directement ce fichier. Il appartient au paquet et peut évoluer ou être remplacé pendant une mise à jour.
Créez plutôt un fichier local contenant uniquement vos personnalisations :
sudo nano /etc/fail2ban/jail.local
N’éditez pas
jail.conf. Placez vos changements dansjail.localou dans un fichier.localsousjail.d/afin de préserver votre configuration lors des mises à jour.
Il n’est pas nécessaire de recopier l’intégralité de jail.conf. Un petit fichier contenant uniquement les valeurs modifiées est plus simple à comprendre et à maintenir.
La structure générale utilise des sections :
[DEFAULT]
# Réglages communs aux jails
[sshd]
# Réglages propres à SSH
Fail2ban charge d’abord les fichiers .conf, puis applique les valeurs définies dans les fichiers .local.
Avant de redémarrer le service, testez la configuration :
sudo fail2ban-client -t
Si le test ne signale pas d’erreur, vous pouvez appliquer les changements.
Configurer la jail SSH de Fail2ban VPS
Ajoutez une configuration proche de celle-ci dans /etc/fail2ban/jail.local :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
backend = systemd
Les paramètres principaux sont :
| Paramètre | Fonction |
|---|---|
enabled | Active ou désactive la jail |
port | Port ou nom du service à protéger |
maxretry | Nombre d’échecs autorisés |
findtime | Fenêtre pendant laquelle les échecs sont comptés |
bantime | Durée du bannissement |
backend | Source utilisée pour lire les événements |
Avec cet exemple, une adresse est bannie pendant une heure si cinq échecs reconnus sont détectés en dix minutes.
5 échecs
dans une période de 10 minutes
→ bannissement pendant 1 heure
Adaptez les valeurs à votre usage. Un seuil trop faible peut bloquer un utilisateur légitime qui se trompe plusieurs fois. Un seuil trop élevé réduit l’intérêt du mécanisme.
Utiliser un port SSH personnalisé
Si SSH écoute sur un autre port, remplacez :
port = ssh
par le port réel :
port = 2222
Vérifiez le port actif avec :
sudo sshd -T | grep '^port'
La modification du port SSH ne supprime pas le besoin de Fail2ban. Les scanners peuvent également découvrir des services placés sur des ports non standards.
Utiliser le backend systemd
Sur les systèmes où SSH écrit dans le journal systemd plutôt que dans /var/log/auth.log, utilisez :
backend = systemd
Dans ce cas, ne définissez pas inutilement un logpath vers un fichier absent.
Une erreur caractéristique est :
Have not found any log file for sshd jail
Le backend systemd permet à Fail2ban de surveiller directement les événements disponibles dans le journal.
Testez et redémarrez :
sudo fail2ban-client -t
sudo systemctl restart fail2ban
Puis contrôlez le service :
sudo systemctl status fail2ban
Éviter de bannir votre propre adresse avec ignoreip
Fail2ban peut aussi bloquer votre adresse si vous accumulez les échecs de connexion. Vous pouvez exclure une adresse IP fixe et maîtrisée avec ignoreip.
Dans la section [DEFAULT] :
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.25
bantime = 1h
findtime = 10m
maxretry = 5
Remplacez 203.0.113.25 par votre véritable adresse IP publique fixe.
Vous pouvez vérifier votre adresse publique depuis votre réseau habituel, puis vous assurer qu’elle ne change pas régulièrement avant de l’ajouter.
N’ajoutez pas un réseau trop large dans
ignoreip. Toutes les adresses correspondantes échapperaient aux bannissements, y compris une adresse potentiellement hostile.
Si votre connexion utilise une adresse dynamique, la whitelist peut devenir obsolète. Dans ce cas, privilégiez :
- une authentification par clé SSH ;
- une session de secours maintenue pendant les tests ;
- une console de récupération accessible depuis votre espace client ;
- des seuils raisonnables.
Avant de redémarrer Fail2ban, gardez votre session SSH actuelle ouverte. Testez ensuite une nouvelle connexion dans un second terminal.
Le guide sur la connexion SSH par clé permet de réduire fortement le risque lié aux mots de passe.
Vérifier et gérer les bannissements
Affichez les jails actives :
sudo fail2ban-client status
Vous devez retrouver une ligne contenant :
Jail list: sshd
Affichez le détail de la jail SSH :
sudo fail2ban-client status sshd
Le résultat indique notamment :
- les échecs actuellement détectés ;
- le nombre total d’échecs ;
- les adresses actuellement bannies ;
- le nombre total de bannissements.
Exemple de structure :
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| `- Total failed: 12
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 198.51.100.20
Débannir une adresse IP
Si une adresse légitime a été bloquée :
sudo fail2ban-client set sshd unbanip 198.51.100.20
Vérifiez ensuite :
sudo fail2ban-client status sshd
N’ajoutez pas systématiquement chaque adresse débannie dans ignoreip. Recherchez d’abord pourquoi les échecs se sont produits.
Consulter les journaux
Affichez les événements récents du service :
sudo journalctl -u fail2ban -n 100 --no-pager
Suivez-les en direct :
sudo journalctl -u fail2ban -f
Selon la configuration du paquet, un journal peut également exister ici :
/var/log/fail2ban.log
Vous pouvez le suivre avec :
sudo tail -f /var/log/fail2ban.log
Les événements utiles contiennent généralement :
Found
Ban
Unban
Pour appliquer une modification :
sudo fail2ban-client -t
sudo systemctl restart fail2ban
Vérifiez toujours le statut après le redémarrage.
Protéger d’autres services
Fail2ban peut surveiller d’autres applications lorsqu’un filtre adapté existe et que le service produit des journaux exploitables.
Des jails sont notamment disponibles ou peuvent être configurées pour :
- Nginx ;
- Apache ;
- certains services de messagerie ;
- des systèmes d’authentification web ;
- des applications produisant des logs structurés.
N’activez pas une jail au hasard. Vérifiez :
- que le service concerné est réellement installé ;
- que son filtre correspond au format de vos logs ;
- que la source de journal existe ;
- que l’action de bannissement convient à votre pare-feu ;
- que les faux positifs sont maîtrisés.
Pour SSH, associez Fail2ban à un pare-feu correctement configuré. Le guide du pare-feu UFW sur un VPS explique comment fermer les ports inutiles.
Des sauvegardes automatiques sont incluses pour vous aider à restaurer. Conservez aussi vos propres exports réguliers : vous restez responsable de vos données.
En résumé
- Fail2ban VPS analyse les journaux et bloque temporairement les adresses dépassant un seuil d’échecs.
- Installez-le avec
sudo apt install -y fail2ban. - Activez le service avec
sudo systemctl enable --now fail2ban. - Ne modifiez jamais directement
/etc/fail2ban/jail.conf. - Placez vos personnalisations dans
/etc/fail2ban/jail.local. - Activez la protection SSH avec une section
[sshd]. - Configurez
maxretry,findtimeetbantimeselon votre usage. - Utilisez
backend = systemdsi les événements SSH se trouvent dans le journal systemd. - Indiquez le véritable port si SSH n’utilise pas le port standard.
- Ajoutez uniquement une adresse fixe et fiable dans
ignoreip. - Gardez une session de secours ouverte pendant les tests.
- Testez la configuration avec
fail2ban-client -t. - Vérifiez les bannissements avec
fail2ban-client status sshd. - Débannissez une adresse avec
fail2ban-client set sshd unbanip ADRESSE_IP. - Fail2ban complète la clé SSH et UFW, mais ne les remplace pas.
- Pour utiliser Fail2ban VPS sur une infrastructure hébergée en France avec stockage NVMe, Anti-DDoS L3/L4/L7 inclus, panel de gestion et support francophone, découvrez les offres VPS TalCloud.