RousselTMLEARNING

Article · CrowdSec : de la découverte à l'expertise

Observabilité de CrowdSec

1. Répondre aux bonnes questions #

Les outils à votre disposition.

Vue d’ensemble #

Prometheus, Grafana, Alertmanager, cscli, notifications et console permettent de suivre CrowdSec

QuestionRéponse
Quelles IP sont bannies ?cscli decisions list
Quelles attaques ont été détectées ?cscli alerts list --since 24h
Combien de paquets ou requêtes ont été bloqués ?cscli metrics show bouncers
Mes logs sont-ils lus et compris ?cscli metrics show acquisition parsers
Quels scénarios se déclenchent ?cscli metrics show scenarios
Mes bouncers sont-ils vivants ?cscli bouncers list

2. Avec cscli #

La vue immédiate.

Suivre les IP bannies #

sudo cscli decisions list
sudo cscli decisions list --origin crowdsec
sudo cscli decisions list --origin CAPI
sudo cscli decisions list -o json
| ID | Source   | Scope:Value     | Reason               | Action | Events | expiration |
| 1  | crowdsec | Ip:203.0.113.50 | crowdsecurity/ssh-bf | ban    | 6      | 3h59m46s   |

La colonne Source indique l'origine : crowdsec (détection locale), cscli (manuelle), CAPI (communauté).

Analyser une attaque #

sudo cscli alerts list --since 24h
sudo cscli alerts inspect 3 --details
- ID           : 3
 - Machine      : test
 - Simulation   : false
 - Remediation  : true
 - Reason       : crowdsecurity/ssh-bf
 - Events Count : 6
 - Scope:Value  : Ip:203.0.113.50

Mesurer le blocage réel #

Une décision ne dit pas si quelque chose a été bloqué. Seul le bouncer le sait : cscli metrics show bouncers affiche par origine le nombre d'adresses actives et le volume bloqué (CrowdSec 1.6.3 et bouncer pare-feu 0.0.30 minimum).

sudo cscli metrics show bouncers
sudo nft list table ip crowdsec   # compteurs du pare-feu

Diagnostiquer #

SymptômeCause probableÀ vérifier
Aucune alerteLog non déclarécscli metrics show acquisition
Beaucoup de lignes UnparsedMauvais type, collection manquantecscli explain
Décision, mais pas de blocagePas de bouncer, mauvaise IP vuecscli bouncers list
Ban d’une IP légitimeFaux positifcscli alerts inspect, allowlist

3. Prometheus et Grafana #

L’historique et les tableaux de bord.

Exposer les métriques #

Dans config.yaml :

prometheus:
  enabled: true
  level: full            # none, aggregated ou full
  listen_addr: 0.0.0.0   # 127.0.0.1 par défaut : à ouvrir pour un Prometheus distant
  listen_port: 6060
curl -s http://127.0.0.1:6060/metrics | grep -E '^cs_(active_decisions|alerts)'
# cs_active_decisions{action="ban",origin="crowdsec",reason="crowdsecurity/ssh-bf"} 1
# cs_alerts{kind="crowdsec",reason="crowdsecurity/ssh-bf"} 1
scrape_configs:
  - job_name: crowdsec
    static_configs:
      - targets: ["crowdsec:6060"]
Niveau de détail. Le niveau aggregated retire notamment cs_active_decisions, cs_alerts et les métriques par bouncer. Gardez full pour suivre les IP bloquées.

Les métriques utiles #

MétriqueCe qu’elle mesure
cs_active_decisionsDécisions actives par raison, origine et action
cs_alertsAlertes par raison
cs_bucket_overflowed_totalDébordements par scénario : les attaques détectées
cs_parser_hits_ok_total, cs_parser_hits_ko_totalLignes comprises ou non
cs_filesource_hits_totalLignes lues par fichier
cs_lapi_bouncer_requests_totalActivité de chaque bouncer
cs_appsec_reqs_total, cs_appsec_block_totalRequêtes inspectées et bloquées par AppSec
cs_capi_last_pull_timestampDernier téléchargement de la liste communautaire

Les requêtes PromQL #

# IP actuellement bloquées, par scénario
sum by (reason) (cs_active_decisions)

# Décisions locales et communautaires
sum by (origin, action) (cs_active_decisions)

# Attaques détectées sur 24 h, par scénario
sum by (name) (increase(cs_bucket_overflowed_total[24h]))

# Lignes de log non comprises : un parser manque ?
sum by (source) (rate(cs_parser_hits_ko_total[5m]))

# Volume lu par source de logs
sum by (source) (rate(cs_filesource_hits_total[5m]))

increase() ne compte pas le tout premier débordement d'un scénario : la série n'existe qu'à partir de lui. Pour un décompte exact, regardez aussi cs_alerts.

Pour Grafana, CrowdSec publie des tableaux de bord prêts à importer dans le dépôt crowdsecurity/grafana-dashboards (Overview, Insight, Details).

Alerter sur la santé #

Le pire incident est silencieux : CrowdSec ne lit plus rien et plus rien n'est bloqué.

groups:
  - name: crowdsec
    rules:
      - alert: CrowdSecLogsNonLus
        expr: sum(rate(cs_filesource_hits_total[10m])) == 0
        for: 15m
        labels: {severity: warning}
        annotations:
          summary: "CrowdSec ne lit plus aucune ligne de log"
      - alert: CrowdSecLogsNonCompris
        expr: sum(rate(cs_parser_hits_ko_total[10m])) > 1
        for: 30m
        labels: {severity: warning}
        annotations:
          summary: "Beaucoup de lignes de log ne sont pas comprises"

4. Notifications et console #

Être prévenu en direct.

Les notifications #

Les plugins slack, email, http et splunk se configurent dans /etc/crowdsec/notifications/, par exemple http.yaml :

type: http
name: http_default
log_level: info
format: |
  {{ range . -}}
  {{ .Scenario }} : {{ range .Decisions }}{{ .Type }} {{ .Value }} pour {{ .Duration }}{{ end }}
  {{ end -}}
url: https://exemple.fr/alertes
method: POST

Activez-les ensuite dans le profil, dans profiles.yaml :

notifications:
  - http_default
crowdsecurity/ssh-bf : ban 203.0.113.50 pour 4h
sudo cscli notifications list
sudo cscli notifications test http_default
Évitez le bruit. Une notification par attaque, sur un serveur exposé, cela fait vite beaucoup. Réservez-les aux scénarios importants, grâce à un profil dédié.

La console #

La console CrowdSec présente en ligne vos instances, alertes et décisions. Elle complète Prometheus, sans rien à héberger. Vous restez libre de ne pas l'utiliser.

Sources #

Commandes, métriques et notification HTTP vérifiées sur CrowdSec 1.8.2.

📄 Observabilité de CrowdSec : IP bannies, attaques bloquées, Prometheus et Grafana →

Mon suivi

  • ⏱ Durée estimée : ≈ 13 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Poser une question

Articles recommandés

CrowdSec en production : bonnes pratiques

Les réflexes pour exploiter CrowdSec en production : LAPI, clés, faux positifs, base de données, ...

Collections, parsers et scénarios CrowdSec

Le Hub, les collections, le pipeline des parsers et les scénarios : installer, comprendre avec cs...

Traefik : les logs (journaux applicatifs et access logs)

Configurer les deux journaux de Traefik : le journal de fonctionnement (niveaux, format) et les a...

Protection des Applications

Découvrez comment sécuriser vos backends contre les abus et les attaques courantes. Guide pratiqu...

Les types de métriques dans Prometheus

Découvrez en détail les quatre types de métriques supportés par Prometheus (Counter, Gauge, Histo...

Bonnes pratiques Traefik : sécurité, haute disponibilité et observabilité

Bonnes pratiques Traefik : sécurisation du dashboard et du socket Docker, TLS moderne, middleware...

Traefik : les métriques avec Prometheus et OpenTelemetry

Exposer les métriques de Traefik (Prometheus ou OTLP), comprendre les séries par entrypoint, rout...

Prometheus : alerter avec Alertmanager (règles, routage, silences)

Mettre en place l'alerting Prometheus : règles d'alerte, Alertmanager, routage, regroupement, inh...

HAProxy dans Kubernetes : L'Ingress Controller Haute Performance

Découvrez en profondeur l'intégration de HAProxy dans Kubernetes. Architecture Direct-to-Pod, opt...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !