Credit : Illustration backtotheweb.fr
Fail2ban : proteger son serveur des attaques brute force
Fail2ban : proteger son serveur des attaques brute force
Fail2ban est un outil qui surveille les fichiers de logs de votre serveur et bannit automatiquement les adresses IP qui montrent des comportements malveillants. Indispensable sur tout serveur IONOS expose a Internet.
Installation
apt update
apt install fail2ban -y
systemctl enable fail2ban
Ne modifiez jamais /etc/fail2ban/jail.conf directement. Creez plutot un fichier local qui sera prioritaire :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Configuration globale
Editez /etc/fail2ban/jail.local :
[DEFAULT]
# Duree du bannissement (1 heure)
bantime = 3600
# Fenetre d'observation (10 minutes)
findtime = 600
# Nombre de tentatives avant bannissement
maxretry = 5
# Backend de detection
backend = systemd
# Action par defaut : bannir et envoyer un email
action = %(action_mwl)s
# Email de notification
destemail = admin@mondomaine.fr
sender = fail2ban@mondomaine.fr
# IP a ne jamais bannir
ignoreip = 127.0.0.1/8 ::1 203.0.113.50
Jail SSH
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
findtime = 300
Jail Nginx - authentification basique
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
Jail Nginx - requetes suspectes (scans)
Creez un filtre personnalise dans /etc/fail2ban/filter.d/nginx-badbots.conf :
[Definition]
failregex = ^<HOST> .* "(GET|POST) .*(wp-login|xmlrpc|phpmyadmin|admin\.php).* (404|403)
ignoreregex =
Activez la jail :
[nginx-badbots]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 86400
findtime = 600
Jail WordPress (wp-login brute force)
Filtre /etc/fail2ban/filter.d/wordpress-login.conf :
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
^<HOST> .* "POST /xmlrpc.php
ignoreregex =
[wordpress-login]
enabled = true
port = http,https
filter = wordpress-login
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
findtime = 300
Bannissement progressif (recidive)
La jail recidive bannit plus longtemps les IP qui reviennent apres un premier bannissement :
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 604800
findtime = 86400
maxretry = 3
Une IP bannie 3 fois en 24h sera bannie pendant 7 jours sur tous les ports.
Actions personnalisees
Fail2ban supporte plusieurs methodes de bannissement :
# UFW
banaction = ufw
# iptables (par defaut)
banaction = iptables-multiport
# nftables (Debian 12+)
banaction = nftables-multiport
Commandes de gestion
# Demarrer/redemarrer Fail2ban
systemctl restart fail2ban
# Statut global
fail2ban-client status
# Statut d'une jail specifique
fail2ban-client status sshd
# Bannir manuellement une IP
fail2ban-client set sshd banip 192.168.1.100
# Debannir une IP
fail2ban-client set sshd unbanip 192.168.1.100
# Tester un filtre sur un fichier de log
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# Recharger la configuration
fail2ban-client reload
Surveillance
Verifiez regulierement l'activite de Fail2ban :
# Nombre d'IP bannies par jail
fail2ban-client status | grep "Jail list" | sed 's/.*://;s/,/\n/g' | while read jail; do
echo "=== $jail ==="
fail2ban-client status $jail 2>/dev/null | grep "Currently banned"
done
# Logs Fail2ban
tail -f /var/log/fail2ban.log
Fail2ban est un premier rempart essentiel. Combine avec un pare-feu UFW et des mises a jour regulieres, il reduit drastiquement l'exposition de votre serveur aux attaques automatisees.
Cet article sera mis à jour régulièrement. Pensez à le bookmarker.