Skip to content
Conduit

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

amurlaniakea/centinelacommunitylistedunreviewed

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`)
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "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, 2026

Centinela

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

FaseQué haceEstado
1. Núcleo + sensorespuertos, conexiones, procesos, reglas R1-R3✅ aprobada
2. Contención + lenguaje planoblock_ip / close_listener / kill_proc con confirmación✅ aprobada
3. Línea baseaprende lo normal, reduce falsos positivos✅ aprobada
4. Threat-intelIOCs offline empaquetados; R2→high si hay match✅ aprobada
5. Agente puentenotificación/confirmación vía JSONL local al agente de IA✅ aprobada
6. Windowsbackend Windows (NETSTAT, Get-Process)⏸ planificada, NO implementada
7. Empaquetado + publicacióninstall.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 ESTABLISHED saliente a IP externa → posible C2. medium por defecto; high si 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; SIN CAP_KILL/CAP_NET_ADMIN/ CAP_SYS_ADMIN) + NoNewPrivileges. El daemon watch solo lee y alerta: no puede contener ni tocar red. Se corre como root porque ss -tp no 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) tiene CAP_NET_ADMIN+CAP_KILL y solo se habilita con el timer opt-in.
  • Estado bajo /var/lib/centinela (CENTINELA_STATE_DIR).
  • agent/ con grupo centinela-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 sudo real no verificada end-to-end (P2): probada en dry-run, no contra una conexión real.
  • kill_proc compara comm truncado a 15 chars (M1).
  • Heurística direction aproximada (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.

↑↓ navigate openesc close