Ir al contenido

CrowdSec

El motor de seguridad: decisiones activas y de dónde vienen, alertas, bouncers que dejaron de obtener actualizaciones, líneas de log leídas y las que ningún parser reconoció, y si la Local API responde.

DumbMonit lee las métricas Prometheus de CrowdSec (puerto 6060) y comprueba /health de la Local API (puerto 8080). Con una clave de bouncer opcional, también pide a la Local API las decisiones sobre 192.0.2.1, una dirección de documentación: la respuesta siempre está vacía, y demuestra que la autenticación y la base de datos responden. Nunca crea ni elimina una decisión y nunca descarga la lista de bloqueo.

El fallo que vale la pena vigilar es un bouncer que dejó de obtener actualizaciones. El cortafuegos o proxy inverso sigue funcionando con la lista que tenía, los nuevos atacantes pasan, y nada se queja. CrowdSec no publica cuándo un bouncer obtuvo su última actualización; DumbMonit lo lee del contador de peticiones del bouncer, que deja de moverse. El segundo es una adquisición que se rompió (un archivo de log renombrado, un contenedor recreado): CrowdSec no lee nada, no ve ningún ataque, y se mantiene en verde.

Todas las métricas tienen el prefijo dumbmonit_crowdsec_. Los totales son contadores: las gráficas y las reglas los convierten en tasas.

MétricaQuéEtiquetas
version_infovalor 1version
lapi_up1 cuando la Local API responde a /health
lapi_decisions_okcon una clave de bouncer: 1 cuando la Local API respondió a la consulta de decisión
decisionsdecisiones activas, listas de bloqueo comunitarias incluidas
decisions_by_originorigin: crowdsec, cscli, CAPI, lists…
alertsalertas conservadas por la Local API, excluidas las comunitarias
bouncers_seenbouncers que llamaron a la Local API desde que CrowdSec arrancó
bouncer_requests_totalpeticiones de cada bouncer; cuando deja de moverse, el bouncer dejó de obtener actualizacionesbouncer
machine_requests_totalpeticiones de cada agente (machine)machine
lapi_requests_totaltodas las peticiones a la Local API
scenario_overflows_totalescenarios activados por el agente local: cada uno es una alerta
lines_read_total, lines_parsed_total, lines_unparsed_totallíneas de log leídas por el agente, y las analizadas o no
source_lines_total, source_lines_unparsed_totallo mismo por fuente de logsource
bucketsbuckets de escenario actualmente abiertos
alerts_recentcon un acceso de máquina: alertas locales de las últimas 24 horas leídas de la Local API
alerts_by_countrycon un acceso de máquina: esas alertas por país de origen (source.cn)country

Las familias de la Local API aparecen donde se ejecuta la Local API, las familias de log donde un agente lee logs; la imagen oficial y una instalación estándar ejecutan ambas.

Las reglas integradas que se aplican: CrowdSec Local API down, CrowdSec bouncer stopped pulling, CrowdSec reads no logs, además de Monitor unreachable.

El panel sobre las gráficas lee lo que guardó la sonda; abrir la página nunca consulta CrowdSec. Indica en una frase qué va mal (Local API, bouncers, lectura de logs y la proporción de líneas que ningún parser reconoció), luego las decisiones activas, alertas conservadas, escenarios activados en las últimas 24 horas y líneas leídas por segundo, y después el tiempo desde la última actualización de cada bouncer, las decisiones por origen y la proporción no analizada de cada fuente de log.

Con un acceso de máquina aparece un mapa de amenazas: las alertas de las últimas 24 horas, coloreadas por país. Los mismos recuentos alimentan el mapa de amenazas de la página Seguridad, junto a los bloqueos de los cortafuegos y las amenazas de Cloudflare.

Dejar que DumbMonit lea las métricas de CrowdSec

Sección titulada «Dejar que DumbMonit lea las métricas de CrowdSec»
  1. CrowdSec publica sus métricas en 127.0.0.1:6060 por defecto. Define listen_addr en la sección prometheus de /etc/crowdsec/config.yaml con una dirección que DumbMonit pueda alcanzar, y luego reinicia CrowdSec. La imagen Docker oficial ya escucha en todas las interfaces.

    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. Las métricas no necesitan ninguna credencial: contienen recuentos, nombres de bouncer y machine y rutas de archivos de log, nunca una dirección IP. Filtra el puerto 6060 para que solo el host de DumbMonit lo alcance, y comprueba que responde.

    curl -s http://crowdsec.lan:6060/metrics | grep cs_info
  3. DumbMonit también comprueba /health de la Local API, en el puerto 8080 del mismo host: listen_uri en la sección api.server debe entonces también ser accesible. Desmarca Check the Local API para un host que solo ejecuta un agente.

  4. Opcional: crea una clave de bouncer para DumbMonit y pégala como Bouncer API key abajo. Una clave de bouncer solo puede leer decisiones. DumbMonit pide las decisiones sobre 192.0.2.1, una dirección de documentación, así que la respuesta siempre está vacía y la lista de bloqueo nunca se descarga.

    sudo cscli bouncers add dumbmonit
  5. O, para el mapa de amenazas de la página Seguridad: crea un acceso de máquina y elige Acceso de máquina más abajo. Solo se guarda el país de cada alerta.

    sudo cscli machines add dumbmonit --password 'a-long-password'
  6. En DumbMonit, introduce el host de CrowdSec, por ejemplo «crowdsec.lan». Cuando la Local API y los agentes se ejecutan en hosts distintos, añade cada host: las decisiones, alertas y bouncers se cuentan donde se ejecuta la Local API, las líneas de log donde cada agente las lee.

Un bouncer eliminado con cscli bouncers delete conserva su contador hasta que CrowdSec se reinicia, y se reporta como detenido hasta entonces. Un bouncer que solo llama a la Local API cuando sirve una petición (un bouncer de proxy inverso en modo live) puede quedarse callado durante media hora en una noche tranquila; cámbialo a modo stream, o eleva la ventana de la regla.

CredencialCampos
Solo métricasNada: lee /metrics, y /health de la Local API.
Clave de API de bouncerLa clave impresa por cscli bouncers add dumbmonit, enviada como X-Api-Key a la Local API.
Acceso de máquinaEl nombre y la contraseña dados a cscli machines add. DumbMonit inicia sesión (/v1/watchers/login) y lee las alertas locales de las últimas 24 horas (/v1/alerts, sin las comunitarias), guardando solo el país de cada una: no se almacena ninguna dirección.

Dirección: un nombre de host o IP (crowdsec.lan), host:puerto para las métricas, o una URL completa. Opciones: protocolo (HTTP por defecto), puerto de métricas (6060), Check the Local API (activado), puerto de la Local API (8080), comprobación de certificado y tiempo de espera de la petición (10 s). Los elementos del hub (parsers, escenarios, colecciones) contaminados o desactualizados no son visibles a través de las métricas, solo con cscli hub list en el host.