fail2ban multi-services
fail2ban surveille n'importe quel log et bannit les IP qui dépassent un seuil d'échecs. La section SSH a couvert la jail sshd de base. Cette section traite les jails multi-services, le ban progressif et les filtres personnalisés.
Architecture
- Jail : une règle de surveillance (fichier de log + filtre + action)
- Filtre : expressions régulières qui identifient les tentatives dans les logs
- Action : ce qui se passe quand le seuil est atteint (ban IP via nftables)
Jails standard incluses
fail2ban embarque des filtres pour les services courants. Les activer dans /etc/fail2ban/jail.local :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 192.168.1.0/24
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log
[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log
[apache-auth]
enabled = true
logpath = /var/log/apache2/error.logBan progressif (récidivisme)
fail2ban supporte une durée de ban progressive : plus une IP récidive, plus elle est bannie longtemps.
[DEFAULT]
bantime.increment = true
bantime.multiplier = 2 # doublement à chaque récidive
bantime.maxtime = 1w # maximum 1 semaine
bantime = 1h # valeur de baseJail personnalisée
Pour surveiller un service maison, créer un filtre dans /etc/fail2ban/filter.d/ :
# /etc/fail2ban/filter.d/mon-appli.conf
[Definition]
failregex = ^.* \[error\] .* Login failed from <HOST>
ignoreregex =# jail.local
[mon-appli]
enabled = true
logpath = /var/log/mon-appli/error.log
maxretry = 3Tester le filtre avant activation :
fail2ban-regex /var/log/mon-appli/error.log /etc/fail2ban/filter.d/mon-appli.confGérer les bans
fail2ban-client status # liste toutes les jails actives
fail2ban-client status sshd # IPs bannies pour sshd
fail2ban-client unban 1.2.3.4 # débannir une IP
fail2ban-client reload # recharger la configurationEn pratique
Sur un serveur web, activer au minimum sshd + nginx-http-auth. Toujours inclure les IP de l'équipe dans ignoreip (LAN, VPN) pour éviter de se bannir soi-même. Le ban progressif est efficace contre les scanners persistants sans saturer les tables nftables. Les logs de ban sont dans /var/log/fail2ban.log.