Monitorizando Crowdsec con Centreon
Si en vuestra organización habéis implementado Crowdsec y Centreon imagino que a parte de ser felices y descansar, lo tendréis todo bastante controladito; pero, y… ¿Qué pasa si os comento que desde Centreon podemos monitorizar los baneos que nos hace Crowdsec? Efectivamente, cuando Crowdsec añada alguna dirección IP a la lista negra podremos alertarnos vía Centreon!
Creo que muchos ya conocéis el funcionamiento de Crowdsec y las ventajas de su uso en cualquier organización e incluso ámbitos personales, la idea es que como sabemos, Crowdsec detecta amenazas, cualquier ataque o ‘cosa rara’ que pueda sufrir algún servicio que tengamos publicado en Internet. Sabemos que Crowdsec por sí mismo puede notificarte cuando añada la dirección IP de cualquier atacante por correo, Telegram, Slack, Teams… Pero por tener todas las notificaciones de IT centralizadas, pues es buena idea quizá que Centreon se pueda encargar de esto también, no sólo para saber cuando alguien es bloqueado, si no para tener ese control, tener esos datos almacenados…
Así que haremos un Comando que se ejecutará en Centreon para checkear en nuestro servidor Crowdsec Central API si alguna máquina con Crowdsec ha sido atacada, ese Comando como siempre lo asociaremos a un Servicio en Centreon y quedará listo. Primeramente, en nuestro servidor Crowdsec central API deberemos de dar de alta un nuevo bouncer para poder usar su Token y realizar las consultas por API:
cscli bouncers add CENTREON-MONITORIZA API key for 'CENTREON-MONITORIZA': uz0Oxxxxxxxxsdfsdf Please keep this key since you will not be able to retrieve it!
En el Centreon Central o Poller crearemos pues un script para monitorizarlo, por ejemplo llamado algo como /usr/lib/centreon/plugins/check_crowdsec.sh, recordar tras grabarlo hacerlo ejecutable con (chmod +x), en el script tendremos que tener un par de consideraciones, meter la API key y la dirección IP del Central API de Crowdsec
#!/bin/bash # Realiza la solicitud con curl y filtra con jq result=$(curl -s -H "X-Api-Key: xxxxxxxxxxxxxxxxxxxx" http://DIRECCION_IP_CROWDSEC_LAPI:8080/v1/decisions/stream\?startup\=true | jq '.new[] | select(.uuid != null) | {value, scenario}') # Cuenta las direcciones IP únicas ip_count=$(echo "$result" | jq -r '.value' | sort -u | wc -l) ip_list=$(echo "$result" | jq -r '.value' | sort -u | paste -sd,) # Verifica si hay direcciones IP baneadas y genera el mensaje if [ "$ip_count" -gt 1 ]; then echo "CRITICAL: Hay $ip_count direcciones IPs baneadas: $ip_list" exit 2 elif [ "$ip_count" -gt 0 ]; then echo "CRITICAL: Hay $ip_count dirección IP baneada: $ip_list" exit 2 else echo "OK: No hay direcciones IPs baneadas." exit 0 fi
Posteriormente como sigue la costumbre, crearemos el Comando en Centreon, bastará con ponerle un nombre al comando con la siguiente línea de comandos ‘/usr/lib/centreon/plugins/check_crowdsec.sh’.
Creamos un servicio en Centreon llamado por ejemplo ‘Crowdsec – Checkeo IPs baneadas’ y se lo asocuamos al servidor de Crowdsec y en el ‘Check Command’ bastará con elegir el Comando recién creado.
Una vez guardada y exportada la configuración en Centreon podremos ya ver nuestro checkeo y verificar que funciona correctamente.
En el caso de detectar una IP en la blocklist o blacklist nos alertará, podéis probar a añadir una decisión manualmente desde la CLI de Crowdsec y veréis como el servicio en Centreon se pone en CRITICAL y nos alerta de qué o cuales, son las direcciones IP que han sido baneadas por el sistema.
Bueno espero que este documento os pueda inspirar en qué tipos de cosicas podemos montar para tener más control en nuestras organizaciones con objeto de conseguir una mayor seguridad, o para los que todavía quizá no conozcan qué es Crowdsec y les pueda animar a descubrirlo… bueno, que eso, que os portéis muy bien, disfrutar de la fruta!