Ce guide s'appuie sur le fichier jail.conf livré par le projet et sur le wiki de fail2ban, consultés le 14 octobre 2026.
Ce que fait fail2ban, et ce qu'il ne fait pas
Chaque « prison » (jail) surveille un service : elle lit son journal, compte les échecs d'une même adresse et, au-delà d'un seuil, ajoute une règle de pare-feu qui bloque cette adresse pendant une durée donnée. Fail2ban réduit le bruit et ralentit les attaques par force brute. Il ne remplace ni la connexion SSH par clé, ni des mises à jour régulières.
Installer fail2ban
- Installez le paquet :
sudo apt updatepuissudo apt install fail2ban. - Activez le service au démarrage :
sudo systemctl enable --now fail2ban. - Vérifiez qu'il tourne :
sudo fail2ban-client statusliste les prisons actives.
Par défaut, toutes les prisons sont désactivées, comme le rappelle jail.conf : il faut activer celles dont vous avez besoin.
Régler la prison SSH
Le fichier /etc/fail2ban/jail.conf porte cet avertissement : ne pas le modifier, il sera remplacé à la prochaine mise à jour. Les réglages vont dans jail.local ou dans un fichier de /etc/fail2ban/jail.d/ qui finit par .local.
Créez par exemple /etc/fail2ban/jail.d/ssh.local :
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
bantime.increment = true
- `maxretry` et `findtime` fixent le seuil : ici, cinq échecs en dix minutes. Les valeurs par défaut de
jail.confsont les mêmes. - `bantime` fixe la durée du bannissement. La valeur par défaut est de dix minutes, une heure est plus dissuasive.
- `bantime.increment` allonge le bannissement des adresses qui reviennent après un premier bannissement, à partir de la base de données de fail2ban.
- `backend = systemd` fait lire le journal de systemd plutôt qu'un fichier : c'est ce qu'il faut sur les systèmes récents où SSH n'écrit plus dans
/var/log/auth.log. - Rechargez la configuration :
sudo fail2ban-client reload.
Pour ne jamais bannir votre propre adresse, ajoutez une ligne ignoreip dans la section, avec les adresses ou plages séparées par des espaces.
Les commandes du quotidien
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-client unban 203.0.113.10
sudo fail2ban-client -d
La première liste les prisons, la deuxième montre les adresses bannies par la prison SSH, la troisième débannit une adresse partout, la dernière affiche la configuration complète telle que fail2ban la lit, pratique pour vérifier qu'un réglage a bien été pris.
Protéger un service qui tourne dans Docker
Un port publié par un conteneur ne passe pas par la chaîne INPUT du pare-feu du serveur, celle où fail2ban place ses règles par défaut : une adresse bannie de SSH peut donc encore atteindre un service Docker. Le wiki consacré à Docker recommande de régler la chaîne prison par prison, avec chain = DOCKER-USER pour les services en conteneur, et de laisser les autres sur INPUT :
[DEFAULT]
chain = INPUT
[sshd]
enabled = true
[apache-auth]
enabled = true
logpath = /chemin/vers/les/journaux/*error_log
chain = DOCKER-USER
Basculer toutes les prisons sur DOCKER-USER serait l'erreur inverse : SSH, qui tourne directement sur le serveur, ne serait plus protégé. Pour un service en conteneur, la prison doit aussi pouvoir lire ses journaux : montez-les dans un dossier du serveur, ou faites écrire le conteneur dans le journal de systemd.
Sur un VPS Hubspace
Fail2ban est installé et actif à la livraison, avec cette prison SSH (fichier /etc/fail2ban/jail.d/hubspace.local) :
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
bantime.increment = true
- Cinq essais en dix minutes valent un bannissement d'une heure, qui s'allonge si l'adresse récidive. La connexion se fait par clé seulement : les robots qui essaient des mots de passe échouent de toute façon, fail2ban les écarte plus vite.
- Vous pouvez ajouter vos propres prisons dans d'autres fichiers
.localdu même dossier. Le fichier de Hubspace n'est réécrit qu'à une réinstallation du serveur. - Le pare-feu réseau, en amont du serveur, n'ouvre que les ports 22, 80 et 443. Les services Docker exposés passent normalement derrière un proxy en HTTPS, sur 443 : c'est là qu'une prison DOCKER-USER prend son sens, en lisant les journaux du proxy.
- Si vous vous bannissez vous-même, connectez-vous depuis une autre adresse et lancez
sudo fail2ban-client unbanavec votre adresse, ou attendez la fin du bannissement. En dernier recours, le support peut vous rendre l'accès.
Pour la connexion elle-même, voir se connecter en SSH et la page des serveurs VPS.
Questions fréquentes
Fail2ban suffit-il à protéger SSH ?
Non. La protection principale est la connexion par clé, avec les mots de passe désactivés. Fail2ban s'ajoute par-dessus : il réduit le volume des tentatives et le bruit dans les journaux.
Pourquoi mes bannissements n'empêchent-ils pas l'accès à un conteneur ?
Parce que le trafic vers un port publié par Docker passe par une autre chaîne du pare-feu que celle où fail2ban écrit par défaut. Réglez chain = DOCKER-USER sur la prison qui protège ce service.
Où voir ce que fail2ban a fait ?
sudo fail2ban-client status sshd donne le nombre d'échecs et les adresses bannies. Le détail est dans le journal du service : sudo journalctl -u fail2ban.
Articles liés
- Coolify : installer et configurer sur un VPSInstaller Coolify sur un VPS Ubuntu ou Debian, ouvrir son tableau de bord sans l'exposer, puis le servir sur votre domaine en HTTPS : la marche à suivre.
- Dokploy : installer et configurer sur un VPSInstaller Dokploy sur un VPS Linux, atteindre son interface par un tunnel SSH, puis la servir sur votre domaine en HTTPS avec Let's Encrypt : le guide complet.
- Nginx Proxy Manager : installer et configurerInstaller Nginx Proxy Manager avec Docker Compose, protéger son interface d'administration et publier ses applications en HTTPS avec Let's Encrypt, pas à pas.