Sondage Fail2ban

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:

Le programme nommé Minos (en tant que juge des Enfers grecques, pour ici juger des IP) et fonctionnel mais reste à améliorer et à documenter. Je n’aurais pas le temps de le faire ce week-end, il sera donc publié la semaine prochaine.

1 « J'aime »

@ppom Pour l’usage de CLUB1 fail2ban est vraiment super, 2 lignes pour sélectionner le backend nftables, 2-3 lignes par service à monitorer. Comme on reste le plus proche possible des configurations par défaut des services, installés via les dépôts Debian, toutes les configs sont déjà présentes, il ne reste qu’à les activer. Après oui le daemon n’est pas des plus économes en ressources mais il se laisse clairement oublier à côté de Synapse.

Après si le soft en Rust que @pilot est en train de développer est compatible avec la config de fail2ban perso je serais intéressé par switcher, enfin, lorsqu’il arrivera dans Debian haha.

D’ailleurs je suis curieux de savoir comment tu fais ça. C’est une fonctionnalité intégrée à nftables ? Parce que sinon avec le backend nftables fail2ban génère aussi des set nftables contenant les IPs à bannir.

La conf fail2ban est assez complexe, ça m’étonnerait qu’une alternative qui se veut simple la reprenne (c’est pas mon cas) ! Après il suffit de récupérer les regexes dans la conf pour adaptation.

Comme annoncé, le code de Minos a été publié dans ce dépôt.

C’est une version alpha qui permet de surveiller un fichier de logs par jail et de bannir les adresses IP qui ont dépassé un certain nombre d’apparition dans une certaine fenêtre de temps. Chaque jail constitue un thread.

Les expressions régulières des filtres peuvent être extraites de fail2ban via un petit outil en Python.

N’hésitez pas à faire des retours ou à suggérer des idées.

3 « J'aime »

Trop bien ! J’ai parcouru le code, Je le trouve super clean :ok_hand:

On est parti·es vers des directions différentes, c’est intéressant de voir les quelques différences (et les nombreuses ressemblances) de conception.

J’ai écrit les fonctionnalités essentielles de mon cahier des charges mental :

  • fonctionnalités de base
  • cli pour visualiser & annuler des bans
  • persistance des bans pour les reprendre au redémarrage du daemon ou de la machine

C’est encore en phase de test sur mon serveur perso, mais ça a déjà l’air de bien marcher, et d’être moins gourmand que fail2ban.

Le soft est officiellement en v0.1 :tada:

Coucou ! Mon soft reaction est arrivé en v1 cette nuit. (Git)
Voilà ses avantages (purement objectifs :upside_down_face: )

  • environ 10x moins gourmand en CPU et en RAM que fail2ban à charge de travail égale
  • Une configuration simple à comprendre et modifier dans un seul fichier de conf
  • Des exemples de configuration pour ssh, nextcloud, nginx, vaultwarden, directus, port fermés, chatgpt, slskd
  • Aussi adapté pour autre chose que des jails/ban : possibilité de lancer des commandes arbitraires à la rencontre de certains logs (ex : implémenter un webhook entrant en 3 lignes de conf)

J’ai la motiv pour le faire connaître, donc dispo pour aider des personnes à le mettre en place.

Roadmap de la V2 :

  • Intégrer une fonctionnalité de clusterisation (use case décrit par Neil plus haut)
4 « J'aime »

J’ai écrit un article de blog à ce sujet, pour lancer ma promo :3 post fediverse

7 « J'aime »