Integración domótica CrowdSec, gratuita y de código abierto

CrowdSec en Gladys: direcciones bloqueadas, alertas y ataques en sus escenas y en el panel.
CrowdSec lee los registros de sus servidores (SSH, servidor web, Home Assistant, Nextcloud…), reconoce los ataques con sus escenarios (fuerza bruta, escaneos, exploits) y bloquea las direcciones atacantes mediante sus bouncers (cortafuegos, proxy inverso). También comparte lo que ve: cada instalación recibe la lista de bloqueo de la comunidad. Esta integración lleva CrowdSec a Gladys: un dispositivo «CrowdSec» con las decisiones activas y las alertas del día, escenas que se activan con cada nuevo bloqueo o nueva alerta (para enviarse una notificación con la dirección y el escenario), una acción que desbloquea una dirección y un widget del panel con las últimas direcciones bloqueadas.
Probada con un CrowdSec v1.8.1 real (Docker, fuerza bruta SSH reproducida desde
un archivo de registro, decisiones añadidas y eliminadas con cscli).
Desarrollada sin una instalación en producción ni su lista de la comunidad: sus
comentarios son bienvenidos en
las issues.
Lo que necesita
- Gladys Assistant 5.1.0 o posterior.
- CrowdSec 1.5 o posterior, con su API local (LAPI, puerto 8080) accesible
desde la máquina de Gladys. Una instalación nativa solo escucha en
127.0.0.1:8080: configurelisten_uri: 0.0.0.0:8080bajoapi.serveren/etc/crowdsec/config.yaml(y mantenga el puerto 8080 cerrado hacia internet). La imagen Docker ya escucha en todas las interfaces: publique su puerto 8080. - Una clave de bouncer (acceso de solo lectura a las decisiones).
- Opcional: una cuenta de máquina (usuario y contraseña) para leer las alertas y desbloquear una dirección.
La integración lee el flujo de decisiones de su clave de bouncer: la lista completa al arrancar y una vez por hora, solo los cambios el resto del tiempo (cada minuto por defecto). Con una cuenta de máquina, también lee las alertas de la última hora. Nada sale a internet.
Primeros pasos
1. Crear una clave de bouncer
En la máquina de CrowdSec:
cscli bouncers add gladys
Con Docker: docker exec crowdsec cscli bouncers add gladys. La clave solo se
muestra una vez: cópiela.
2. Crear una cuenta de máquina (opcional)
Para las alertas, el país de los atacantes y la acción de desbloqueo:
cscli machines add gladys --password 'una-contrasena-larga' -f /dev/null
-f /dev/null es importante: sin él, cscli escribe las nuevas credenciales
en lugar de las del agente local de CrowdSec.
3. Configurar la integración
En Gladys, Integraciones → CrowdSec → Configuración:
- Dirección de la API local:
http://192.168.1.2:8080(la máquina de CrowdSec); - Clave de bouncer: la clave del paso 1;
- Usuario de máquina y Contraseña de máquina: la cuenta del paso 2, o vacío;
- Eliminar decisiones desde escenas: desactivado por defecto, vea más abajo;
- Intervalo de actualización: de 30 segundos a 5 minutos;
- Idioma de los nombres: nombres de las funciones y resultados de escena.
Probar la conexión resume lo que lee la integración.
4. Añadir el dispositivo
En la pestaña Descubrir, añada el dispositivo «CrowdSec». El widget y los desencadenantes de escena funcionan sin él.
El dispositivo
El dispositivo «CrowdSec» tiene estas funciones:
| Función | Significado |
|---|---|
| Accesible | 1 cuando la API local responde, 0 tras dos lecturas fallidas seguidas |
| Decisiones locales | Decisiones activas tomadas aquí: escenarios de CrowdSec, cscli, la consola |
| Decisiones de la comunidad | Decisiones activas de la lista de la comunidad y de las listas suscritas |
| Alertas (24 h) | Alertas iniciadas en las últimas 24 horas (solo con cuenta de máquina) |
| Último escenario | Escenario de la última alerta, o de la última decisión local |
Cada número conserva su historial, para un gráfico de los ataques a lo largo de las semanas.
Panel
El widget Decisiones de CrowdSec muestra las decisiones locales activas, la lista de la comunidad y las alertas del día, y luego las últimas direcciones bloqueadas: dirección o rango, escenario y tiempo restante, un icono rojo para un bloqueo, naranja para un captcha. Actualizar vuelve a leer CrowdSec.
Escenas
Desencadenantes
- Nueva decisión local: CrowdSec bloquea una dirección (o le pide un
captcha). El filtro conserva solo los bloqueos o solo los captchas.
Variables: la dirección o el rango, el ámbito (
Ip,Range), la remediación (ban,captcha), el escenario, el origen (crowdsecpara un escenario,csclipara una decisión añadida a mano), la duración en minutos y el país del atacante cuando CrowdSec lo conoce (cuenta de máquina y enriquecimiento GeoIP). - Nueva alerta: un escenario se activa sobre un origen (solo con cuenta de máquina), con o sin decisión (un escenario en modo simulación genera alertas sin bloquear). Variables: el escenario, la dirección de origen, el ámbito, el país, el operador de red, el número de eventos y de decisiones tomadas.
Un escenario que bloquea activa ambos desencadenantes: elija uno para sus notificaciones. Las decisiones de la lista de la comunidad nunca activan nada: llegan por decenas de miles. Cuando llegan más de 20 decisiones o alertas en una lectura (un gran escaneo), solo las 20 más recientes activan una escena.
Acciones
- Estado de CrowdSec: lee los contadores para las siguientes acciones — accesible o no, decisiones locales y de la comunidad, alertas de las últimas 24 horas, la última dirección bloqueada, el último escenario — y una frase lista como «CrowdSec: 3 decisión(es) local(es), 15012 decisión(es) de la comunidad, 5 alerta(s) en 24 h (203.0.113.7, ssh-bf).»
- Eliminar una decisión (desbloquear): elimina todas las decisiones sobre
una dirección (
203.0.113.7) o un rango (203.0.113.0/24), también las de la lista de la comunidad (vuelven en la siguiente descarga de la lista). Un rango elimina las decisiones que contiene; un bloqueo sobre un rango entero que contiene la dirección se mantiene. El campo de dirección acepta las variables del desencadenante. Desactivada por defecto: active «Eliminar decisiones desde escenas» en la configuración, con una cuenta de máquina. Salidas: el número de decisiones eliminadas y una frase.
Ideas de escenas
- Nueva decisión local → enviar un mensaje: «CrowdSec ha bloqueado {{triggerEvent.data.ip}} ({{triggerEvent.data.scenario}}, {{triggerEvent.data.country}})».
- Cada mañana, Estado de CrowdSec → enviar su frase: la noche de sus servidores en una línea.
- Cuando la función Accesible pasa a 0, enviar un mensaje: la protección de la casa ha caído.
- Un botón del panel que ejecuta Eliminar una decisión (desbloquear) sobre la dirección de un familiar bloqueado por error.
Solución de problemas
- «CrowdSec no responde»: compruebe la dirección y el puerto desde la
máquina de Gladys (
curl http://192.168.1.2:8080/healthresponde{"status":"up"}) y ellisten_uride una instalación nativa. - «clave de bouncer rechazada»: la clave se copió mal o se eliminó
(
cscli bouncers list); cree una nueva. - «usuario o contraseña de máquina rechazados: sin alertas»: compruebe con
cscli machines listque la máquina existe y está validada. Las decisiones se siguen leyendo. - «no hay API local de CrowdSec en esta dirección»: la dirección lleva a otro servicio; la API local responde en el puerto 8080 por defecto.
- «certificado rechazado»: use la dirección
http://en la red local, o un certificado reconocido por Gladys. - Sin país en las variables: CrowdSec añade el país con el parser
crowdsecurity/geoip-enrich, y solo a las alertas: hace falta la cuenta de máquina. - Más detalles en los registros de la integración (Integraciones → CrowdSec →
Registros). Las direcciones completas solo aparecen con
LOG_LEVEL=debug.
Limitaciones
- Una sola API local de CrowdSec por integración.
- Las decisiones sobre un país o un AS (ámbitos distintos de
IpyRange) no se cuentan: el flujo de un bouncer solo lleva direcciones y rangos. - Las alertas requieren una cuenta de máquina: con la clave de bouncer sola, ni alertas ni país.
- Añadir una decisión (bloquear una dirección) no se ofrece: CrowdSec y
csclilo hacen mejor. - La consola de CrowdSec (app.crowdsec.net) no se lee.
Parámetros de configuración
Estos son los parámetros que CrowdSec te pide en su pantalla de configuración en Gladys.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Su API local de CrowdSec | section | No | En la máquina de CrowdSec, cree una clave de bouncer con: cscli bouncers add gladys. La API local escucha en el puerto 8080 y debe ser accesible desde Gladys (listen_uri 0.0.0.0:8080). |
| Dirección de la API local | string | No | La dirección de la API local de CrowdSec, puerto 8080 por defecto. |
| Clave de bouncer | secret | No | Se muestra una vez con cscli bouncers add gladys. Solo lectura: solo lee las decisiones. |
| Alertas (opcional) | section | No | Una cuenta de máquina lee las alertas (escenario, origen, país) y puede eliminar una decisión. Créela con: cscli machines add gladys --password <contraseña> -f /dev/null. Déjelo vacío para seguir solo las decisiones. |
| Usuario de máquina | string | No | |
| Contraseña de máquina | secret | No | |
| Eliminar decisiones desde escenas | select | No | Activa la acción de escena que desbloquea una dirección. Requiere la cuenta de máquina. |
| Opciones | section | No | |
| Intervalo de actualización | select | No | Con qué frecuencia se lee CrowdSec: solo los cambios, salvo una vez por hora. |
| Idioma de los nombres | select | No | Idioma de los nombres de las funciones (fijados al añadir un dispositivo) y de los resultados de escena. |
Cómo instalar CrowdSec en Gladys
- En Gladys, abre Integraciones: CrowdSec aparece en el catálogo junto a las integraciones nativas, con una insignia de comunidad.
- Haz clic en Instalar. Gladys descarga la imagen Docker (
ghcr.io/guim31/gladys-crowdsec:1.0.1), la ejecuta en un entorno aislado del núcleo y genera la interfaz de la integración (dispositivos, descubrimiento y configuración). - Abre la pantalla de Configuración de la integración, rellena los parámetros y guarda.
- También puedes instalarla directamente desde la URL de su repositorio: https://github.com/guim31/gladys-crowdsec.
CrowdSec requiere Gladys >=5.1.0. El catálogo de Gladys se actualiza cada hora, así que una nueva versión está disponible como máximo una hora después de publicarse.
¿Todavía no usas Gladys? Es gratuito y de código abierto: sigue la guía de instalación para empezar.
Sobre las integraciones externas
CrowdSec es una integración externa: una integración comunitaria empaquetada como contenedor Docker y publicada en GitHub. Gladys la instala con un clic y la ejecuta en un entorno aislado del núcleo. La publica y mantiene guim31, no el equipo principal de Gladys.
- Explorar todas las integraciones, nativas y de la comunidad
- Crear y publicar tu propia integración externa
- Código fuente en GitHub — fuente de esta documentación