Installer et configurer Fail2ban pour détecter et bloquer automatiquement les tentatives d'intrusion par force brute sur vos services.
# 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
/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/.
# 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
# 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
# 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
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.
# 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
fail2ban-client set sshd unbanip VOTRE_IP. C'est pour ça que ignoreip est important !