Chocoblog

Chocoblog

Billets sur l'informatique, les logiciels libres et retours d'utilisation sont au programme avec la possibilité de publier des billets de copains.

Bannir et envoyer automatiquement un abuse mail avec Fail2Ban

Des robots sillonnent Internet à la recherche de serveurs non sécurisés. Il est primordial de les bannir afin de les empêcher de trop essayer de combinaisons de mots de passe (même si ce dernier est robuste). Qui plus est ça évitera de trop pourrir vos logs avec des tentatives de connexion.
En bon français, je me suis dis qu'il peut être intéressant d'envoyer un mail de plainte (abuse mail) à l'aide du whois pour prévenir l'hébergeur. Bon vous leurrez pas, 90% du temps vous n'aurez aucune réponse des types (la majorité venant de Chine), mais ça peut toujours être utile pour prévenir certains propriétaires s'étant fait embrigader leurs serveurs dans des réseaux zombies. Nous allons utiliser Fail2Ban afin d'arriver à notre but.

La suite du guide prendra pour référence une Debian Jessie, mais bien sûr la procédure peut-être reproduite sur quasi chaque distribution (avec peut-être quelques adaptations).

Installation

Commençons cette étape très difficile :

# apt-get install fail2ban

On va ensuite copier le fichier de configuration jail.conf en jail.local. Il peut arriver qu'après une mise à jour de votre distribution le premier fichier soit modifié. Il est aussi possible de n'ajouter que vos modification dans jail.local au lieu de tout copier ou bien d'utiliser des bouts de fichiers de configurations à mettre dans jail.d.
J'ai choisi la première car étant la plus simple et la plus rapide, faites bien comme vous voulez :

# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Configuration

La configuration de Fail2Ban est relativement simple une fois qu'on a compris le concept. Il va lire les fichiers de logs que vous spécifierez puis détectera et bannira automatiquement les IP ayant fait un certain nombre de tentatives infructueuses (durant un certain intervalle de temps). Pour cela il utilise simplement des expressions régulières. Vous trouverez les configurations de ces expressions régulières par service dans le dossier filter.d. Vous pouvez ajouter vos propres filtres en créant simplement de nouveaux fichiers.

Une fois que Fail2Ban détecte un certains nombre de tentatives ratées, il effectue une action. Ces dernières sont présentes dans le dossier action.d. Nous allons dans ce billet le configurer pour qu'il effectue les actions suivantes :

  • Bannir l'IP à l'aide d'iptables (possible de le configurer avec d'autres firewalls)
  • Nous envoyer un mail avec les détails du ban (Whois, extraits des logs...)
  • Envoyer un mail d'abuse à l'aide du whois de l'IP du vilain

Nous avons donc dans le fichier de configuration les variables importantes suivantes :

  • bantime : le nombre de secondes durant lesquelles bannir l'IP
  • maxretry et findtime : le délai durant lequel une IP sera bannie au bout de ce certain nombre de tentatives loupées
  • destemail : l'adresse mail à laquelle Fail2Ban fera son rapport
  • banaction : la méthode de ban
  • action : l'action à exécuter lors d'un ban

Puis viennent les différents services apportés par Fail2Ban par défaut. On peut voir entre autres son nom, si vous l'activez ou non, le port (pour les règles iptables multiports), le filtre et le fichier de log à utiliser pour détecter les tentatives.

Je vous laisse activer les services que vous voulez. Spécifiez aussi le bantime et maxretry que vous jugez nécessaires et n'oubliez pas d'ajouter votre destemail. Nous allons utiliser iptables-multiport dans ce guide comme méthode de ban mais vous pouvez adapter l'option selon votre pare-feu.

En ce qui concerne l'action, nous allons utiliser %(action_mwl)s afin que Fail2Ban banisse l'IP et nous envoie un email contenant le whois et les extraits des fichiers de logs concernant le ban. Nous allons ajouter après cette partie le fait d'envoyer un abuse mail via le whois :

action = %(action_mwl)s sendmail-complain

Création de l'action

Nous allons donc créer l'action sendmail-complain.conf dans /etc/fail2ban/action.d à récupérer ici : https://gist.github.com/Chocobozzz/b19c45d0bec218dec3d5. Ce dernier sera exécuté à chaque ban d'IP.

En route

Maintenant que la configuration est prête vous pouvez enfin lancer Fail2Ban :

# systemctl start fail2ban

Si tout se passe bien vous devriez recevoir les emails de mise en route des différents services que vous avez activé. Peu de temps après doivent arriver vos premiers rapports de ban et si tout se passe bien les hébergeurs doivent recevoir leur plainte abuse. :)