Prérequis
- Un VPS Debian 11/12 ou Ubuntu 20.04/22.04/24.04
- Accès root ou sudo
- SSH fonctionnel
- UFW installé (recommandé) ou iptables
Étape 1 : Installation
Mettez à jour le système et installez Fail2ban :
sudo apt update && sudo apt upgrade -y
sudo apt install -y fail2ban
Activez et démarrez le service :
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2ban
Étape 2 : Configuration de base
Ne jamais modifier jail.conf directement : ce fichier est écrasé à chaque mise à jour. Créez plutôt un fichier jail.local :
sudo nano /etc/fail2ban/jail.local
Ajoutez la configuration de base :
[DEFAULT]
# IPs à ne jamais bannir (votre IP fixe, monitoring, etc.)
ignoreip = 127.0.0.1/8 ::1
# Durée du bannissement (10 minutes par défaut, ici 1 heure)
bantime = 1h
# Fenêtre de détection (tentatives sur 10 minutes)
findtime = 10m
# Nombre de tentatives avant bannissement
maxretry = 5
# Backend de lecture des logs (systemd recommandé sur Debian 12+)
backend = systemd
# Action par défaut : bannir l'IP
action = %(action_)s
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 2h
Étape 3 : Activer la jail SSH
La jail SSH protège votre serveur contre les attaques sur le port 22 (ou votre port custom). Si vous avez changé le port SSH, adaptez la directive port :
[sshd]
enabled = true
port = 22022
logpath = %(sshd_log)s
maxretry = 3
bantime = 24h
Rechargez Fail2ban :
sudo systemctl reload fail2ban
Étape 4 : Vérifier le fonctionnement
Listez les jails actives :
sudo fail2ban-client status
Vous devriez voir :
Status
|- Number of jail: 1
`- Jail list: sshd
Inspectez la jail SSH en détail :
sudo fail2ban-client status sshd
Affiche les IPs actuellement bannies, le nombre total de bannissements et le fichier de log surveillé.
Étape 5 : Bannir / débannir manuellement
Bannir une IP immédiatement :
sudo fail2ban-client set sshd banip 203.0.113.10
Débannir une IP (par exemple si vous vous êtes verrouillé) :
sudo fail2ban-client set sshd unbanip 203.0.113.10
Lister toutes les IPs bannies dans toutes les jails :
sudo fail2ban-client banned
Étape 6 : Protéger Nginx
Créez une jail pour bloquer les bots qui scannent votre site :
sudo nano /etc/fail2ban/jail.local
Ajoutez à la fin :
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 24h
[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
Rechargez :
sudo systemctl reload fail2ban
Étape 7 : Notifications par email
Pour recevoir un email à chaque bannissement, éditez jail.local :
[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)s
L'action %(action_mwl)s envoie un email avec les logs de l'attaque et un rapport WHOIS de l'IP bannie.
Installez un MTA si nécessaire :
sudo apt install -y sendmail
Étape 8 : Configuration avancée
Bannissement progressif
Augmentez la durée du bannissement à chaque récidive avec bantime.increment :
[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 7d
Une IP bannie 3 fois finira par être bloquée 1 semaine.
Jail custom pour Plesk
[plesk-postfix]
enabled = true
filter = postfix-sasl
port = smtp,submission,smtps
logpath = /var/log/maillog
maxretry = 5
Whitelist permanente
Ajoutez vos IPs de bureau dans ignoreip :
ignoreip = 127.0.0.1/8 ::1 82.26.157.0/24 ton.ip.fixe
Dépannage
Fail2ban ne démarre pas
Vérifiez les logs :
sudo journalctl -u fail2ban -n 50 --no-pager
Testez la configuration :
sudo fail2ban-client -t
Les bannissements ne fonctionnent pas
Vérifiez que le bon backend est utilisé. Sur Debian 12 et Ubuntu 22.04+, systemd est requis :
[DEFAULT]
backend = systemd
Vérifiez que les filtres regex matchent vos logs :
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Je me suis verrouillé moi-même
Si vous avez un accès noVNC ou console depuis votre espace VeryCloud, connectez-vous et débannissez votre IP :
sudo fail2ban-client set sshd unbanip VOTRE_IP
Commandes utiles
# Statut général
sudo fail2ban-client status
# Statut d'une jail
sudo fail2ban-client status sshd
# Recharger la config sans redémarrer
sudo systemctl reload fail2ban
# Lister toutes les IPs bannies
sudo fail2ban-client banned
# Vider toutes les jails
sudo fail2ban-client unban --all
# Tester un filtre regex
sudo fail2ban-regex /var/log/auth.log sshd
Conclusion
Votre VPS est maintenant protégé contre les attaques par force brute sur SSH, Nginx et d'autres services. Pour aller plus loin :
- Combinez Fail2ban avec une clé SSH et désactivez l'authentification par mot de passe
- Changez le port SSH par défaut (22)
- Installez UFW pour fermer tous les ports non utilisés
- Activez les notifications email pour être alerté en temps réel
Bon sysadmining !
Ressources
- Documentation officielle Fail2ban : https://github.com/fail2ban/fail2ban/wiki
- Tuto VeryCloud — Sécuriser son VPS : https://verycloud.fr/docs/article/how-to-secure-vps
- Tuto VeryCloud — Clé SSH : https://verycloud.fr/docs/article/configure-sshkey-linux


















