J'utilise depuis très longtemps fail2ban, qui permet de bannir des IP générant trop d'erreurs (le plus souvent des échecs d'authentification). Il se base sur les logs des différents services et des expressions régulières pour retrouver les tentatives et les bannir.

Je m'y suis un peu plus intéressé ces derniers temps car j'ai été attaqué par des scripts vraiment insistants (ce sera l'objet d'un prochain billet). Dans un premier temps, j'ai voulu obtenir une liste des adresses bannies, avec le nombre de fois, afin de déceler des "récidivistes". Voici la commande utilisée (fail2ban log avec SYSLOG sur mon serveur) :

cat /var/log/messages|grep Ban|awk '{print $7" "$9}'|sort|uniq -c|sort -r

Voici l'explication de la commande :

  • cat : affichage du fichier de log
  • grep Ban : on ne conserve que les lignes concernant un bannissement
  • awk : on extrait simplement les 7ème et 9ème parties, c'est à dire le "jail" utilisé pour le ban, et l'IP bannie
  • un premier sort pour faire en sorte que les IP identiques soient listées les unes en dessous des autres
  • uniq -q : réunies les lignes communes et affiche devant le nombre de fois qu'elles apparaissent
  • un dernier sort (avec l'option reverse) pour faire un tri inverse

On se retrouve ainsi avec une liste indiquant le nombre de fois qu'a été bannie une IP, le jail utilisé et l'IP bannie, le tout dans l'ordre décroisant. Voici un exemple :

      8 [ssh-iptables] 188.138.98.75
      2 [apache-dfind] 93.174.2.202
      2 [apache-dfind] 81.196.179.210
      2 [apache-dfind] 217.70.51.154
      1 [ssh-iptables] 96.8.121.185
      1 [ssh-iptables] 87.106.132.104
      1 [ssh-iptables] 58.211.5.130
      1 [ssh-iptables] 221.207.229.6
      1 [ssh-iptables] 201.140.103.17

Le défaut de cette commande est que l'odre est faire sur du texte, et donc si une IP est bannie plus de 9 fois, elle apparaitra en bas, au lieu d'être en haut.

Cela permet cependant de repérer rapidement une IP trop "agressive" pour la bannir définitivement par exemple.


Fabien (eponyme)