DEV Community

Cover image for Centinela: un centinela de ciberseguridad personal para Linux/WSL.
Fenix
Fenix

Posted on

Centinela: un centinela de ciberseguridad personal para Linux/WSL.

Centinela: un centinela de ciberseguridad personal para Linux/WSL que solo contiene con tu confirmación

Un daemon ligero que vigila puertos, conexiones y procesos, te explica en lenguaje claro lo que ocurre, y — solo si tú lo decides — bloquea IP, cierra puerto o mata proceso.

El problema

Tu máquina Linux o WSL corre decenas de procesos. ¿Sabes qué está escuchando en qué puerto, y a qué direcciones externas se conecta en este momento? La mayoría de las herramientas de seguridad para escritorio son o cajas negras en la nube, o utilidades que matan procesos automáticamente y dejan la máquina inutilizable si se equivocan.

Centinela nace de una premisa simple: vigilar es barato, contener es caro. Merece la pena verlo todo, pero actuar solo cuando el humano (o su agente, bajo límites de confianza estrictos) lo confirma.

Qué es Centinela

Es un daemon de ciberseguridad personal, AGPL-3.0-or-later, para Linux/WSL. Tres ideas lo definen:

  1. Visibilidad en lenguaje plano. No reglas de Splunk ni JSON críptico: te dice "hay un proceso desconocido escuchando en el puerto 4444" o "una conexión saliente establecida a una IP externa parece C2".
  2. Contención con confirmación, siempre. Nunca bloquea tráfico ni mata procesos sin que tú (o tu agente de IA, con ref_id válido) lo apruebes.
  3. Menor privilegio por defecto. Recién instalado solo vigila y avisa. La contención automática por agente es opt-in.

Cómo funciona

Los sensores leen ss (puertos y conexiones) y /proc (procesos). El motor de reglas evalúa cada escaneo:

  • R1 — proceso desconocido escuchando → sospecha.
  • R2 — conexión ESTABLISHED saliente a IP externa → posible C2 (se eleva a high si la IP coincide con un IOC offline).
  • R3 — proceso desconocido escuchando sin línea base activa.

La línea base aprende lo normal de tu máquina y reduce falsos positivos. El threat-intel offline cruza conexiones contra IOCs empaquetados en data/ioc.yaml, sin coste de red. El agente puente (Fase 5) es un canal JSONL local — sin red, sin credenciales — por el que Centinela avisa a tu agente de IA y este confirma contenciones.

Comandos principales:

Comando Qué hace
centinela watch Vigilancia en bucle (alertas + notificación al agente)
centinela scan [--threat-intel] Snapshot puntual, opcionalmente contra IOCs
centinela explain Explica el último hallazgo en lenguaje claro
centinela contain --kind posible_c2 Propone y aplica contención (pid a confirmar)
centinela learn / baseline commit Propone / confirma la línea base
centinela notify / agent-poll Canal de confirmación con el agente de IA

Estado y limitaciones (honestas)

Fases 1 a 5 aprobadas por auditoría externa (Claude). Fase 6 (Windows) no implementada — es Linux/WSL. Fase 7 (empaquetado) aprobada.

Centinela no es una solución de respuesta a incidentes garantizada. Limitaciones confirmadas:

  • P2 — la contención con sudo real no está verificada end-to-end (probada en dry-run, no contra una conexión real; en WSL puede no permitir CAP_NET_ADMIN).
  • M1kill_proc compara comm, que el kernel trunca a 15 caracteres; nombres más largos abortan la contención (falla-seguro: no mata nada).
  • Línea base por nombre de proceso — aprende por comm. Un proceso que se reporte como python3 (como el MCP server serena) se confunde con cualquier intérprete de Python legítimo, debilitando la distinción.

Por eso Centinela se publica para que cualquiera lo instale: recién instalado solo vigila. Para que contenga automáticamente por agente hay que dar dos pasos conscientes (añadir el usuario al grupo centinela-agent y habilitar centinela-agent-poll.timer). El grupo es un límite de confianza, no criptográfico.

Pruébalo

git clone https://github.com/amurlaniakea/centinela
cd centinela
sudo ./install.sh
Enter fullscreen mode Exit fullscreen mode

Esto crea el usuario de sistema centinela, el grupo centinela-agent, un venv en /opt/centinela, y habilita centinela-watch (solo alerta). Para verlo en acción sin tocar nada:

centinela watch                # vigila y avisa
centinela scan --threat-intel  # snapshot contra IOCs offline
centinela explain              # lenguaje claro sobre el último hallazgo
Enter fullscreen mode Exit fullscreen mode

Stack

  • Lenguaje: Python 3
  • Sensores: ss, /proc, systemd
  • Contención: iptables (OUTPUT -d DROP), fuser -k, kill con verificación de identidad
  • Privilegios: usuario de sistema dedicado; watch sin capabilities, agent-poll opt-in con CAP_NET_ADMIN+CAP_KILL
  • Licencia: AGPL-3.0-or-later

Enlaces


Licencia: AGPL-3.0-or-later · Autor: Pedro Sordo Martínez — amurlaniakea@gmail.com

Top comments (0)