
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
/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
Derniers commentaires