fail2ban est un logiciel qui permet de bloquer les IPs (avec iptables) des machines qui dépassent un certains seuil de matches dans les logs d'un service (souvent, des tentatives de connexion ratées), pendant un certain laps de temps. Pour cela, il recherche des expressions régulières prédéfinies dans les journaux de différents logiciels : serveur SSH, serveur web apache, serveur de mail, serveur FTP, etc. Il est donc utile pour se prémunir des attaques de type force brute.
Son comportement diffère de celui du fichier /etc/hosts.deny
(qui, pour mémoire, blackliste directement toute connexion issue des IPs renseignées dans ce fichier) : fail2ban, lui, puni les abus avérés (et peut lever le ban au bout d'un certain temps).
aptitude install fail2ban
Sous Debian, les fichiers de configuration sont situés dans /etc/fail2ban
:
fail2ban.conf
qui est la configuration du démon fail2banjail.conf
est la configuration par défaut. Il contient une section “[DEFAULT]” qui contient la configuration globale :[DEFAULT] # whitelist (IPs qui ne seront jamais blacklistées) ignoreip = 127.0.0.1 192.168.0.0/24 bantime = 3600 # temps de blocage, en secondes (1 jour) # Une IP est bannie si elle génère "maxretry" fails pendant les dernières "findtime" secondes maxretry = 5 # nombre de fail avant blocage findtime = 600 # intervalle de temps pour vérifier les logs, en secondes (10 min) # destinataire des mails de rapports destemail = root@localhost mta = sendmail
…ainsi qu'une section par service ([ssh], [apache], etc…) qui peut surcharger les paramètres globaux :
[ssh] enabled = true port = ssh filter = sshd # nom du filtre qui est déclaré dans le dossier # il est possible de définir soit-même des filtres sous forme d'expressions régulières ici : failregex = courierpop3login: LOGIN FAILED.*ip=\[.*:<HOST>\] logpath = /var/log/auth.log # chemin vers le fichier de log du service sshd maxretry = 6 # surcharge du paramètre maxretry
filter.d/*
est le dossier qui contient la définition des expressions régulières permettant de détecter les erreurs d'identification dans les logsaction.d/
est le fichier de description des actions entreprises lorsqu'un seuil de connexion est dépassé.Après modification d'un fichier de conf, penser à recharger le service :
systemctl restart fail2ban || /etc/init.d/fail2ban restart
Les alertes de fail2ban sont recueillies dans le fichier de log /var/log/fail2ban.log
par défaut ; lorsqu'il bloque une machine on obtient :
grep WARNING /var/log/fail2ban.log 18:2010-07-08 14:36:54,228 fail2ban.actions: WARNING [ssh] Ban 192.168.1.22 20:2010-07-08 14:46:39,376 fail2ban.actions: WARNING [ssh] Unban 192.168.1.22
Permet de voir l'état du serveur fail2ban :
fail2ban-client status Status |- Number of jail: 7 `- Jail list: apache-overflows, apache-noscript, ssh, openvpn, postfix, sasl, dovecot
… ou l'état d'un filtre spécifique :
fail2ban-client status ssh Status for the jail: ssh |- filter | |- File list: /var/log/auth.log | |- Currently failed: 0 | `- Total failed: 2 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0
On peut arrêter/relancer une prison indépendamment des autres :
fail2ban-client stop ssh fail2ban-client start ssh
Pour ajouter une adresse IP à une prison (rappel : on liste les jails avec fail2ban-client status
, et le flag -vvv
, adaptable, permet d'afficher les détails DEBUG):
fail2ban-client -vvv set <JAIL> banip <ADDRESS IP> # par exemple fail2ban-client -vvv set apache-overflows banip 45.155.205.233
Pour débloquer une IP qui a été ban (dans cet exemple, dans le jail sshd) :
fail2ban-client set <JAIL> unbanip <ADDRESSE IP> # par exemple fail2ban-client set sshd unbanip 10.0.0.1
Permet de tester un fichier de filtre sur un fichier de log, pour voir s'il matche comme prévu :
#fail2ban-regex "ligne de log" "regex à tester" # OU #fail2ban-regex <fichier de log> <fichier de filtres> fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/sasl.conf