fail2ban : utilisation de filtres personnalisés

Si vous ne connaissez pas fail2ban, je vous invite à jeter un coup d'oeil à son utilité. Pour ma part, j'ai eu besoin d'utiliser fail2ban avec le serveur proxy Dante pour rejeter les bots qui tentaient de découvrir mon proxy. Il n'y a pas de filtre Dante pour fail2ban, donc j'ai du en créer un.

C'est relativement facile. Il y a deux choses à configurer. Premièrement, le filtre. Il va dire à fail2ban quelle IP ou host à rechercher dans les logs pour les bloquer. Deuxièmement, la configuration de la prison. Il indique à F2B (fail2ban) sur quel fichier il doit appliquer le filtre précédemment créé et comment se comporter en cas de test positif. Voyons d'abord le filtre. Dante crache des logs de ce type :

Aug 12 12:07:30 (X) danted[X]: block(0): tcp/accept [: 192.241.70.162.62809 -> 87.****.1080

192.241.70.162 est donc l'IP souhaitant se connecter au proxy et 87.** mon proxy. Juste après l'IP vient le port, et vous aurez remarqué que je n'ai pas été très malin car j'ai ouvert Dante sur le port "standard" d'un proxy. C'est pour ça que j'ai autant de rigolos qui essaient de se connecter. On va donc devoir trouver la regex permettant de catcher cette ligne à partir des logs et l'adresse IP de la source. Voici la regex en question :

block\(\d+\): tcp\/accept \[: <HOST>\.\d+

Vous devez préciser "block" pour ne catcher que les essais infructeux. Le tag est un tag fail2ban qui match une adresse IP ou un nom d'hôte. Indiquez ça dans un fichier créé pour l'occasion :

root@ns:~# cat /etc/fail2ban/filter.d/danted.conf
[Definition]
failregex=block\(\d+\): tcp\/accept \[: <HOST>\.\d+ 
ignoreregex=

Créez maintenant la section jail dans /etc/fail2ban/jail.local :

root@ns:~# cat /etc/fail2ban/jail.local
[danted]
enabled = true
port = 1080
filter = danted
logpath = /var/log/sockd.log
maxretry = 1
bantime = 86400
findtime = 3600
  • enabled active ou non la règle
  • port précise sur quel port devra être appliquée la règle iptables pour bloquer le trafic
  • filter reprend le nom du filtre que vous avez créé
  • logpath le fichier log à surveiller
  • maxretry au bout de combien d'essai raté l'IP doit être bannie
  • bantime est le nombre de secondes ou l'IP va être bannie (ici, une journée)
  • findtime indique le nombre de secondes à remonter en arrière dans les logs pour ajouter des bans.

Finissez avec un redémarrage du service :

root@ns:~# /etc/init.d/fail2ban restart Restarting authentication failure monitor: fail2ban.

Damien Gustave

Read more posts by this author.