0 Votes

CrowdSec

Modifié par john le 2026/09/19 20:31

Détection et blocage des comportements malveillants. CrowdSec lit les journaux (SWAG, SSH, Authelia, Nextcloud), y reconnaît des attaques (force brute, scans, exploitation de failles connues) et décide de bannir les adresses en cause. Le blocage lui-même est appliqué par le bouncer intégré à SWAG. CrowdSec partage aussi ses signalements avec la communauté et reçoit en retour une liste d'adresses malveillantes connues.

Déploiement : dans la stack swag, voir Reverse proxy.

Fonctionnement

ComposantRôle
AgentLit les journaux, les analyse (parseurs) et détecte les attaques (scénarios)
API locale (LAPI)Enregistre les alertes et les décisions (bannissements)
Bouncer (dans SWAG)Interroge l'API locale et bloque, ou présente un captcha, aux adresses concernées
API centrale (CAPI)Partage des signalements, liste de blocage communautaire
ConsoleTableau de bord en ligne sur app.crowdsec.net (instance enregistrée)

Sources de journaux

Dans <APPDATA>/crowdsec/config/acquis.yaml et acquis.d/ :

filenames:
  - /var/log/host/auth.log
labels:
 type: syslog
---
filenames:
  - /var/log/swag/*
labels:
 type: nginx

acquis.d/authelia-docker.yaml :

source: docker
container_name:
  - authelia
labels:
 type: authelia

acquis.d/nextcloud.yaml :

filenames:
  - /var/log/nextcloud-data/nextcloud.log
labels:
 type: Nextcloud

Montages correspondants dans le service crowdsec de la stack :

HôteConteneurPour
/var/log/var/log/host (lecture seule)Connexions SSH (auth.log)
<APPDATA>/swag/config/log/nginx/var/log/swag (lecture seule)Requêtes HTTP
/var/run/docker.sockidem (lecture seule)Journaux Docker d'Authelia
<APPDATA>/Nextcloud/Data/var/log/nextcloud-data (lecture seule)Connexions Nextcloud
Warning

Debian 13 n'installe plus rsyslog : sans lui, /var/log/auth.log n'existe pas et les tentatives SSH ne sont pas surveillées. Installer rsyslog sur l'hôte.

Pour Nextcloud, le dossier entier est monté plutôt que le seul fichier : lors de la rotation du journal, un montage de fichier resterait attaché à l'ancien. Nextcloud doit aussi connaître SWAG comme proxy de confiance (trusted_proxies et forwarded_for_headers dans config.php), sinon son journal ne contient que l'adresse de SWAG.

Autres sources prises en charge par l'image : journald, syslog, Loki, Kafka, S3, Kubernetes, requêtes HTTP…

Collections

Une collection regroupe les parseurs et scénarios d'un logiciel. Elle n'a d'effet que si CrowdSec reçoit les journaux correspondants.

CollectionDétecte
crowdsecurity/nginxJournaux de SWAG
crowdsecurity/base-http-scenariosScans, robots malveillants, force brute HTTP
crowdsecurity/http-cveTentatives d'exploitation de failles connues
crowdsecurity/linux et crowdsecurity/sshdForce brute SSH
LePresidente/autheliaÉchecs de connexion au portail Authelia
crowdsecurity/nextcloudÉchecs de connexion et alertes de force brute de Nextcloud
crowdsecurity/whitelist-good-actorsNe jamais bannir les robots légitimes connus (moteurs de recherche…)

Installées puis retirées faute de journaux : Jellyfin (tourne sur le Raspberry Pi), nginx-proxy-manager (autre reverse proxy), joplin-server.

docker exec crowdsec cscli collections list
docker exec crowdsec cscli collections install <COLLECTION>
docker exec crowdsec cscli collections remove <COLLECTION>
docker exec crowdsec cscli hub update && docker exec crowdsec cscli hub upgrade

Les collections de départ sont aussi déclarées dans la variable COLLECTIONS de la stack.

Vérifier que tout est lu

docker exec crowdsec cscli metrics show acquisition

Chaque source doit avoir des lignes lues ; une source absente ou à zéro ne protège rien. Colonne Lines whitelisted : lignes ignorées, notamment celles venant du réseau local.

Décisions et alertes

docker exec crowdsec cscli decisions list                          # adresses bannies
docker exec crowdsec cscli decisions delete --ip <IP>              # débloquer
docker exec crowdsec cscli decisions add --ip <IP> --duration 24h  # bannir à la main
docker exec crowdsec cscli alerts list                             # dernières détections
docker exec crowdsec cscli alerts inspect <ID>                     # détail d'une alerte

Bouncer

Le bouncer est un mod de SWAG (swag-crowdsec), configuré par les variables du service swag : CROWDSEC_LAPI_URL, CROWDSEC_API_KEY, et pour le captcha CROWDSEC_CAPTCHA_PROVIDER avec ses clés Turnstile.

docker exec crowdsec cscli bouncers add swag-bouncer    # nouvelle clé, à reporter dans CROWDSEC_API_KEY
docker exec crowdsec cscli bouncers list
docker exec -it crowdsec cscli bouncers prune -d 168h    # supprimer les entrées inactives depuis 7 jours

À chaque recréation, SWAG change d'adresse IP et CrowdSec enregistre une nouvelle entrée swag-bouncer@<IP> avec la même clé. Nettoyer de temps en temps avec prune.

Communauté et console

docker exec crowdsec cscli capi status

En place : instance enregistrée dans la console (abonnement communautaire), partage des signalements activé, liste de blocage communautaire et listes de la console reçues.

Options disponibles, non utilisées ici

Profils de remédiation

/etc/crowdsec/profiles.yaml décide de la réponse à chaque alerte : type (ban ou captcha) et durée (4 heures par défaut). Exemple, captcha plutôt que bannissement pour les alertes HTTP :

name: captcha_http
filters:
  - Alert.Remediation == true && Alert.GetScope() == "Ip" && Alert.GetScenario() startsWith "crowdsecurity/http"
decisions:
  - type: captcha
   duration: 4h
on_success: break

À placer avant le profil par défaut.

Liste blanche personnalisée

Fichier dans /etc/crowdsec/parsers/s02-enrich/ :

name: perso/whitelist
description: "Adresses à ne jamais bannir"
whitelist:
 reason: "adresses de confiance"
 ip:
    - "<IP>"
 cidr:
    - "<RESEAU>/24"

Mode simulation

docker exec crowdsec cscli simulation enable <SCENARIO>   # détecter sans bannir

Utile pour tester un nouveau scénario sans risque de bloquer des visiteurs légitimes.

Pare-feu applicatif (AppSec)

Composant de pare-feu web : analyse chaque requête avant qu'elle n'atteigne le service et bloque les exploitations connues (correctifs virtuels). Nécessite une source appsec dans l'acquisition et un bouncer compatible. Un essai a été désactivé ici (acquis.d/appsec.yaml.BAD).

Notifications

Greffons d'envoi (HTTP, courriel, Slack…) déclenchés à chaque décision, déclarés dans profiles.yaml (notifications:). Le greffon HTTP permet par exemple un message Telegram à chaque bannissement.

Tester l'analyse d'une ligne

docker exec crowdsec cscli explain --log '<LIGNE_DE_JOURNAL>' --type nginx

Montre quel parseur reconnaît la ligne et quel scénario elle alimente.

Sauvegarde

<APPDATA>/crowdsec (configuration, base des décisions, identifiants de l'API centrale) est sauvegardé par le script de Sauvegarde.