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 :
- 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. - 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. - 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 .