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:
- 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".
-
Contención con confirmación, siempre. Nunca bloquea tráfico ni mata procesos sin que tú (o tu agente de IA, con
ref_idválido) lo apruebes. - 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
ESTABLISHEDsaliente a IP externa → posible C2 (se eleva ahighsi 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
sudoreal no está verificada end-to-end (probada en dry-run, no contra una conexión real; en WSL puede no permitirCAP_NET_ADMIN). -
M1 —
kill_proccomparacomm, 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 comopython3(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
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
Stack
- Lenguaje: Python 3
-
Sensores:
ss,/proc,systemd -
Contención:
iptables(OUTPUT -d DROP),fuser -k,killcon verificación de identidad -
Privilegios: usuario de sistema dedicado;
watchsin capabilities,agent-pollopt-in conCAP_NET_ADMIN+CAP_KILL - Licencia: AGPL-3.0-or-later
Enlaces
- Repo: https://github.com/amurlaniakea/centinela
-
Documentación técnica y limitaciones completas:
RESEARCH.mden el repo
Licencia: AGPL-3.0-or-later · Autor: Pedro Sordo Martínez — amurlaniakea@gmail.com
Top comments (0)