Fail2ban est un système de prévention d’intrusion (IPS), il analyse les logs de programmes comme les serveurs SSH, Web ou mail et manipule le pare-feu pour bloquer les adresses IPs qui ont des comportements inappropriés. Sa force vient de sa flexibilité.
Dans cet article je présente Fail2ban et ses avantages, mais je n’explique pas comment l’installer. Si vous souhaitez l’installer sur OpenBSD, j’ai écrit un article qui détaille comment faire.

Comment ça marche ?

Dans Fail2ban on trouve trois parties intéressantes :

  1. Des actions. Une action permet de choisir quoi faire lorsqu’un comportement non désiré est détecté. Par exemple il y a une action pour iptables, le pare-feu utilisé sur Linux, une autre pour pf, le pare-feu d’OpenBSD. On choisit simplement l’action qui nous convient selon notre système.
  2. Des filters. Un filtre est un mécanisme de détection, basée sur des expressions régulières. Si une adresse IP est détectée par un filtre dans les logs, elle peut être bloquée.
  3. Le fichier de configuration jail.local. Dans ce fichier on choisit quels filtres activer, et pour chaque filtre combien de fois il doit détecter quelque chose avant que l’adresse IP associée aux logs ne soit bloquée, et pour combien de temps.

Quelques exemples

Sur OpenBSD on utilise l’action pf pour manipuler le pare-feu.

Bloquer les tentatives de connexion à OpenSSH

Imaginons que j’ai un serveur OpenSSH exposé sur Internet pour me connecter à distance. En regardant les logs, je m’aperçois très vite que de nombreuses tentatives de connexion infructueuses sont effectuées depuis un peu partout dans le monde.
Si j’ai bien fait les choses, la connexion par mot de passe est désactivée, ainsi que la connexion en tant que root (l’administrateur). De plus, OpenSSH intègre désormais une sécurité qui réduit le nombre de tentatives pour éviter les attaques par bruteforce (de nombreuses tentatives jusqu’à trouver le mot de passe).

Malgré tout ça pollue les logs, et puisque les adresses IP derrière ces tentatives de connexion ne sont pas les bienvenues je préfère les bloquer.
Avec Fail2ban c’est très simple :

# Fichier de configuration jail.local
[sshd]
bantime = 1d
bantime.increment = true
enabled = true
filter = sshd_openbsd
findtime = 1h
logpath = /var/log/authlog
maxretry = 10

L’extrait de configuration ci-dessus active le filtre qui analyse les logs d’OpenSSH sur OpenBSD. Si 10 tentatives de connexion sont reçues en 1 heure depuis la même adresse IP, alors cette IP est bloquée pendant 1 jour.
Une fois débloquée, si elle refait 10 tentatives en 1 heure, elle sera bloquée 2 jours. La fois suivante 4 jours, et ainsi de suite.

Limiter les abus du formulaire de contact

Sur ce site Web il y a un formulaire de contact. Comme tout le monde je déteste les CAPTCHA, alors j’ai décidé de ne pas infliger ça à mes visiteurs. Pour autant il est important de me prémunir contre les bots et les petits malins qui voudraient me spammer, donc j’ai créé mon propre filtre Fail2ban.

# Fichier de configuration jail.local
[httpd-abosec-send-contact]
bantime = 10d
bantime.increment = true
enabled = true
filter = httpd_forwarded_abosec_contact
findtime = 1h
logpath = /var/www/logs/access.log
maxretry = 10

Si le formulaire est soumis 10 fois en 1 heure, alors l’adresse IP est bloquée pendant 10 jours et ne pourra plus du tout accéder au site Web. Si elle recommence une fois débloquée elle sera bloquée 20 jours, et ainsi de suite. Ce n’est aucunement bloquant pour un visiteur légitime qui souhaite me contacter, par contre ça m’évite d’être noyé sous les e-mails.


Vous voulez sécuriser vos serveurs mais vous n’avez pas le temps de configurer tout ça ? Découvrez mes services de protection et hébergement géré OpenBSD .