En bref
Cette vidéo fait partie de ma série sur le reverse proxy SWAG. Elle couvre trois points progressifs autour de CrowdSec : accéder à cscli directement depuis la machine hÎte, déployer Metabase pour avoir un dashboard de supervision, et ajouter le widget CrowdSec dans homepage.
Le contexte : pourquoi chercher des alternatives Ă lâinterface web CrowdSec
CrowdSec est une solution open source trĂšs puissante pour surveiller ce qui se passe sur vos services exposĂ©s sur internet â dĂ©tection de comportements suspects, bots, tentatives dâexploitation de failles. Mais son interface graphique officielle, disponible sur crowdsec.net, est trĂšs limitĂ©e dans sa version gratuite. La gestion des dĂ©cisions (dĂ©bannir une IP, par exemple), les blocklist premium, les interactions avancĂ©es â tout ça est derriĂšre un paywall.
Ce qui manque concrĂštement : une petite corbeille pour dĂ©bannir une adresse IP depuis lâinterface web. Ce nâest pas grand-chose, mais sans elle, il faut obligatoirement passer par la ligne de commande Ă lâintĂ©rieur du conteneur Docker. Câest pour ça que jâai cherchĂ© trois solutions complĂ©mentaires, de la plus simple Ă la plus avancĂ©e.
Ătape 1 â cscli directement depuis la machine hĂŽte
cscli, câest la ligne de commande de CrowdSec. Pour lâutiliser, il faut normalement faire un docker exec dans le conteneur CrowdSec. Ce nâest pas trĂšs pratique au quotidien.
La solution : crĂ©er un alias dans le .bashrc de la machine hĂŽte. Lâalias cscli devient une réécriture de docker exec -t crowdsec cscli â avec les arguments qui suivent propagĂ©s automatiquement. Il faut Ă©diter le .bashrc avec nano ou vi, ajouter lâalias, sauvegarder, puis se reconnecter ou sourcer le fichier pour que ça prenne effet.
alias cscli='docker exec -t crowdsec cscli'
Une fois lâalias en place, on peut par exemple lister les dĂ©cisions actives ou supprimer un ban directement depuis la machine hĂŽte :
cscli decisions list
cscli decisions delete -i <adresse_ip>
Jâai le mĂȘme principe pour OCC, la ligne de commande Nextcloud â bonus si vous lâutilisez :
alias occ='docker exec -t nextcloud occ'
Ătape 2 â Dashboard Metabase pour superviser CrowdSec
Il nâexiste pas dâinterface graphique open source complĂšte pour CrowdSec en auto-hĂ©bergement. La solution quasi-officielle Ă©tait cscli dashboard â une commande qui gĂ©nĂ©rait automatiquement un conteneur Metabase prĂ©configurĂ©. Mais cette fonctionnalitĂ© est maintenant dĂ©prĂ©ciĂ©e et ne fonctionne plus (not supported).
Il faut donc le faire Ă la main. Ce nâest pas trĂšs compliquĂ© mais il y a quelques piĂšges.
CrowdSec fournit un Dockerfile personnalisĂ© qui part de lâimage officielle Metabase et y injecte automatiquement les assets prĂ©configurĂ©s pour CrowdSec â les dashboards, les requĂȘtes SQL, tout. Le rĂ©sultat : Metabase dĂ©marre dĂ©jĂ avec les dashboards CrowdSec prĂȘts Ă lâemploi. Le lien vers ce Dockerfile est dans la description de la vidĂ©o.
Ce nouveau service crowdsec-dashboard sâajoute dans le docker-compose SWAG. Quelques points importants Ă comprendre :
Le volume de donnĂ©es est partagĂ© avec CrowdSec â Metabase lit directement la base de donnĂ©es CrowdSec. Il faut donc que les deux services pointent vers le mĂȘme rĂ©pertoire. Le PUID et PGID dĂ©pendent de votre machine â sur OpenMediaVault câest 998 et 1000, mais Ă vĂ©rifier sur votre installation. Si les droits ne sont pas bons, Metabase ne pourra pas lire la base.
Je ne publie pas de port direct sur la machine hĂŽte â le service sera accessible uniquement via le reverse proxy SWAG. Je le configure en restart: unless-stopped : il redĂ©marre sur crash mais pas sur arrĂȘt explicite.
Les identifiants par défaut pour se connecter à Metabase sont précisés dans la description de la vidéo. Une fois connecté, vous retrouvez les dashboards préconfigurés : cartes géographiques des attaquants, tableaux des alertes, décisions actives.
Mettre le dashboard derriĂšre SWAG
SWAG fournit un fichier de configuration exemple pour CrowdSec dashboard. Il suffit de le copier et de le renommer en crowdsec-dashboard.subdomain.conf. Deux conditions pour que ça fonctionne sans modification : le conteneur doit sâappeler crowdsec-dashboard et le sous-domaine aussi.
Je configure ce service en accĂšs interne uniquement â aucune raison dâexposer ce dashboard sur internet. Une fois le fichier de config en place, SWAG avec auto-reload le prend en compte automatiquement. Authelia sâapplique dessus comme pour les autres services.
Dernier point : une fois le dashboard accessible via le reverse proxy, je supprime le port direct exposĂ© sur la machine hĂŽte. Le dashboard nâest plus accessible directement â uniquement via le reverse proxy sĂ©curisĂ©.
Ătape 3 â Widget CrowdSec dans homepage
Homepage peut afficher un widget CrowdSec qui montre en temps rĂ©el les alertes actives et les bans. Câest le niveau le plus dĂ©licat â pas forcĂ©ment complexe, mais si on nâa pas une bonne maĂźtrise des rĂ©seaux Docker et des API, on peut y perdre beaucoup de temps.
Pour que homepage puisse joindre le conteneur CrowdSec sur son port 8080 (lâAPI locale), plusieurs conditions doivent ĂȘtre rĂ©unies.
Le rĂ©seau Docker : homepage doit ĂȘtre sur le mĂȘme rĂ©seau que CrowdSec. Il faut ajouter le rĂ©seau homepage aux rĂ©seaux du conteneur CrowdSec dans le docker-compose.
Lâadresse de lâAPI locale : vĂ©rifier avec cscli lapi status que lâAPI locale Ă©coute bien sur 0.0.0.0:8080 et non 127.0.0.1:8080. En 127.0.0.1, elle nâest accessible que localement dans le conteneur â homepage ne pourra pas la joindre depuis un autre conteneur.
Les trusted IPs : CrowdSec refuse par dĂ©faut les appels depuis des machines non autorisĂ©es. Il faut ajouter les plages IP Docker dans la configuration trusted_ips de CrowdSec. Vous pouvez mettre toutes les plages Docker, câest un peu large mais ça reste dans les rĂ©seaux internes Docker. Sinon, fixer une IP statique pour le conteneur homepage â mais attention, Docker peut changer les IPs entre les redĂ©marrages si elles ne sont pas fixĂ©es.
La clĂ© dâAPI locale : se trouve dans le fichier local_api_credentials.yaml du rĂ©pertoire CrowdSec. Je lâexternalise dans une variable dâenvironnement dans le docker-compose.
La configuration du widget se fait via des labels sur le service CrowdSec dans le docker-compose â le type du widget, les champs Ă afficher (alerts et bans), lâURL de lâAPI locale, et la clĂ© dâAPI. La documentation homepage couvre ça en dĂ©tail.
Déboguer quand ça ne marche pas
Les logs homepage sont trĂšs utiles. Un 401 signature invalide indique que la clĂ© API est incorrecte. Un timeout ou une erreur rĂ©seau indique que le rĂ©seau Docker nâest pas correctement configurĂ© entre homepage et CrowdSec. RedĂ©marrer les deux conteneurs aprĂšs chaque modification de configuration.
En résumé
Trois niveaux de supervision pour CrowdSec, du plus simple au plus avancé :
- Alias
cscliâ 2 minutes, immĂ©diatement utile pour gĂ©rer les bans depuis la machine hĂŽte sans rentrer dans le conteneur - Dashboard Metabase â quelques dizaines de minutes, supervision visuelle complĂšte, accessible via le reverse proxy
- Widget homepage â plus dĂ©licat Ă configurer, mais rĂ©sultat immĂ©diat : un coup dâĆil sur la page dâaccueil suffit pour voir lâĂ©tat de CrowdSec
CrowdSec reste un outil puissant mĂȘme sans payer. Ces trois solutions permettent de compenser les limitations de lâinterface gratuite et dâavoir une supervision correcte de son installation.