fail2ban,linux,sécurité

Vous possédez une Box Linux ?
Votre Firewall est actif et filtre tous les contenus indésirables ?
Seuls les services principaux sont accessibles depuis l'extérieur ? SSH / HTTP et FTP ?
Vos services sont Chrootés dans un espace qui leur est dédié ?

Et bien, vous pouvez passer à la suite, l'installation de l'outil Fail2ban ;-)

http://www.fail2ban.org

Fail2ban est un outil très simple qui analyse vos logs et qui est capable de réagir et d'exécuter des commandes en fonction des éléments détectés.
Il permet de vous protéger contre les Bruteforces, contre les tentatives d'attaques de manière plus générale.

Fail2ban fonctionne en mode Filtre-Action :

  • Le filtre (''/etc/fail2ban/filter.d'') défini les éléments à détecter dans les logs
  • L'action (''/etc/fail2ban/action.d'') consiste a exécuter une commande comme : envoyer un mail, interdire une IP dans l'Iptables ...

Fail2ban s'installe avec une liste de filtres et d'actions prédéfinis. Il suffit juste de vérifier l'emplacement de vos logs et vérifier que les patterns définis dans les filtres sont applicables à vos logs.

Voici un exemple de configuration pour ma box Gentoo :



[ssh] 
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/auth.log
maxretry = 3

[pure-ftpd] 
enabled  = true
filter   = pure-ftpd
action   = iptables[name=Pure-Ftpd, port=ftp, protocol=tcp]
logpath  = /var/log/pure-ftpd.log
maxretry = 3

[postfix] 
enabled  = true
filter   = postfix
action   = iptables[name=Postfix, port=smtp, protocol=tcp]
logpath  = /var/log/mail.log


Après la configuration mise en place, il suffit de lancer le démon :

 
# /etc/init.d/fail2ban start

L'ensemble des détections seront directement logués dans le fichier

 
# less /var/log/fail2ban.log

Pour connaitre l'origine des attaques il est possible d'utiliser des outils de géolocalisation comme "geoiplookup" qui se trouve dans le package gentoo "dev-libs/geoip".

Avec un petit script Python, il est possible d'analyser le fichier de log failtoban.log pour en extraire le nom du pays de la machine attaquante :



# Fail2BanGeo.py
import os
import re
f = open('/var/log/fail2ban.log', 'r')    
pattern = r".*?Ban\s*?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$"

p = re.compile(pattern)
for i in f:
        m = p.match(i)
        if m:
                ip = m.group(1)
                file = os.popen('geoiplookup %s' % ip)
                print file.read()

Pour en savoir plus sur le GeoIpLookup, je vous conseille d'aller lire la page Wiki dédiée à Fail2ban :

http://www.fail2ban.org/wiki/index.php/HOWTO_use_geoiplookup