Sondage Fail2ban

Hello les personnes tech !

J’utilise fail2ban (beaucoup sur mon infra perso et assez peu chez Picasoft) pour bannir (essentiellement via le pare-feu) les IPs qui tentent des scans et des bruteforce sur les serveurs. Ça fonctionne bien.

Mais je n’aime pas la configuration, que je trouve fouillie, pas assez claire, longue comme plusieurs bras.

Je trouve aussi le daemon trop gourmand. Selon moi, un daemon aussi simple gagnerait à être écrit avec un langage plus rapide que Python.

J’ai donc deux questions pour vous :slight_smile:

A. Est-ce que vous avez mis en place d’autres systèmes similaires (CrowdSec, script custom, …) ?

B. Si vous utilisez fail2ban, qu’est-ce que vous en pensez ? Qu’est-ce que vous aimeriez changer ? Tous les retours m’intéressent, parce que je m’attèle à l’écriture d’une alternative.

1 « J'aime »

Réponse B
C’est vrai que c’est lourd pour ce que ça fait…
Moi j’aime bien les regex alors je trouve fail2ban plutôt cool pour ça… Aussi ce qui est top chez fail2ban c’est la quantité de logiciel déjà supporté.
La ligne de commande pour « unban » je m’en rappel jamais trop, je trouve pas très intuitifs…

3 « J'aime »

Réponse B également, j’utilise fail2ban car cela permet clairement de protéger à minima un serveur.
Je n’ai pas trouvé d’alternative dans le sens où effectivement les fichiers de config peuvent être lourd, fouillies quelques part mais permet vraiment de faire sa propre configuration personnalisé et c’est l’un des grands avantages de fail2ban.

Par exemple lorsque je suis passé sur nftables plutôt que iptables, j’ai pu personnalisé mes confs et ne pas attendre que les dépôts et conf proposées soit à jour mais également personnalisé les règles, la façon de bannir…
C’est toujours un peu le problèmes des programmes qui sont très configurables, si on a une application pas très utilisée ou même développée personnellement, on peut faire les règles fail2ban qui vont bien.

Je ne sais pas si il peut y avoir d’équivalent plus léger mais aussi paramétrable.
Dans tous les cas les retours m’intéresse aussi.

Si c’est juste pour filtrer ssh, je vous recommande d’utiliser sshguard.
Ce sera bien plus efficace.

Auriez vous de tutos fail2ban à recommander ? (anglais ou francais ou même espagnol ^^)

La doc donne déjà les bases MANUAL 0 8 - Fail2ban puis ensuite quelques howto proposé également sur le site de fail2ban HOWTOs - Fail2ban

Ensuite on trouve pas mal de tuto notamment sur les principales distributions :

1 « J'aime »

Merci pour vos retours, il y a de bons conseils :smiley:

Voici le projet sur lequel je suis du coup : ppom / reaction · GitLab

Je veux proposer un programme avec une configuration simple, sans configuration par défaut.
Si ça vous intéresse, n’hésitez pas à faire des retours sur le format du fichier de configuration, ça m’intéresse !

ping @lacontrevoie qui utilise Fail2ban aussi :wink:

Merci pour le ping ! Ravi d’apprendre que tu t’es déter pour créer cette alternative :smile:

Pour détailler du côté de La Contre-Voie : nous utilisons extensivement fail2ban chez nous, autant pour filtrer les requêtes HTTP que pour les requêtes SSH ou le mail.

Ce filtrage agit autant sur les requêtes que nous pouvons considérer comme malveillantes que sur des tentatives de bruteforce, en protégeant la plupart de nos formulaires HTML. Nous utilisons également les rate-limits de Nginx en complément efficace.

Le plus compliqué chez nous : nous avons une infrastructure « horizontale », avec plusieurs serveurs qui peuvent se relayer pour fournir le même service.

Nous avons donc besoin de répercuter le bannissement d’une IP sur plusieurs serveurs en même temps, sans pour autant lire et synchroniser les logs sur tous nos serveurs (ce qui consommerait beaucoup de ressources inutilement). Fail2ban n’est pas adapté pour cet usage, nous avons donc contourné son usage en utilisant un modèle client-serveur :

  • un « serveur » fail2ban sur le serveur de journalisation, qui lit les logs et qui émet les bannissements en les écrivant dans un journal partagé avec les autres serveurs ;
  • un « client » fail2ban, installé sur chaque machine, qui lit le journal de ce serveur et qui répercute les bannissements sur chaque machine.

Nous nous sommes inspiré·es de la configuration sur ce dépôt : GitHub - Relkci/F2BDistro: Fail2Ban Distributed Bans via SSHFS

Problème 1 : On contourne l’outil fail2ban pour le rendre « distribué », donc il devient (encore) plus difficile à maintenir. On aurait aimé un outil qui gère ça nativement.
Problème 2 : Fail2ban ne protège pas des attaques par déni de service distribuées, face à l’usage d’un grand nombre d’IPs. On aimerait bien un outil qui intègre ça aussi.
Problème : Fail2ban n’est pas capable de filtrer un trafic assez élevé (50 requêtes par seconde ?) sans consommer plus de 500 Mo de RAM et beaucoup de CPU. Et de manière générale, je trouve que Fail2ban est super lent et consommateur en ressources pour ce qu’il fait.

On a regardé Crowdsec il y a quelques mois, mais la solution ne semble gérer que les requêtes HTTP. Et pas sûr qu’on puisse l’utiliser dans des conteneurs Docker comme chez nous… (pour fail2ban, on utilise GitHub - crazy-max/docker-fail2ban: Fail2ban Docker image).

De notre côté on va rester sur cette solution (pas idéale mais encore à peu près fonctionnelle) dans l’attente que les alternatives se développent :slight_smile:

1 « J'aime »

Du côté d’infini on a des filtres sur plusieurs services, tout est géré dans salt et l’ensemble de nos states seront publiés cette année !

Huhu, tu ne serais pas en train de me mettre la pression @denis ? ^^

Ha super, et merci pour la piste de https://github.com/Relkci/F2BDistro car on a le même « problème » chez Infini. Chez nous nginx est derrière haproxy, donc j’ai pensé à brancher fail2ban directement sur celui-ci, peut-être que ça serait plus simple comme option(au moins pour le trafic qui passe bien par ha).

Heu tu es certain https://hub.crowdsec.net/author/crowdsecurity/configurations/ssh-bf ?

Ah, ben non du coup :sweat_smile: Je ne connais plus la raison qui nous a dissuadé d’utiliser cet outil, je demanderai à l’occasion.

ma participation se symbolisera sur ce lien, j’ai proposé une sorte de débat pour avoir peut etre un jour éventuellement pourquoi pas une labellisation sur les distros linux/nix/bsd/ qui embarqueraient un ssh activé mais dénué de mdp par défaut :

1 « J'aime »

Malheureusement, c’est pas dans le cadre du projet pour l’instant ! L’idée en le réécrivant en Go est surtout d’adresser le problème des ressources utilisées !

Ça m’intéresse, mais je ne sais pas du tout comment gérer une attaque distribuée, ni même si c’est vraiment possible… On pourrait ban plus rapidement des IPs qui viennent du même lot d’IPs ou ASN, peut-être.

Salt a en effet l’air de faire du super travail ! Si j’ai bien compris par contre, c’est une plateforme as a service, pas un service auto-hébergé, ce qui est bloquant pour certain·es gaulois·es (dont moi hihi)

Non non, pas du tout, tu peux (on le fait) très bien utilisé salt sans aucun service externe en ayant tes masters et tes minions dans ton infra. C’est pas le genre de la maison chez @infini d’utiliser des trucs externes :smiley:

1 « J'aime »

Effectivement on héberge tout à Brest, même nos serveurs sont bretons (quoique j’ai un doute, HP ça signifie bien Hénaff-Pinault ?)

5 « J'aime »

Pour les besoins d’Exarius, je développe un petit programme en Rust permettant de réduire au minimum les ressources utilisées pour « simplement » bloquer des connexions.
L’idée est de déléguer un maximum de choses au noyau Linux en surveillant les fichiers de journalisation avec inotify et en laissant nftables gérer les durées de bannissement. La « seule » fonctionnalité de ce programme est de faire des regex le plus efficacement possible (merci l’extrême performance de Rust à ce sujet) et d’ajouter des adresses à des set nftables en cas de dépassement des limites de détection dans un intervalle de temps.

Ça a l’air d’une super approche. Tu nous tiendras au courant quand il sera prêt ? Ou il l’est déjà ? Y’a un repo quelque part ? :innocent: