[Debian] fail2ban
Présentation
Fail2ban est un IPS écrit en python qui analyse la quasi totalité des logs du serveur via des expressions régulières à la recherche d’erreurs d’authentification répétées et ajoute une règle iptables afin de bannir l’adresse IP de la source considéré comme malveillante.
Fail2ban est souvent configuré pour débannir les hôtes après un certain temps afin d’éviter le blocage permanant des erreurs liés à l’oubli du mot de passe ou autres. Plusieurs actions sont possibles en cas de détection comme l’ajout de règles iptables, l’ajout de l’hôte dans le hosts.deny, notification par email ou encore n’importe quelle action pouvant être effectuée en python.
La combinaison des filtres et actions correspond à une prison (jail en anglais). Dès que les paramètres de session remplissent les conditions d’un filtre, l’hôte est placé dans la prison du service correspondant (chaque service dispose de sa propre prison).
Le fichier de configuration « jail.conf » se trouve à la racine (/etc/fail2ban/), les actions possibles dans le dossier « action.d » et les filtres dans le dossier « filter.d ».
Configuration
Fail2ban a été configuré pour les services saslauthd, ssh et proftpd afin de bannir les IPs qui fournissent 5 mauvais mots de passe consécutifs sur les connexions SSH, POP, IMAP et FTP. Un email est envoyé pour chaque bannissement.
/etc/fail2ban/jail.conf
ignoreip = 127.0.0.1 bantime = 36000 maxretry = 5 destemail = admin@em-corporation.fr banaction = iptables-multiport mta = sendmail action = %(action_mw)s [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 [sasl] enabled = true port = pop3,imap filter = sasl logpath = /var/log/mail.log maxretry = 5 [proftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = proftpd logpath = /var/log/proftpd.auth_log maxretry = 5
Les filtres SASL et proftpd sont à changer car ils ne correspondent pas à la nomenclature des fichiers de log (dans la version 0.8.3-2 en tout cas).
/etc/fail2ban/filter.d/sasl.conf
failregex = : badlogin: .*\[\] plaintext .*SASL\(-13\): authentication failure: checkpass failed$ : badlogin: .*\[ \] LOGIN \[SASL\(-13\): authentication failure: checkpass failed\]$ : badlogin: .*\[ \] (?:CRAM-MD5|NTLM) \[SASL\(-13\): authentication failure: incorrect (?:digest|NTLM) response\]$ : badlogin: .*\[ \] DIGEST-MD5 \[SASL\(-13\): authentication failure: client response doesn't match what we generated\]$
/etc/fail2ban/filter.d/proftpd.conf
failregex = (.*) (.*) (.*) (.*) 530
Iptables
Comme vu précédemment, fail2ban est configuré pour bannir les @IP via iptables. Voici les commandes permettant de visualiser les adresses bannies et si jamais d’en débannir certaines avant la fin du « bantime ».
Afficher toutes les adresses bannies :
iptables -L
Afficher les adresses bannies d’un certain service :
iptables -L fail2ban-sasl
Débannir une adresse :
iptables -D fail2ban-sasl #
(ou # représente le numéro de la ligne de l’hôte)