Géolocalisation avec Fail2Ban
Certains d’entre vous utilisent peut être Fail2Ban sur leurs machines, afin de bloquer certains accès répétitifs où brute force à ssh, apache, ftp où encore postfix.
Je vais vous indiquer sur ce billet comment ajouter à Fail2Ban la géolocalisation dans les log qui se trouvent généralement dans /var/log/fail2ban.log
Avant toutes choses, ils vous faut le binaire geoip-bin qui contient un outil en ligne de commande (geoiplookup).
Cet outils permet de faire la correspondance IP => Pays via une base qui se trouve dans
/usr/share/GeoIP/GeoIP.dat
Il vous faudra bien sûr installer cette base :
sudo aptitude install libgeoip1
Testons voir geoiplookup en ligne de commande avec une IP au hasard. Celle du serveur qui héberge ubuntu-fr tiens.
geoiplookup 213.95.41.13
GeoIP Country Edition: DE, Germany
On vois ici que le serveur viens de Germany, autrement dit en Allemagne.
Si vous n’avez pas déjà installer le binaire qui contient geoiplookup, sous Debian / Ubuntu on tape :
sudo aptitude install geoip-bin
Ensuite, il faudra modifier le fichier /usr/share/fail2ban/server/actions.py pour que Fail2Ban utilise geoiplookup lors de l’enregistrement d’un Ban.
De cette façon vous pourrez savoir d’où viennent vos pirates, sans devoir taper à la main chaque IP contenu dans les log.
Ouvrez le fichier /usr/share/fail2ban/server/actions.py avec votre éditeur de fichier. Par exemple gedit, qui est l’éditeur par defaut sur Ubuntu.
sudo gedit /usr/share/fail2ban/server/actions.py
Trouver environ à la ligne 31 :
import time, logging
Remplacer par :
import time, logging, commands
Trouver environ à la ligne 164 :
logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"]))
Remplacer par :
logSys.warn("[%s] Ban %s %s" % (self.jail.getName(), aInfo["ip"], commands.getstatusoutput('geoiplookup ' + aInfo["ip"])[1][23:]))
Voilà c’est fini, il ne vous reste plus qu’a enregistrer votre fichier. Vous aurez ainsi dans vos log Fail2Ban des lignes de ce genre :
2009-06-21 07:52:00,166 fail2ban.actions: WARNING [ssh] Ban 219.142.169.12 CN, China
2009-06-22 14:20:04,037 fail2ban.actions: WARNING [ssh] Ban 216.146.47.15 US, United States
2009-06-22 06:33:20,199 fail2ban.actions: WARNING [postfix] Ban 222.170.127.111 CN, China
Si vous voulez juste logger le code du pays (DE, FR, US, CN) à la ligne 164 remplacer le code ci dessus par celui ci :
logSys.warn("[%s] Ban %s %s" % (self.jail.getName(), aInfo["ip"], commands.getstatusoutput('geoiplookup ' + aInfo["ip"])[1][23:25]))
Vous pouvez aussi mettre à jours la base de donnée GeoIP.dat, qui est mis à jours chaque mois avec cette commande qu’il faudra lancer en root, ou avec sudo :
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz -O - | gunzip > /usr/share/GeoIP/GeoIP.dat.new && mv /usr/share/GeoIP/GeoIP.dat.new /usr/share/GeoIP/GeoIP.dat
En cas de problèmes, vous pouvez me joindre via le formulaire de contact.
Je vous recommande aussi la lecture des sujets suivants:
- Géolocalisation des log Fail2Ban avec Fail2BanGeoIP.py
- Supprimer les doublons en préservant l’ordre avec awk
- Transert où migration de Mysql vers un autre serveur
- Wordpress avec Apache mod_rewrite et server-status
- Un grep en couleurs
Categories: Fail2Ban