Fail2ban
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 toutes 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:
- La page de man de fail2ban
- Le Wiki de fail2ban - Très complet
Lol 8 août 2011 à 09:00 (CDT)