mcp server
centinela
A lightweight, defense-in-depth SecOps daemon for Linux/WSL that monitors processes and network traffic, provides plain-language threat explanations, and executes opt-in automated containment via an M
Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
{
"mcpServers": {
"centinela": {
"command": "uvx",
"args": [
"centinela"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Oct 26, 2026Centinela
Centinela de ciberseguridad personal, ligero, que corre en segundo plano en tu PC, vigila la red y los procesos, explica en lenguaje claro lo que ocurre, alerta y — solo si tú lo decides — contiene amenazas reales (bloquea IP, cierra puerto, mata proceso).
Licencia: AGPL-3.0-or-later · Autor: Pedro Sordo Martínez — amurlaniakea@gmail.com
Estado y fases
| Fase | Qué hace | Estado |
|---|---|---|
| 1. Núcleo + sensores | puertos, conexiones, procesos, reglas R1-R3 | ✅ aprobada |
| 2. Contención + lenguaje plano | block_ip / close_listener / kill_proc con confirmación | ✅ aprobada |
| 3. Línea base | aprende lo normal, reduce falsos positivos | ✅ aprobada |
| 4. Threat-intel | IOCs offline empaquetados; R2→high si hay match | ✅ aprobada |
| 5. Agente puente | notificación/confirmación vía JSONL local al agente de IA | ✅ aprobada |
| 6. Windows | backend Windows (NETSTAT, Get-Process) | ⏸ planificada, NO implementada |
| 7. Empaquetado + publicación | install.sh, systemd, docs, CI | 🔧 empaquetado aprobado; docs/CI en curso |
Fase 6 (Windows) no está implementada. Todo lo descrito aquí es Linux/WSL. No hay binario ni instrucciones para Windows todavía.
Instalación
git clone <repo> centinela && cd centinela
sudo ./install.sh
install.sh (idempotente) crea un usuario de sistema dedicado centinela, el
grupo centinela-agent, un venv en /opt/centinela, y habilita
centinela-watch (solo alerta, sin contención).
⚠️ Antes de activar la contención automática (léelo)
Por defecto Centinela solo vigila y avisa. La contención automática por agente es opt-in y requiere dos pasos conscientes:
# 1) Añade a tu agente de IA al grupo que puede confirmar contenciones:
sudo usermod -aG centinela-agent <tu_usuario_agente>
# 2) Activa el timer de contención por agente (cada 30s):
sudo systemctl enable --now centinela-agent-poll.timer
Asunción de confianza: cualquier proceso/local-user en el grupo
centinela-agent puede disparar contención contra el hallazgo que confirmó. El
grupo es un límite de confianza, no criptográfico — si un atacante ya es
miembro del grupo, tiene capacidad de contención. Sin agent-poll.timer
habilitado, Centinela nunca contiene nada solo. Ver
RESEARCH.md §3.6.
Uso
centinela watch # vigilancia en bucle (alertas + notificación al agente)
centinela scan # snapshot puntual
centinela scan --threat-intel # cruza conexiones contra IOCs offline
centinela explain # explica el último hallazgo en lenguaje claro
centinela contain --kind posible_c2 # contiene (PID a confirmar por ti)
centinela notify # escribe el último hallazgo en outbox.jsonl para el agente
centinela agent-poll # aplica contención confirmada por el agente (ref_id válido)
centinela learn # propone línea base
centinela baseline commit # confirma la línea base (muestra lo propuesto antes)
centinela baseline show # muestra la línea base actual
watch aplica siempre las IOCs offline (sin coste de red). scan solo con
--threat-intel.
Cómo piensa Centinela (reglas)
- R1 — proceso desconocido escuchando → sospecha.
- R2 — conexión
ESTABLISHEDsaliente a IP externa → posible C2.mediumpor defecto;highsi la IP coincide con un IOC de threat-intel. - R3 — proceso desconocido escuchando sin línea base activa (suprimida si la línea base está activa, para no duplicar R1).
La contención nunca es automática sin confirmación: o tú (contain) o tu
agente de IA (agent-poll, solo con ref_id válido contra un hallazgo real).
Seguridad por defecto
- Usuario root con bounding acotado (
CAP_DAC_OVERRIDE,CAP_DAC_READ_SEARCH,CAP_SYS_PTRACE; SINCAP_KILL/CAP_NET_ADMIN/CAP_SYS_ADMIN) +NoNewPrivileges. El daemonwatchsolo lee y alerta: no puede contener ni tocar red. Se corre como root porquess -tpno resuelve el proceso de conexiones ajenas con CAP_SYS_PTRACE a uid no-root (verificado 2026-08-17: store con proc=NULL). agent-poll(oneshot, desactivado) tieneCAP_NET_ADMIN+CAP_KILLy solo se habilita con el timer opt-in.- Estado bajo
/var/lib/centinela(CENTINELA_STATE_DIR). agent/con grupocentinela-agent(0o770): solo quien esté en el grupo puede confirmar contenciones.
Limitaciones conocidas (IMPORTANTE)
Centinela no es una solución de respuesta a incidentes garantizada. Entre las limitaciones confirmadas:
- Contención con
sudoreal no verificada end-to-end (P2): probada en dry-run, no contra una conexión real. kill_proccomparacommtruncado a 15 chars (M1).- Heurística
directionaproximada (Fase 1): no detecta bien proxies/VPN/tor; rangos RFC1918/RFC5737 se tratan como locales incluso en tu LAN. - Grupo
centinela-agent= límite de confianza (3.6): quien esté en el grupo puede disparar contención. - IOCs offline son documentales, no feed online real.
Lista completa, con impacto y qué está cubierto por tests sintéticos vs verificado en real: RESEARCH.md → Limitaciones conocidas.
Mapeo a OWASP ASVS / NIST 800-53 a nivel general: RESEARCH.md → Fundamento y mapeo.
Licencia
AGPL-3.0-or-later. Ver LICENSE.