[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)

Tags:

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *