Proteger tu servidor de agentes IA: sandboxing, firewall y monitorización
Los agentes IA ejecutan acciones arbitrarias, consumen recursos impredecibles y procesan entradas no confiables por diseño. Esta guía asocia cada amenaza con un control Linux concreto y comandos probados.
Los agentes IA no son servicios normales. Un servidor web gestiona peticiones HTTP predecibles. Un agente IA ejecuta llamadas a herramientas arbitrarias, lanza subprocesos, hace peticiones HTTP salientes y consume recursos en picos impredecibles. Si una inyección de prompt tiene éxito, el agente se convierte en un atacante con los privilegios que le hayas dado.
Esta guía trata cada agente IA como código no confiable. Cada sección empieza con una amenaza concreta y la asocia con un control Linux que puedes verificar. Los comandos funcionan en cualquier VPS con Debian 12 o Ubuntu 22.04+, con cualquier framework de agentes: OpenClaw, Claude Code, n8n, LangChain, CrewAI o configuraciones personalizadas.
Requisitos previos: Un VPS con acceso root, conocimientos básicos de Linux y SSH (seguridad básica de VPS cubre lo esencial), y al menos un agente IA que quieras proteger. Esta guía asume que ya has completado el hardening inicial del servidor (hardening SSH).
¿Qué hace de los agentes IA una amenaza de seguridad diferente?
Los servicios tradicionales tienen un conjunto acotado de comportamientos. Un proceso Nginx sirve archivos y hace proxy de peticiones. El comportamiento de un agente IA depende de su entrada, que tú no controlas. Tres propiedades hacen que los agentes sean distintos de cualquier otra cosa que ejecutes en un servidor:
- Ejecutan acciones arbitrarias. Los agentes con tool-calling ejecutan comandos de shell, escriben archivos y hacen peticiones HTTP basándose en la salida del LLM.
- Consumen recursos impredecibles. Un bucle de razonamiento puede disparar la CPU al 100% durante minutos. Un agente descontrolado puede quemar tokens de API en segundos.
- Procesan entradas no confiables por diseño. El objetivo de un agente es aceptar lenguaje natural y actuar en consecuencia.
| Amenaza | Vector de ataque | Impacto | Control |
|---|---|---|---|
| Ejecución de comandos shell | Inyección de prompt vía entrada de usuario o salida de herramienta | Compromiso total del sistema | Aislamiento de usuario, sandbox en contenedor |
| Exfiltración de datos | El agente envía secretos vía HTTP/DNS a un dominio del atacante | Robo de credenciales, fuga de datos | Firewall de salida, filtrado DNS |
| Agotamiento de recursos | Bucle de razonamiento infinito o llamadas recursivas a herramientas | Caída del servidor, otros servicios afectados | Límites de CPU/memoria con cgroup |
| Filtración de credenciales | El agente registra o memoriza claves API del entorno | Robo de claves API, movimiento lateral | Inyección de secretos, aislamiento de entorno |
| Movimiento lateral | Un agente comprometido pivota a otros servicios | Compromiso total de la infraestructura | Segmentación de red, mínimo privilegio |
¿Cómo aíslo un agente IA con un usuario Linux dedicado?
Crea un usuario de sistema dedicado para cada agente sin shell de login, sin acceso sudo y con un directorio home restringido. Este es el control más simple con mayor impacto. Si un agente es comprometido, el atacante hereda solo los permisos de ese usuario, no root.
sudo useradd --system --create-home --shell /usr/sbin/nologin agent-worker
Restringe el directorio home para que otros usuarios no puedan leer los archivos del agente:
sudo chmod 750 /home/agent-worker
Verifica que el usuario existe y tiene el shell correcto:
getent passwd agent-worker
La salida muestra una salida como esta:
agent-worker:x:998:998::/home/agent-worker:/usr/sbin/nologin
Fíjate bien: el shell es /usr/sbin/nologin. Esto significa que nadie puede conectarse por SSH como este usuario ni abrir una sesión interactiva. El proceso del agente se ejecuta como este usuario vía systemd, no vía login.
Si tu agente necesita escribir archivos temporales, crea un directorio dedicado:
sudo mkdir -p /home/agent-worker/tmp
sudo chown agent-worker:agent-worker /home/agent-worker/tmp
sudo chmod 700 /home/agent-worker/tmp
Verifica los permisos:
ls -la /home/agent-worker/
Qué consigue esto: Incluso si un atacante logra ejecución de código mediante inyección de prompt, queda confinado a /home/agent-worker sin capacidad para leer archivos de otros usuarios, escalar a root ni modificar binarios del sistema.
¿Cómo ejecuto un agente IA en un sandbox Docker?
Ejecutar tu agente dentro de un contenedor Docker añade una segunda barrera de aislamiento. El contenedor tiene su propio sistema de archivos, namespace de procesos y pila de red. Combinado con flags de seguridad, limita lo que un agente comprometido puede hacer, incluso con ejecución de código.
¿Qué flags de seguridad Docker debo usar para agentes IA?
Usa todas las restricciones que tu agente pueda tolerar. Empieza con todo bloqueado y relaja solo lo que falle. Este es un comando docker run de producción para un agente IA:
docker run -d \
--name ai-agent \
--user 1000:1000 \
--read-only \
--tmpfs /tmp:size=100M,noexec,nosuid \
--cap-drop ALL \
--security-opt no-new-privileges:true \
--security-opt seccomp=/etc/docker/seccomp-agent.json \
--memory 2g \
--memory-swap 2g \
--cpus 1.5 \
--pids-limit 100 \
--network agent-net \
--restart unless-stopped \
--env-file /etc/agent/env \
your-agent-image:latest
Qué hace cada flag:
| Flag | Propósito | Por qué importa para agentes |
|---|---|---|
--user 1000:1000 |
Ejecutar como no-root dentro del contenedor | Evita escapes del contenedor vía exploits de root |
--read-only |
Sistema de archivos raíz en solo lectura | Bloquea instalación de malware, manipulación de configuración |
--tmpfs /tmp:size=100M,noexec,nosuid |
Temp escribible sin ejecución | El agente puede escribir archivos temporales pero no ejecutar binarios desde /tmp |
--cap-drop ALL |
Eliminar todas las capabilities de Linux | Sin CAP_NET_RAW (sniffing de paquetes), sin CAP_SYS_ADMIN (mount), nada |
--security-opt no-new-privileges:true |
Impedir escalación de privilegios vía setuid | Bloquea que un agente comprometido obtenga root mediante binarios setuid |
--pids-limit 100 |
Limitar número de procesos | Detiene fork bombs de un agente descontrolado |
--memory 2g / --memory-swap 2g |
Techo de memoria fijo, sin swap | Evita que el OOM killer mate otros servicios |
--cpus 1.5 |
Límite de CPU | El agente no puede privar de recursos a otros servicios |
Verifica que el contenedor está ejecutándose con la configuración de seguridad correcta:
docker inspect ai-agent --format '{{.HostConfig.SecurityOpt}}'
Salida esperada:
[no-new-privileges:true seccomp=/etc/docker/seccomp-agent.json]
Comprueba que se ejecuta como no-root:
docker exec ai-agent whoami
Debería devolver el usuario no-root, no root.
Perfil seccomp personalizado para agentes IA
El perfil seccomp por defecto de Docker bloquea unas 44 syscalls peligrosas. Para agentes IA, puedes restringirlo más. Crea /etc/docker/seccomp-agent.json:
{
"defaultAction": "SCMP_ACT_ERRNO",
"defaultErrnoRet": 1,
"archMap": [
{
"architecture": "SCMP_ARCH_X86_64",
"subArchitectures": ["SCMP_ARCH_X86", "SCMP_ARCH_X32"]
}
],
"syscalls": [
{
"names": [
"read", "write", "close", "fstat", "lseek", "mmap", "mprotect",
"munmap", "brk", "rt_sigaction", "rt_sigprocmask", "ioctl",
"access", "pipe", "select", "sched_yield", "mremap", "msync",
"mincore", "madvise", "dup", "dup2", "nanosleep", "getpid",
"socket", "connect", "sendto", "recvfrom", "sendmsg", "recvmsg",
"bind", "listen", "accept", "getsockname", "getpeername",
"setsockopt", "getsockopt", "clone", "execve", "exit",
"wait4", "kill", "uname", "fcntl", "flock", "fsync",
"fdatasync", "truncate", "ftruncate", "getdents", "getcwd",
"chdir", "openat", "newfstatat", "readlinkat", "fchmodat",
"set_tid_address", "exit_group", "epoll_wait", "epoll_ctl",
"tgkill", "futex", "set_robust_list", "get_robust_list",
"epoll_create1", "pipe2", "clock_gettime", "clock_nanosleep",
"prlimit64", "getrandom", "memfd_create", "statx",
"rseq", "close_range", "poll", "getuid", "getgid",
"geteuid", "getegid", "arch_prctl", "sigaltstack",
"rt_sigreturn", "accept4", "pread64", "pwrite64",
"writev", "readv", "sched_getaffinity"
],
"action": "SCMP_ACT_ALLOW"
}
]
}
Este perfil permite solo las syscalls necesarias para un proceso de agente típico en Python/Node.js. Todo lo demás, incluyendo mount, ptrace, reboot, kexec_load e init_module, devuelve un error de permisos.
Establece los permisos correctos en el perfil:
sudo chmod 644 /etc/docker/seccomp-agent.json
sudo chown root:root /etc/docker/seccomp-agent.json
Prueba que el contenedor arranca con el perfil personalizado:
docker run --rm --security-opt seccomp=/etc/docker/seccomp-agent.json alpine echo "seccomp works"
Si ves seccomp works, el perfil es válido.
Para un hardening de Docker más profundo incluyendo modo rootless, consulta Docker security hardening. Para el problema de interacción Docker/UFW, consulta Docker UFW fix.
¿Cómo bloqueo a un agente IA el acceso a internet?
Amenaza: Un agente comprometido exfiltra secretos haciendo peticiones HTTP salientes a un servidor controlado por el atacante, o codifica datos en consultas DNS. Por defecto, UFW permite todo el tráfico saliente.
Establece una política de denegación por defecto para el tráfico saliente y luego permite solo los endpoints que tu agente necesita:
sudo ufw default deny outgoing
sudo ufw default deny incoming
Permite el tráfico saliente esencial:
# DNS resolution (required for all outbound)
sudo ufw allow out 53/udp
# Allow outbound HTTPS to reach AI provider APIs
sudo ufw allow out 443/tcp
# Allow outbound HTTP for package updates only
sudo ufw allow out 80/tcp
Permite SSH entrante (para no quedarte fuera):
sudo ufw allow in 22/tcp
Activa el firewall:
sudo ufw enable
Verifica las reglas:
sudo ufw status verbose
La salida muestra Default: deny (incoming), deny (outgoing) en la parte superior, seguido de tus reglas de permitir.
¿Cómo limito el tráfico saliente solo a los endpoints API que necesita mi agente?
Las reglas anteriores todavía permiten HTTPS saliente a cualquier destino. Para un control más estricto, restringe el tráfico saliente a rangos IP específicos. Esto requiere iptables porque UFW no soporta filtrado por destino basado en dominio.
Primero, resuelve el endpoint API de tu proveedor de IA:
dig +short api.anthropic.com
dig +short api.openai.com
Luego crea reglas iptables para esas IPs. Crea /etc/iptables/agent-egress.rules:
#!/bin/bash
# Agent egress whitelist - update IPs when providers change
# Anthropic API (check current IPs with: dig +short api.anthropic.com)
ANTHROPIC_IPS="104.18.0.0/16"
# Drop all outbound from agent user except whitelisted destinations
iptables -A OUTPUT -m owner --uid-owner agent-worker -d $ANTHROPIC_IPS -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner agent-worker -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner agent-worker -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner agent-worker -j DROP
sudo chmod 700 /etc/iptables/agent-egress.rules
sudo bash /etc/iptables/agent-egress.rules
Verifica que el usuario del agente no puede alcanzar hosts arbitrarios:
sudo -u agent-worker curl -s --max-time 5 https://example.com && echo "FAIL: egress not blocked" || echo "OK: egress blocked"
La salida esperada es OK: egress blocked.
Nota sobre exfiltración DNS: Las reglas anteriores permiten DNS en el puerto 53. Un atacante sofisticado puede codificar datos en consultas DNS, enviando secretos como subdominios (por ejemplo, sk-ant-api-key.attacker.com). Para cerrar esta brecha, apunta el DNS del agente a un resolver local como unbound configurado con una zona de política de respuesta (RPZ) que bloquee consultas a dominios no permitidos.
Instala y configura un resolver local:
sudo apt install -y unbound
Edita /etc/unbound/unbound.conf.d/agent-dns.conf:
server:
interface: 127.0.0.1
access-control: 127.0.0.0/8 allow
# Only allow resolution of specific domains
local-zone: "." deny
local-zone: "anthropic.com." transparent
local-zone: "openai.com." transparent
local-zone: "ubuntu.com." transparent
local-zone: "debian.org." transparent
sudo systemctl enable --now unbound
sudo systemctl status unbound
Luego configura el contenedor o servicio systemd de tu agente para usar 127.0.0.1 como resolver DNS en lugar del predeterminado del sistema. En Docker, añade --dns 127.0.0.1 a tu comando docker run.
¿Cómo aplico rate limiting a los endpoints API de un agente IA?
Amenaza: Un endpoint API de agente expuesto es bombardeado por bots o abusado mediante intentos automatizados de inyección de prompt. Sin rate limiting, cada petición desencadena llamadas costosas a APIs de LLM.
Si expones tu agente a través de Nginx, añade rate limiting en la capa de reverse proxy. Añade a tu configuración de Nginx:
http {
# 10 requests per second per IP for agent endpoints
limit_req_zone $binary_remote_addr zone=agent_api:10m rate=10r/s;
# Stricter limit for prompt submission endpoints
limit_req_zone $binary_remote_addr zone=agent_prompt:10m rate=2r/s;
server {
listen 443 ssl;
server_name agent.example.com;
location /api/agent/ {
limit_req zone=agent_api burst=20 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:8080;
}
location /api/agent/prompt {
limit_req zone=agent_prompt burst=5 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:8080;
}
}
}
Prueba la configuración:
sudo nginx -t && sudo systemctl reload nginx
Verifica que el rate limiting está activo enviando peticiones rápidas:
for i in $(seq 1 30); do curl -s -o /dev/null -w "%{http_code}\n" https://agent.example.com/api/agent/; done
La salida muestra respuestas 200 seguidas de respuestas 429 cuando se alcance el límite.
¿Cómo limito el uso de CPU y memoria de un agente IA?
Amenaza: Un bucle de razonamiento o una llamada recursiva a herramientas dispara la CPU al 100% durante minutos. Sin límites, el agente priva de recursos a SSH, monitorización y otros servicios. En un VPS compartido, esto puede provocar throttling del proveedor o suspensión automática.
Límites de recursos en Docker
Si tu agente se ejecuta en Docker, los flags --memory y --cpus de la sección de contenedores ya gestionan esto. Verifica que los límites se aplican:
docker stats ai-agent --no-stream
Comprueba que MEM USAGE se mantiene por debajo de MEM LIMIT y que CPU % no supera los cores asignados.
Límites cgroup con systemd para agentes sin contenedor
Si tu agente se ejecuta directamente en el host (no en Docker), usa systemd para aplicar límites cgroup v2. Crea un servicio systemd con controles de recursos:
sudo systemctl edit --force --full ai-agent.service
[Unit]
Description=AI Agent Service
After=network.target
[Service]
Type=simple
User=agent-worker
Group=agent-worker
WorkingDirectory=/home/agent-worker
ExecStart=/home/agent-worker/run-agent.sh
Restart=on-failure
RestartSec=10
# Resource limits
MemoryMax=2G
MemoryHigh=1536M
CPUQuota=150%
TasksMax=100
# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=tmpfs
PrivateTmp=true
ReadWritePaths=/home/agent-worker/data
# Secrets
EnvironmentFile=/etc/agent/env
[Install]
WantedBy=multi-user.target
MemoryMax=2G es un techo fijo. El OOM killer termina el agente si lo supera. MemoryHigh=1536M es un límite blando. El kernel reclama memoria de forma agresiva por encima de este umbral, ralentizando al agente antes de llegar al límite fijo. CPUQuota=150% permite 1,5 cores de CPU. TasksMax=100 previene fork bombs.
Activa e inicia el servicio:
sudo systemctl enable --now ai-agent.service
enable hace que sobreviva a reinicios. --now lo inicia de inmediato.
Verifica que el servicio está corriendo y los límites están aplicados:
sudo systemctl status ai-agent.service
Comprueba los límites cgroup:
systemctl show ai-agent.service | grep -E "(MemoryMax|CPUQuota|TasksMax)"
Salida esperada:
MemoryMax=2147483648
CPUQuota=150%
TasksMax=100
¿Cómo gestiono los secretos de agentes IA sin que se filtren?
Amenaza: Un agente registra sus variables de entorno (muchos frameworks lo hacen en modo debug), incluye claves API en el contexto del LLM o escribe credenciales en un archivo temporal. Un atacante con acceso de lectura a la memoria o los logs del agente obtiene todos los secretos.
Nunca pongas secretos en el archivo de configuración del agente, en el Dockerfile o en los argumentos de línea de comandos. Usa un archivo de entorno con permisos restringidos.
Crea el archivo de secretos:
sudo mkdir -p /etc/agent
sudo touch /etc/agent/env
sudo chmod 600 /etc/agent/env
sudo chown root:root /etc/agent/env
Añade tus secretos:
sudo tee /etc/agent/env > /dev/null << 'EOF'
ANTHROPIC_API_KEY=sk-ant-your-key-here
AGENT_DB_PASSWORD=replace-with-generated-password
EOF
Genera contraseñas fuertes en lugar de inventarlas:
openssl rand -base64 32
El servicio systemd referencia este archivo con EnvironmentFile=/etc/agent/env. El proceso del agente recibe las variables pero no puede leer el archivo en sí (propiedad de root, modo 600). Systemd lee el archivo y pasa las variables al proceso.
Verifica los permisos del archivo:
ls -la /etc/agent/env
Esperado: -rw------- 1 root root. Solo root puede leerlo.
Rotación: Cuando rotas un secreto, actualiza /etc/agent/env y reinicia el servicio:
sudo systemctl restart ai-agent.service
El agente recoge los nuevos valores sin cambios en ningún archivo de configuración.
¿Cómo monitorizo la actividad de agentes IA en un servidor Linux?
Amenaza: Un agente comprometido o defectuoso funciona en silencio. Sin monitorización, descubres el problema cuando llega la factura de la API o tu servidor es señalado por abuso.
Monitorización de recursos en tiempo real
Observa el uso de recursos en directo:
journalctl -u ai-agent.service -f
Esto transmite stdout/stderr del agente en tiempo real. Pulsa Ctrl+C para parar.
Para contenedores Docker:
docker logs -f ai-agent
Monitoriza CPU y memoria en tiempo real:
docker stats ai-agent
¿Qué reglas de auditd debo configurar para procesos de agentes IA?
Instala auditd:
sudo apt update && sudo apt install -y auditd
Crea reglas de auditoría específicas para agentes. Añade a /etc/audit/rules.d/agent.rules:
# Monitor all commands executed by the agent user
-a exit,always -F arch=b64 -S execve -F uid=998 -k agent-exec
# Monitor file access in sensitive directories
-a exit,always -F arch=b64 -S openat -F dir=/etc -F uid=998 -k agent-etc-access
# Monitor network connections by agent user
-a exit,always -F arch=b64 -S connect -F uid=998 -k agent-network
# Monitor file permission changes by agent user
-a exit,always -F arch=b64 -S chmod,fchmod,fchmodat -F uid=998 -k agent-chmod
Sustituye uid=998 por el UID real de tu usuario agente. Encuéntralo con:
id -u agent-worker
Carga las nuevas reglas:
sudo augenrules --load
sudo systemctl enable --now auditd
Verifica que las reglas están activas:
sudo auditctl -l | grep agent
La salida muestra tus cuatro reglas listadas.
Busca eventos de ejecución del agente:
sudo ausearch -k agent-exec --start recent
Alertas automatizadas
Para producción, configura un watchdog simple que alerte sobre uso alto de recursos. Crea /usr/local/bin/agent-watchdog.sh:
#!/bin/bash
# Alert if agent container exceeds 90% memory
USAGE=$(docker stats ai-agent --no-stream --format "{{.MemPerc}}" | tr -d '%')
THRESHOLD=90
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
logger -t agent-watchdog "ALERT: ai-agent memory at ${USAGE}%"
fi
sudo chmod 755 /usr/local/bin/agent-watchdog.sh
Ejecútalo cada minuto vía cron o un timer de systemd. Las alertas aparecen en syslog, que puedes reenviar a tu stack de monitorización.
¿Cómo mantengo actualizado el software de agentes IA de forma segura?
Amenaza: El software de agente sin parchear contiene vulnerabilidades conocidas. Pero actualizar a mitad de sesión puede corromper el estado o romper flujos de trabajo en ejecución.
Para agentes basados en Docker, el proceso de actualización es atómico:
# Pull the new image
docker pull your-agent-image:latest
# Stop the old container
docker stop ai-agent
# Remove the old container
docker rm ai-agent
# Start with the same flags (use the docker run command from above)
docker run -d \
--name ai-agent \
# ... same flags as before ...
your-agent-image:latest
Para agentes sin contenedor:
# Check for updates to the agent
sudo systemctl stop ai-agent.service
# Update the agent (varies by framework)
# pip install --upgrade agent-framework
# npm update -g agent-tool
# Restart
sudo systemctl start ai-agent.service
# Verify it is running
sudo systemctl status ai-agent.service
Consejo de producción: Ejecuta dos instancias del agente detrás de un balanceador de carga. Actualiza una a la vez. Si la instancia actualizada falla los health checks, revierte a la versión anterior.
Mantén el sistema operativo del host parcheado por separado:
sudo apt update && sudo apt upgrade -y
Activa las actualizaciones de seguridad automáticas:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Antes y después: lo que ve un atacante
En un servidor sin proteger donde el agente se ejecuta como root sin contenedor y sin firewall:
- Acceso total al sistema de archivos: leer
/etc/shadow, claves SSH, datos de otros usuarios - Salida sin restricciones: exfiltrar datos a cualquier destino
- Todas las syscalls disponibles: montar sistemas de archivos, cargar módulos del kernel, esnifar tráfico de red
- Recursos ilimitados: tumbar el servidor con un fork bomb o una fuga de memoria
- Acceso persistente: instalar un backdoor, añadir claves SSH, crear nuevos usuarios
Después de aplicar todos los controles de esta guía:
- Confinado a
/home/agent-workersin acceso a archivos del sistema - HTTPS saliente restringido solo a endpoints API permitidos
- ~80 syscalls disponibles (frente a las 300+), sin mount/ptrace/reboot
- Techo fijo de 2 GB de RAM y 1,5 cores de CPU, límite de 100 procesos
- Sistema de archivos en solo lectura, sin posibilidad de instalar software ni persistir cambios
- Cada comando registrado por auditd con traza de auditoría consultable
El agente sigue funcionando. Puede llamar a APIs de LLM, procesar entradas y devolver salidas. Pero un agente comprometido no puede escapar de su caja.
¿Algo salió mal?
| Síntoma | Causa probable | Solución |
|---|---|---|
| El contenedor se cierra inmediatamente | Perfil seccomp demasiado restrictivo | Ejecuta con --security-opt seccomp=unconfined temporalmente, comprueba dmesg para syscalls bloqueadas, añádelas a tu perfil |
| El agente no llega a la API | Firewall de salida bloqueando el tráfico | Comprueba sudo ufw status, verifica que la IP de destino está permitida |
| El agente es matado por OOM | Límite de memoria demasiado bajo | Aumenta MemoryMax o --memory, comprueba el uso pico real del agente con docker stats |
auditd no registra |
Reglas no cargadas o UID incorrecto | Ejecuta sudo auditctl -l para verificar, comprueba que el UID coincide con el usuario agente |
Errores 429 desde Nginx |
Rate limit demasiado estricto | Aumenta el valor de burst, comprueba si se esperan picos de tráfico legítimo |
| El agente no puede escribir archivos temporales | --read-only sin --tmpfs |
Añade --tmpfs /tmp:size=100M a tu comando Docker run |
Comprueba los logs del agente primero:
# Systemd service
journalctl -u ai-agent.service -n 50 --no-pager
# Docker container
docker logs --tail 50 ai-agent
Comprueba los logs de auditoría para acciones bloqueadas:
sudo ausearch -k agent-exec --start today -i
FAQ
¿Puedo ejecutar agentes IA como root de forma segura?
No. Ejecutar agentes como root significa que cualquier inyección de prompt da al atacante control total del sistema. No existe ningún control compensatorio que haga aceptable ejecutar como root. Usa siempre un usuario dedicado sin privilegios de root.
¿Necesito Docker para proteger un agente IA?
No. El aislamiento de usuarios Linux, las directivas de seguridad de systemd (ProtectSystem, NoNewPrivileges, PrivateTmp) y los límites cgroup proporcionan un aislamiento sólido sin Docker. Docker añade una barrera de contenedor, que es valiosa como defensa en profundidad. Úsalo si puedes, pero el aislamiento de usuarios por sí solo detiene la mayoría de ataques de inyección-de-prompt-a-shell-root.
¿Cuánta CPU debo asignar a un agente IA?
Empieza con 1-2 cores de CPU (CPUQuota=150% en systemd o --cpus 1.5 en Docker) y 2 GB de RAM en un VPS de 8 GB. Monitoriza el uso real con docker stats o systemctl status durante una semana y luego ajusta. Los agentes son impredecibles en su consumo: están inactivos entre peticiones y se disparan durante el razonamiento. Los límites evitan que los picos afecten a otros servicios.
¿Cómo protejo varios agentes en el mismo servidor?
Crea un usuario Linux y un contenedor separados para cada agente. Cada uno con sus propios límites cgroup, reglas de salida y traza de auditoría. Usa redes Docker para aislar el tráfico entre agentes. Nunca compartas secretos entre agentes.
Copyright 2026 Virtua.Cloud. Todos los derechos reservados. Este contenido es una obra original del equipo de Virtua.Cloud. La reproducción, republicación o redistribución sin permiso escrito está prohibida.