1. Répondre aux bonnes questions #
Les outils à votre disposition.
Vue d’ensemble #
| Question | Ré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.50Mesurer 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-feuDiagnostiquer #
| Symptôme | Cause probable | À vérifier |
|---|---|---|
| Aucune alerte | Log non déclaré | cscli metrics show acquisition |
| Beaucoup de lignes Unparsed | Mauvais type, collection manquante | cscli explain |
| Décision, mais pas de blocage | Pas de bouncer, mauvaise IP vue | cscli bouncers list |
| Ban d’une IP légitime | Faux positif | cscli 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: 6060curl -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"} 1scrape_configs:
- job_name: crowdsec
static_configs:
- targets: ["crowdsec:6060"]Niveau de détail. Le niveauaggregatedretire notammentcs_active_decisions,cs_alertset les métriques par bouncer. Gardezfullpour suivre les IP bloquées.
Les métriques utiles #
| Métrique | Ce qu’elle mesure |
|---|---|
cs_active_decisions | Décisions actives par raison, origine et action |
cs_alerts | Alertes par raison |
cs_bucket_overflowed_total | Débordements par scénario : les attaques détectées |
cs_parser_hits_ok_total, cs_parser_hits_ko_total | Lignes comprises ou non |
cs_filesource_hits_total | Lignes lues par fichier |
cs_lapi_bouncer_requests_total | Activité de chaque bouncer |
cs_appsec_reqs_total, cs_appsec_block_total | Requêtes inspectées et bloquées par AppSec |
cs_capi_last_pull_timestamp | Dernier 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: POSTActivez-les ensuite dans le profil, dans profiles.yaml :
notifications:
- http_defaultcrowdsecurity/ssh-bf : ban 203.0.113.50 pour 4hsudo 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.
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
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...