Zum Inhalt springen

CrowdSec

Die Security-Engine: aktive Entscheidungen und ihre Herkunft, Alarme, Bouncer, die aufgehört haben abzufragen, gelesene Log-Zeilen und solche, die kein Parser erkannt hat, und ob die Local API antwortet.

DumbMonit liest CrowdSecs Prometheus-Metriken (Port 6060) und prüft /health der Local API (Port 8080). Mit einem optionalen Bouncer-Key fragt es die Local API zusätzlich nach den Entscheidungen zu 192.0.2.1, einer Dokumentationsadresse: Die Antwort ist immer leer und beweist, dass Authentifizierung und Datenbank antworten. Es erstellt oder löscht nie eine Entscheidung und lädt die Bannliste nie herunter.

Der beobachtenswerte Fehler ist ein Bouncer, der aufgehört hat abzufragen. Die Firewall oder der Reverse Proxy läuft mit der Liste weiter, die sie hatte, neue Angreifer kommen durch, und nichts beschwert sich. CrowdSec veröffentlicht nicht, wann ein Bouncer zuletzt abgefragt hat; DumbMonit liest es aus dem Request-Zähler des Bouncers, der aufhört sich zu bewegen. Der zweite ist eine defekte Acquisition (eine umbenannte Log-Datei, ein neu erstellter Container): CrowdSec liest nichts, sieht keinen Angriff und bleibt grün.

Alle Metriken haben das Präfix dumbmonit_crowdsec_. Totals sind Zähler: Diagramme und Regeln verwandeln sie in Raten.

MetrikWasLabels
version_infoWert 1version
lapi_up1, wenn die Local API /health beantwortet
lapi_decisions_okmit einem Bouncer-Key: 1, wenn die Local API die Entscheidungsabfrage beantwortet hat
decisionsaktive Entscheidungen, Community-Blocklisten eingeschlossen
decisions_by_originorigin: crowdsec, cscli, CAPI, lists…
alertsvon der Local API vorgehaltene Alarme, Community-Alarme ausgeschlossen
bouncers_seenBouncer, die die Local API seit dem Start von CrowdSec aufgerufen haben
bouncer_requests_totalRequests jedes Bouncers; bewegt er sich nicht mehr, hat der Bouncer aufgehört abzufragenbouncer
machine_requests_totalRequests jedes Agents (Maschine)machine
lapi_requests_totalalle Requests an die Local API
scenario_overflows_totalvom lokalen Agent ausgelöste Szenarien: jedes ist ein Alarm
lines_read_total, lines_parsed_total, lines_unparsed_totalvom Agent gelesene Log-Zeilen, und die geparsten oder nicht
source_lines_total, source_lines_unparsed_totaldasselbe pro Log-Quellesource
bucketsderzeit offene Szenario-Buckets
alerts_recentmit einem Maschinen-Login: lokale Alarme der letzten 24 Stunden, aus der Local API gelesen
alerts_by_countrymit einem Maschinen-Login: diese Alarme nach Herkunftsland (source.cn)country

Die Local-API-Familien erscheinen, wo die Local API läuft, die Log-Familien, wo ein Agent Logs liest; das offizielle Image und eine Standardinstallation laufen beide.

Die geltenden eingebauten Regeln: CrowdSec Local API down, CrowdSec bouncer stopped pulling, CrowdSec reads no logs, plus Monitor unreachable.

Das Panel über den Diagrammen liest, was die Abfrage gespeichert hat; das Öffnen der Seite fragt CrowdSec nie ab. Es sagt in einem Satz, was nicht stimmt (Local API, Bouncer, Log-Lesen und der Anteil nicht erkannter Zeilen), dann die aktiven Entscheidungen, vorgehaltenen Alarme, in den letzten 24 Stunden ausgelösten Szenarien und gelesenen Zeilen pro Sekunde, dann die Zeit seit der letzten Abfrage jedes Bouncers, die Entscheidungen nach Herkunft und den nicht geparsten Anteil jeder Log-Quelle.

Mit einem Maschinen-Login folgt eine Bedrohungskarte: die Alarme der letzten 24 Stunden, nach Land eingefärbt. Dieselben Zahlen speisen die Bedrohungskarte der Sicherheitsseite, neben den Blockierungen der Firewalls und den Bedrohungen von Cloudflare.

  1. CrowdSec veröffentlicht seine Metriken standardmäßig auf 127.0.0.1:6060. Setzen Sie listen_addr im prometheus-Abschnitt von /etc/crowdsec/config.yaml auf eine für DumbMonit erreichbare Adresse, starten Sie CrowdSec dann neu. Das offizielle Docker-Image hört bereits auf jeder Schnittstelle.

    sudo sed -i 's/listen_addr: 127.0.0.1/listen_addr: 0.0.0.0/' /etc/crowdsec/config.yaml
    sudo systemctl restart crowdsec
  2. Die Metriken brauchen kein Credential: Sie halten Zahlen, Bouncer- und Maschinennamen und Log-Dateipfade, nie eine IP-Adresse. Filtern Sie Port 6060, sodass nur der DumbMonit-Host ihn erreicht, und prüfen Sie, dass er antwortet.

    curl -s http://crowdsec.lan:6060/metrics | grep cs_info
  3. DumbMonit prüft außerdem /health der Local API, auf Port 8080 desselben Hosts: listen_uri im api.server-Abschnitt muss dann ebenfalls erreichbar sein. Entfernen Sie das Häkchen bei “Check the Local API” für einen Host, auf dem nur ein Agent läuft.

  4. Optional: Erstellen Sie einen Bouncer-Key für DumbMonit und fügen Sie ihn unten als Bouncer-API-Key ein. Ein Bouncer-Key kann nur Entscheidungen lesen. DumbMonit fragt nach den Entscheidungen zu 192.0.2.1, einer Dokumentationsadresse, daher ist die Antwort immer leer und die Bannliste wird nie herunterladen.

    sudo cscli bouncers add dumbmonit
  5. Oder, für die Bedrohungskarte der Sicherheitsseite: Legen Sie ein Maschinen-Login an und wählen Sie unten Maschinen-Login. Nur das Land jedes Alarms wird behalten.

    sudo cscli machines add dumbmonit --password 'a-long-password'
  6. Geben Sie in DumbMonit den CrowdSec-Host ein, zum Beispiel “crowdsec.lan”. Laufen Local API und Agents auf verschiedenen Hosts, fügen Sie jeden Host hinzu: Entscheidungen, Alarme und Bouncer werden gezählt, wo die Local API läuft, Log-Zeilen, wo jeder Agent sie liest.

Ein mit cscli bouncers delete gelöschter Bouncer behält seinen Zähler bis zum Neustart von CrowdSec und wird bis dahin als gestoppt gemeldet. Ein Bouncer, der die Local API nur aufruft, wenn er einen Request bedient (ein Reverse-Proxy-Bouncer im Live-Modus), kann in einer ruhigen Nacht eine halbe Stunde still sein; wechseln Sie auf Stream-Modus, oder erhöhen Sie das Fenster der Regel.

CredentialFelder
Nur MetrikenNichts: liest /metrics, und /health der Local API.
Bouncer API keyDer von cscli bouncers add dumbmonit ausgegebene Key, als X-Api-Key an die Local API gesendet.
Maschinen-LoginName und Passwort, die cscli machines add erhalten hat. DumbMonit meldet sich an (/v1/watchers/login) und liest die lokalen Alarme der letzten 24 Stunden (/v1/alerts, ohne Community-Alarme) und behält nur das Land jedes Alarms: Keine Adresse wird gespeichert.

Adresse: ein Hostname oder eine IP (crowdsec.lan), host:port für die Metriken, oder eine vollständige URL. Optionen: Protokoll (standardmäßig HTTP), Metrik-Port (6060), Check the Local API (ein), Local-API-Port (8080), Zertifikatsprüfung und Anfrage-Timeout (10 s). Veraltete oder als tainted markierte Hub-Elemente (Parser, Szenarien, Collections) sind über die Metriken nicht sichtbar, nur mit cscli hub list auf dem Host.