CrowdSec Web UI est un projet open source développé par TheDuffman85 et ses contributeurs. Sans leur travail, cet article n’existerait pas. Le projet est disponible sur GitHub sous licence AGPL-3.0 — si vous l’utilisez, pensez à lui laisser une ⭐ sur le repo.
Sommaire
- Introduction
- Ce que ça apporte concrètement
- Prérequis
- 1. Créer le compte machine CrowdSec
- 2. Configurer l’écoute de la LAPI
- 3. Déployer CrowdSec Web UI
- 4. Vérifier la connexion
- 5. Protéger l’accès avec Nginx et Authentik
- 6. Donner accès à un tiers de confiance
- 7. Configurer les notifications
- Conclusion
Introduction
Après avoir configuré CrowdSec pour protéger son serveur, on se retrouve vite à taper par exemple cscli decisions list dans le terminal pour voir ce qui se passe. Ça fonctionne, mais c’est loin d’être pratique, surtout quand on veut partager un rapport avec quelqu’un d’autre ou avoir une vue d’ensemble claire de son infrastructure.
CrowdSec Web UI répond exactement à ce besoin. C’est une interface web open source qui se connecte à l’API locale de CrowdSec et expose tout ce dont on a besoin : tableau de bord avec statistiques, carte géographique des attaquants, gestion des décisions, historique des alertes et système de notifications.
Je l’utilise personnellement pour produire des rapports lisibles et donner accès à des tiers de confiance sans ouvrir un accès SSH.

Ce que ça apporte concrètement
Le tableau de bord affiche en temps réel les alertes actives, les décisions en cours et les scénarios déclenchés. Une carte mondiale positionne géographiquement les IPs bloquées, pratique pour visualiser d’un coup d’œil l’exposition de son serveur.
La gestion des décisions permet de bannir ou débannir une IP directement depuis l’interface, sans passer par le terminal. Si un client ou un hébergeur vous contacte parce qu’une de ses IPs est bloquée, vous pouvez lui donner accès en lecture ou intervenir vous-même et produire un rapport structuré.
Le système de notifications envoie des alertes par email, ntfy, MQTT ou webhook quand un seuil est dépassé ou qu’un CVE récent est détecté dans les alertes.
Prérequis
- CrowdSec déjà installé (paquet natif ou Docker)
- Docker et Docker Compose installés
1. Créer le compte machine CrowdSec
CrowdSec Web UI se connecte à l’API locale via un compte machine dédié. Commencez par générer un mot de passe sécurisé :
openssl rand -hex 32
Notez ce mot de passe. Créez ensuite le compte machine selon votre installation.
CrowdSec en paquet natif :
sudo cscli machines add crowdsec-web-ui --password <mot-de-passe-généré> -f /dev/null
CrowdSec en Docker :
docker exec crowdsec cscli machines add crowdsec-web-ui --password <mot-de-passe-généré> -f /dev/null
Le flag -f /dev/null est important car il empêche d’écraser le fichier de credentials du conteneur CrowdSec existant.
2. Configurer l’écoute de la LAPI
C’est le point qui pose le plus de problèmes. CrowdSec Web UI tourne en Docker et doit joindre l’API CrowdSec (LAPI). Selon votre configuration, deux approches sont possibles.
CrowdSec en paquet natif {#crowdsec-natif}
Par défaut, la LAPI écoute sur 127.0.0.1:8080. Un conteneur Docker ne peut pas joindre le loopback de l’hôte — il faut donc faire écouter la LAPI sur l’IP locale du serveur.
Éditez /etc/crowdsec/config.yaml :
api:
server:
listen_uri: 192.168.1.30:8080
Remplacez 192.168.1.30 par l’IP locale de votre serveur. Redémarrez CrowdSec :
sudo systemctl restart crowdsec
CrowdSec en Docker {#crowdsec-docker}
Si CrowdSec lui-même tourne en Docker, la solution la plus propre est de mettre CrowdSec Web UI sur le même réseau Docker. Les conteneurs du même réseau se joignent par leur nom de service, sans passer par l’IP de l’hôte.
Vérifiez le nom du réseau de votre conteneur CrowdSec :
docker inspect crowdsec | grep -A 10 Networks
Dans votre .env, utilisez le nom du service CrowdSec :
CROWDSEC_URL=http://crowdsec:8080
Et dans le docker-compose.yml, attachez les deux conteneurs au même réseau.
3. Déployer CrowdSec Web UI
Créez un dossier pour le projet :
mkdir -p /opt/docker/crowdsec-web-ui/data
cd /opt/docker/crowdsec-web-ui
Créez le fichier .env en adaptant selon votre cas :
# CrowdSec natif — adapter l'IP
CROWDSEC_URL=http://192.168.1.30:8080
# CrowdSec Docker — décommenter et commenter la ligne ci-dessus
# CROWDSEC_URL=http://crowdsec:8080
CROWDSEC_USER=crowdsec-web-ui
CROWDSEC_PASSWORD=<mot-de-passe-généré>
CROWDSEC_REFRESH_INTERVAL=30s
CROWDSEC_LOOKBACK_PERIOD=168h
Créez le docker-compose.yml :
services:
crowdsec-web-ui:
image: ghcr.io/theduffman85/crowdsec-web-ui:latest
container_name: crowdsec_web_ui
env_file:
- .env
volumes:
- ./data:/app/data
restart: unless-stopped
networks:
- crowdsec-net
networks:
crowdsec-net:
external: true
Démarrez le conteneur :
docker compose up -d
docker compose logs -f
4. Vérifier la connexion
curl http://localhost:3000/api/health
# {"status":"ok"}
Vérifiez que le compte machine est actif :
# CrowdSec natif
sudo cscli machines list
# CrowdSec Docker
docker exec crowdsec cscli machines list
Vous devriez voir crowdsec-web-ui dans la liste avec un statut actif.
[📷 Screenshot de cscli machines list avec crowdsec-web-ui actif — à insérer ici]
5. Protéger l’accès avec Nginx et Authentik
CrowdSec Web UI n’a aucune authentification intégrée. La sécurité sera déléguée au reverse proxy, ce qui est la bonne approche.
Pour ma part, j’utilise Authentik comme SSO centralisé. Tous mes services internes passent par Nginx qui vérifie l’authentification avant de laisser passer la requête.

Le guide Authentik complet fera l’objet d’un article dédié.
6. Donner accès à un tiers de confiance
Un des cas d’usage concrets : permettre à quelqu’un d’autre de consulter les données sans accès SSH.
Si un client vous contacte parce qu’une de ses IPs est bloquée, deux options selon le niveau de confiance accordé : lui donner un accès temporaire via Authentik pour qu’il consulte lui-même les alertes qui ont déclenché le blocage, ou intervenir directement depuis l’interface, débannir l’IP et lui envoyer un rapport visuel.

La carte géographique et les statistiques par scénario permettent de produire rapidement un document compréhensible, même par quelqu’un qui ne connaît pas CrowdSec.
7. Configurer les notifications
CrowdSec Web UI peut envoyer des alertes quand un seuil est dépassé. Rendez-vous dans l’interface → Notifications → Nouveau canal.
Les destinations supportées : email, ntfy, Gotify, MQTT et webhook. Pour chaque canal, vous pouvez définir des règles sur le type d’événement — pic d’alertes, seuil dépassé, CVE récent détecté, ou mise à jour disponible.

Conclusion
CrowdSec Web UI transforme la supervision de sécurité en quelque chose d’accessible et de partageable. L’interface est propre, les données sont claires, et la carte géographique donne une vision immédiate de l’exposition de son serveur.
L’essentiel à retenir : ne jamais exposer le port 3000 directement sur Internet. Derrière Authentik ou n’importe quel proxy auth, c’est un outil très utile au quotidien, aussi bien pour soi que pour collaborer avec un tiers.
Sources : TheDuffman85/crowdsec-web-ui — AGPL-3.0