Installer et configurer Fail2ban sur Debian / Ubuntu

Installer et configurer Fail2ban sur Debian / Ubuntu

Fail2ban est un outil de protection qui analyse en continu les logs de votre serveur pour détecter les tentatives de connexion suspectes. Lorsqu'une adresse IP dépasse un seuil défini de tentatives échouées, elle est automatiquement bloquée au pare-feu pour une durée configurable.C'est la première ligne de défense indispensable d'un VPS exposé sur Internet : sans Fail2ban, votre serveur SSH reçoit des milliers de tentatives de connexion par jour de la part de bots qui scannent l'espace IP

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

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres