Dashboards con Crowdsec: Metabase o Prometheus con Grafana

En este post veremos dos opciones de tener un seguimiento de nuestra infraestructura de Crowdsec, tendremos dos opciones, una sencillita, un contenedor de Docker con todo listo. O, porqué no, disfrutar de la vida e integrarlo en Prometheus y visualizarlo con Grafana!

Si queremos conocer el estado de nuestras máquinas con Crowdsec, lo mejor es realizarlo mediante GUI y que algunos dashboards ya hechos por la comunidad nos ayuden, lo dicho, tenemos dos opciones, una usar un contenedor de Docker con Metabase ya preconfigurado a conectar contra el LAPI local, algo sencillito y básico que puede servir. O podemos enviarle a un Prometheus las métricas de nuestros agentes y luego visualizarlo en Grafana, al gusto.

 

Metabase,

Necesitaremos Docker, si no lo tenemos instalado previamente:

sudo apt install docker.io -y

 

Y ejecutando ‘sudo cscli dashboard setup –listen 0.0.0.0’ lo desplegaremos:

sudo cscli dashboard setup --listen 0.0.0.0
    ? Metabase requires 1-2GB of RAM, your system is below this requirement continue ? Yes
    ? For metabase docker to be able to access SQLite file we need to add a new group called 'crowdsec' to the system, is it ok for you ? (Y/n) Y
    INFO[12-11-2022 05:09:02 PM] Pulling docker image metabase/metabase:v0.41.5
    .............................................................................................................................................
    INFO[12-11-2022 05:09:32 PM] creating container 'crowdsec-metabase'
    INFO[12-11-2022 05:09:38 PM] waiting for metabase to be up (can take up to a minute)
    ..............................
    INFO[12-11-2022 05:11:50 PM] Metabase is ready
        URL       : 'http://0.0.0.0:3000'
        username  : 'crowdsec@crowdsec.net'
        password  : 'xxxxxxxxxxxxxxxx'

 

Cuando arranque el contenedor de Metabase, ya podremos abrir un navegador a http://DIRECCION_IP:3000

 

Este sería el Home, donde directamente ya vemos la conexión a Crowdsec, y 3 paneles, con la lista de las decisiones activas, un histórico de las alertas o un dashboard general.

 

Dashboard de CS – Actives Decisions List,

 

Dashboard de CS – Alert History,

 

Dashboard de CS – Main Dashboard.

Luego el Dashboard podremos pararlo, arrancarlo o eliminarlo:

sudo cscli dashboard stop
sudo cscli dashboard start
sudo cscli dashboard remove --force

 

Prometheus + Grafana,

En cada agente de Crowdsec, en su fichero de configuración ‘/etc/crowdsec/config.yaml’, deberemos habilitar Prometheus, indicaremos un puerto de escucha por el que ofreceremos las métricas, quedando algo así:

prometheus:
  enabled: true
  level: full
  listen_addr: 0.0.0.0
  listen_port: 6060

 

Y recargamos Crowdsec para que aplique los cambios anteriores:

sudo systemctl restart crowdsec

 

Para probar que esto funciona, podemos tirar un curl a dicho puerto, desde la propia máquina o una remota, desde shell ejecutamos ‘curl http://DIRECCION_IP:6060/metrics’ para validar:

curl http://192.168.x.xxx:6060/metrics
    # HELP cs_active_decisions Number of active decisions.
    # TYPE cs_active_decisions gauge
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/CVE-2022-xxxxx"} 16
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/CVE-2022-xxxxx"} 2
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/CVE-2022-xxxxx"} 2
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/CVE-2022-xxxxx"} 669
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/apache_log4j2_cve-xxxxx"} 11
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/fortinet-cve-xxxxx"} 237
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/grafana-cve-xxxxx"} 27
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/http-backdoors-attempts"} 101
    cs_active_decisions{action="ban",origin="CAPI",reason="crowdsecurity/http-bad-user-agent"} 3632
...

 

Ahora ya en nuestro servidor de Prometheus ya podremos añadir las métricas de cada agente de Crowdsec, en su fichero de configuración lo indicamos ‘/usr/local/bin/prometheus/prometheus.yml’

...
scrape_configs:
...
  - job_name: 'crowdsec_OS-GRA-04'
    static_configs:
    - targets: ['192.168.x.xxx:6060']
      labels:
        machine: 'OS-GRA-04'

  - job_name: 'crowdsec_OS-JITSI-05'
    static_configs:
    - targets: ['192.168.x.xxx:6060']
      labels:
        machine: 'OS-JITSI-05'
...

 

Y reiniciaríamos Prometheus para que pueda leer ya los datos de nuestros Crowdsec!

sudo service prometheus restart

 

Si no tenemos el conector contra el Prometheus desde Grafana, lo hacemos, creamos el Data Source.

 

Podremos descargar de https://github.com/crowdsecurity/grafana-dashboards unos dashboards ya preconfigurados, así que simplemente descargamos el fichero JSON y lo importamos en Grafana. Este sería el dashboard con los detalles por máquina agente o ‘Crowdsec Details per Machine’.

 

Dashboard de Crowdsec Insight, un vistazo breve.

 

Y este último ‘Crowdsec Overview’ a modo resumen,

Bueno, pues espero que os haya resultado interesante o al menos curiosa la manera tan simple de conocer el estado de nuestras máquinas con Crowdsec.

Un abrazo!

 

Héctor Herrero