Este artículo está disponible en francés.
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.
Mi seguimiento
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión
Artículos recomendados
Décisions, profils, allowlists et AppSec dans CrowdSec
Gérer les décisions avec cscli, adapter la durée et le type de blocage avec les profils, éviter l...
Les plugins Traefik : l'exemple de CrowdSec pour bloquer les attaques
Étendre Traefik avec des plugins (catalogue officiel, interpréteur Yaegi), puis protéger ses appl...
Installer et configurer CrowdSec : paquets, Docker, acquisition
Installer CrowdSec avec les paquets ou Docker, comprendre ses fichiers, déclarer les logs à lire,...
Les bouncers CrowdSec : principes et bouncer pare-feu
Comprendre les bouncers CrowdSec : où bloquer, modes live et stream, clés d'API, API des décision...
CrowdSec : comprendre le pare-feu collaboratif
Ce qu'est CrowdSec, comment il détecte et bloque les attaques : Security Engine, parsers, scénari...
CrowdSec ou Fail2ban : quelles différences ?
Comparaison de CrowdSec et Fail2ban : détection, blocage, partage, performances, multi-serveurs, ...
Protéger Traefik avec CrowdSec : le plugin bouncer
Mettre en place le bouncer CrowdSec dans Traefik : plugin, middleware, modes stream et live, IP r...
Bouncers CrowdSec pour Nginx, Apache et HAProxy
Mettre en place les bouncers CrowdSec pour Nginx, OpenResty, Apache et HAProxy SPOA : configurati...
Bouncers CrowdSec : Cloudflare, équipements réseau, Kubernetes et bouncer sur mesure
Bloquer au CDN avec Cloudflare Workers, alimenter pfSense ou MikroTik avec Blocklist Mirror, prot...