Linux

Fail2ban — Protection anti-brute force

Installer et configurer Fail2ban pour détecter et bloquer automatiquement les tentatives d'intrusion par force brute sur vos services.

← Retour aux tutoriels Linux
📚 C'est quoi Fail2ban ? Fail2ban est un outil de prévention d'intrusion qui surveille les fichiers de logs de vos services (SSH, Nginx, Apache…). Quand il détecte un nombre anormal de tentatives de connexion échouées depuis une même adresse IP, il bloque automatiquement cette IP via le pare-feu (iptables/nftables). C'est votre première ligne de défense contre les attaques par force brute.
ⓘ Prérequis Un serveur Linux avec un pare-feu actif (iptables, nftables ou UFW). Un service exposé à protéger (SSH, serveur web…).

Installation

# Debian / Ubuntu
sudo apt update
sudo apt install fail2ban -y

# CentOS / RHEL / Fedora
sudo dnf install fail2ban -y

# Active et démarre Fail2ban
sudo systemctl enable --now fail2ban

# Vérifie que Fail2ban fonctionne
sudo systemctl status fail2ban
sudo fail2ban-client status
⚠ Ne modifiez pas les fichiers par défaut Ne modifiez jamais /etc/fail2ban/jail.conf directement — il sera écrasé lors des mises à jour. Créez toujours vos configurations dans /etc/fail2ban/jail.local ou dans /etc/fail2ban/jail.d/.

Protéger SSH

# Crée votre configuration personnalisée
sudo nano /etc/fail2ban/jail.local

Contenu du fichier :

[DEFAULT]
# Durée du bannissement (10 minutes)
bantime  = 10m

# Fenêtre d'observation (10 minutes)
findtime = 10m

# Nombre de tentatives avant bannissement
maxretry = 5

# Adresses IP à ne JAMAIS bannir (votre IP admin !)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

# Action par défaut : bannir via iptables
banaction = iptables-multiport

[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log       # Debian/Ubuntu
# logpath = /var/log/secure        # CentOS/RHEL
maxretry = 3                       # Plus strict pour SSH : 3 essais
bantime  = 1h                      # Banni pendant 1 heure
# Redémarre Fail2ban pour appliquer la config
sudo systemctl restart fail2ban

# Vérifie que la jail SSH est active
sudo fail2ban-client status sshd
# Status for the jail: sshd
# |- Filter
# |  |- Currently failed: 2
# |  |- Total failed:     15
# |  `- File list:        /var/log/auth.log
# `- Actions
#    |- Currently banned: 1
#    |- Total banned:     3
#    `- Banned IP list:   203.0.113.42

Protéger Nginx / Apache

# Ajoutez ces jails dans /etc/fail2ban/jail.local

# Protège contre les scans d'authentification HTTP
[nginx-http-auth]
enabled  = true
port     = http,https
filter   = nginx-http-auth
logpath  = /var/log/nginx/error.log
maxretry = 5
bantime  = 30m

# Protège contre les requêtes malveillantes (scans de vulnérabilités)
[nginx-botsearch]
enabled  = true
port     = http,https
filter   = nginx-botsearch
logpath  = /var/log/nginx/access.log
maxretry = 10
bantime  = 1h

# Pour Apache
[apache-auth]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 5
bantime  = 30m
# Redémarre pour appliquer
sudo systemctl restart fail2ban

# Liste toutes les jails actives
sudo fail2ban-client status

Bannissement progressif (récidivistes)

# Crée un filtre pour les récidivistes dans jail.local

[recidive]
enabled  = true
filter   = recidive
logpath  = /var/log/fail2ban.log   # Surveille les logs de Fail2ban lui-même
bantime  = 1w                      # Banni pendant 1 semaine
findtime = 1d                      # Si banni 3 fois en 24h...
maxretry = 3                       # ...bannissement longue durée
💡 Bannissement progressif La jail recidive surveille les logs de Fail2ban. Si une IP est bannie 3 fois en 24h (récidiviste), elle est bloquée pendant une semaine entière. C'est très efficace contre les botnets.

Gérer les bannissements

# Voir les IP bannies pour une jail spécifique
sudo fail2ban-client status sshd

# Débannir une IP (si vous vous êtes banni par erreur !)
sudo fail2ban-client set sshd unbanip 192.168.1.100

# Bannir manuellement une IP
sudo fail2ban-client set sshd banip 203.0.113.42

# Voir toutes les IP bannies sur toutes les jails
sudo fail2ban-client banned

# Vérifie les règles iptables créées par Fail2ban
sudo iptables -L f2b-sshd -n --line-numbers

# Consulte les logs de Fail2ban
sudo tail -f /var/log/fail2ban.log

# Test : simule une détection (vérifie que le filtre matche les logs)
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
ⓘ Vous vous êtes banni ? Si vous êtes bloqué, connectez-vous via la console du serveur (pas SSH) et exécutez fail2ban-client set sshd unbanip VOTRE_IP. C'est pour ça que ignoreip est important !
✔ Résultat Fail2ban protège votre serveur contre les attaques par force brute. SSH est sécurisé, les services web sont protégés et les récidivistes sont bloqués automatiquement pour de longues durées.