Fail2ban

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Qu'est-ce que Fail2ban?

Fail2ban lit des fichiers de log comme /var/log/pwdfail ou /var/log/apache/error_log et bannit les adresses IP qui ont obtenu un trop grand nombre d'échecs lors de l'authentification. Il met à jour les règles du pare-feu pour rejeter cette adresse IP. Ces règles peuvent êtres défines par l'utilisateur. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache.

Installation

apt-get install fail2ban

Par défaut, le port 22 (ssh) est surveillé, vous pouvez vérifier que les règles ipatbles ont bien pris en compte fail2ban:

iptables -S | grep fail2ban

-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A fail2ban-ssh -j RETURN

Configuration

Deux fichiers:

fail2ban.conf

Rien à faire dans ce fichier, vous pouvez laisser les options par défaut

/etc/fail2ban/fail2ban.conf
loglevel = 3
logtarget = /var/log/fail2ban.log
socket = /var/run/fail2ban/fail2ban.sock

jail.conf

Ce fichier est beaucoup plus intéressant, il contient tous les services à monitorer, et vous allez le découvrir, fail2ban ne se limite pas à SSH...

/etc/fail2ban/jail.conf

Vérifiez l'adresse d'envoi des mails d'avertissement:

[DEFAULT]
destemail = root@localhost

Pour activer la surveillance d'un service, il suffit de placer la variable "enabled" à "true"

Par défaut la protection du servie SSH est activée, pas les autres: Si votre ssh n'est p)as sur le port 22, pensez à le changer... (port = N° de port)

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6
[xinetd-fail]
enabled   = true 
filter    = xinetd-fail
port      = all
banaction = iptables-multiport-log
logpath   = /var/log/daemon.log
maxretry  = 2
[pam-generic]
enabled = true
filter  = pam-generic
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/auth.log
maxretry = 6
[ssh-ddos]
enabled = true
port    = ssh
filter  = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 6
[apache]
enabled = true
port    = http,https
filter  = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
[apache-multiport]
enabled   = true
port      = http,https
filter    = apache-auth
logpath   = /var/log/apache*/*error.log
maxretry  = 6
[apache-noscript]
enabled = true 
port    = http,https
filter  = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6
[apache-overflows]
enabled = true 
port    = http,https
filter  = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2
[postfix]
enabled  = true 
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/mail.log

[sasl]
enabled  = true 
port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter   = sasl
logpath  = /var/log/mail.log

n'oubliez pas de redémarrer fail2ban :

# service fail2ban restart

Test

Vous pouvez facilement tester votre configuration: Créez par exemple un répertoire dans votre serveur apache, rendez obligatoire l'identification, puis entrez plusieurs fois de suite un mot de passe erroné. Vous devriez avoir dans vols logs ceci:

tail -f /var/log/fail2ban.log
2011-08-08 12:27:18,730 fail2ban.actions: WARNING [apache] Ban 10.9.11.150

Effectivement, iptables à bloquer votre ip:

iptables -L
Chain fail2ban-apache (1 references)
target     prot opt source               destination         
DROP       all  --  10.9.11.150          anywhere            
RETURN     all  --  anywhere             anywhere

Au bout de 10 minutes (en fonction de ce que vous aurez précisé dans le configuration), l'IP sera de nouveau "libérée":

2011-08-08 12:37:19,585 fail2ban.actions: WARNING [apache] Unban 10.9.11.150

Erreur au démarrage de fail2ban

Lorsque vous démarrerez fail2ban, surveillez ses logs, vous devriez avoir ceci:

2011-08-08 16:44:40,564 fail2ban.jail   : INFO   Jail 'apache-noscript' started
2011-08-08 16:44:40,810 fail2ban.jail   : INFO   Jail 'pam-generic' started
2011-08-08 16:44:41,051 fail2ban.jail   : INFO   Jail 'xinetd-fail' started
2011-08-08 16:44:41,269 fail2ban.jail   : INFO   Jail 'ssh-ddos' started
2011-08-08 16:44:41,506 fail2ban.jail   : INFO   Jail 'apache-multiport' started
2011-08-08 16:44:41,739 fail2ban.jail   : INFO   Jail 'apache-overflows' started
2011-08-08 16:44:41,976 fail2ban.jail   : INFO   Jail 'ssh' started
2011-08-08 16:44:42,206 fail2ban.jail   : INFO   Jail 'postfix' started
2011-08-08 16:44:42,448 fail2ban.jail   : INFO   Jail 'sasl' started
2011-08-08 16:44:42,667 fail2ban.jail   : INFO   Jail 'apache' started

Si vous avez ce genre de message d'erreur:

2011-08-08 12:22:52,286 fail2ban.actions.action: ERROR  iptables -N fail2ban-pam-generic
iptables -A fail2ban-pam-generic -j RETURN
iptables -I INPUT -p tcp -j fail2ban-pam-generic returned 400
2011-08-08 15:06:04,467 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports 10122 -j fail2ban-ssh-ddos
iptables -F fail2ban-ssh-ddos
iptables -X fail2ban-ssh-ddos returned 100
2011-08-08 15:06:10,027 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-overflows
iptables -A fail2ban-apache-overflows -j RETURN
iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows returned 200
2011-08-08 15:06:10,224 fail2ban.actions.action: ERROR  iptables -N fail2ban-postfix
iptables -A fail2ban-postfix -j RETURN
iptables -I INPUT -p tcp -m multiport --dports smtp,ssmtp -j fail2ban-postfix returned 400
2011-08-08 15:06:10,283 fail2ban.actions.action: ERROR  iptables -N fail2ban-sasl
iptables -A fail2ban-sasl -j RETURN
iptables -I INPUT -p tcp -m multiport --dports smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s -j fail2ban-sasl returned 200
2011-08-08 15:14:26,002 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows
iptables -F fail2ban-apache-overflows
iptables -X fail2ban-apache-overflows returned 100
2011-08-08 15:14:28,374 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s -j fail2ban-sasl
iptables -F fail2ban-sasl
iptables -X fail2ban-sasl returned 100
2011-08-08 15:14:45,382 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-noscript
iptables -A fail2ban-apache-noscript -j RETURN
iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-noscript returned 400

Il existe une solution:

Faite une sauvegarde de /usr/bin/fail2ban-client auparavant...

Editez le fichier /usr/bin/fail2ban-client et ajoutez une temporisation (time.sleep(0.1)) à cet endroit:

       def __processCmd(self, cmd, showRet = True):
               beautifier = Beautifier()
               for c in cmd:
                       time.sleep(0.1)
                       beautifier.setInputCmd(c)

Si la temporisation à 0.1 ne suffit pas, mettez 0.2. et redémarrez fail2ban.

Liens externes

Je vous encourage à lire:

Lol 8 août 2011 à 09:00 (CDT)