[GeoIP] [Fail2Ban] Bannir les tentatives de connexions par mod_proxy ou par SSH

Plop

Je vous propose un petit script basé sur l’utilisation de fail2ban, visant à bannir les IP qui font des tentatives de connexion par mod_proxy ou tentent de se loguer en SSH sans déclencher fail2ban (tentatives trop espacées).

A mettre en tâche cron à la fréquence de votre choix, perso je le fais tourner toutes les heures.

Le programme effectue aussi un test geoip sur une base préalablement téléchargée (voir ce topic de @metyun pour automatiser sa récupération) histoire de ne pas trop spammer l’API afin de :

  • loguer le pays de l’IP banni
  • ne pas bannir les tentatives SSH provenant des pays sélectionnés (si comme moi vous faites régulièrement des fautes de frappes et que vous avez une IP dynamique).

  • Le script est prévu uniquement pour les IPv4 (mes serveur n’ont pas d’IPv6). Ca pourrait être interessant d’en dev une version IPv6, il faut regarder comment f2b fonctionne dans ce cas et modifier la façon dont on récupère les IP.
  • Le log n’est pas obligatoire (il suffit en ce cas de désactiver les fonctions le concernant)
  • Le log est prévu pour être mis dans une balise sur une page dokuwiki, mais vous pouvez modifier ça si votre config est différente.

Commentaires et observations bienvenus, forkez le et modifiez le à l’envie.

Edit : testé sur un yuno à base de vieil Atom C2350 avec pas grand chose en tâche de fond, le script tourne en moyenne (100 lancements) en moins d’une seconde quand il n’y a pas d’IP à bannir et sans login desdites IP :

# multitime -q -n 100 "/home/purge_ip.bash"
===> multitime results
1: -q /home/purge_ip.bash
            Mean        Std.Dev.    Min         Median      Max
real        0.806       0.032       0.756       0.801       0.918
user        0.610       0.023       0.547       0.610       0.665
sys         0.221       0.032       0.145       0.217       0.317