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

1. Le , 00:44 par Romain F.
9c5790728f073aac650078234cf17bf3

C'est juste indispensable ! Je l'utilise depuis 2 ans, couplé avec logwatch pour recevoir les stats tout les matin à 6h. Des fois ça fait peur !!!

2. Le , 01:07 par RZ1
9a17729309d483b301523060cb7a35e8

Dans le même genre il y a BlockHosts et DenyHosts
http://www.aczoom.com/cms/blockhost...
http://denyhosts.sourceforge.net/

DenyHosts a la particularité de pouvoir se synchro avec une blacklist d'IP distante, mise a jour en temps réél par la communauté utilisant DenyHosts.

3. Le , 12:00 par frakosun
392f9f1fb7d1c3fd95cc94b1106b9261

Tu pourrais donner le failregex à insérer dans le filtre de pure-ftpd stp?
mon expression régulière ne fonctionne pas, merci d'avance! ;)

4. Le , 16:35 par Ludovic
9ab09dd3e305f924f8930e20e1a35843

Le voici :

failregex = pure-ftpd: (.+?@<HOST>) \[WARNING\] %(__errmsg)s \[.+\]$

Je l'ai testé et il fonctionne tout à fait correctement chez moi.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.