Seguridad de contenedores — cómo no ejecutar un «caballo de Troya» en tu nube
Publicado el 19.01.2026
Cuando la tecnología Docker apareció, la adoraron por el lema: «Build once, run anywhere» (Construye una vez, ejecuta en cualquier lugar). Los desarrolladores dejaron de escuchar la frase «en mi máquina funciona, pero en el servidor no». Pero junto con la comodidad llegó una nueva amenaza.
Un contenedor no es solo tu aplicación. Es todo un mini-sistema operativo (SO) con sus propias bibliotecas, utilidades y llamadas al sistema. Y si no vigilas ese SO, dejas a los atacantes una puerta enorme completamente abierta.
El problema del “pastel por capas”
La imagen de Docker se construye en capas. Cada vez que escribes FROM, RUN o COPY en tu Dockerfile, añades una nueva capa.
¿Cuál es el truco?
La mayoría de los principiantes comienzan con el comando FROM ubuntu:latest o FROM python:3.9.
- Peso: la base
ubuntupor sí sola es relativamente pequeña, pero en cuanto empiezas a instalar paquetes y dependencias, la imagen fácilmente se infla hasta cientos de megabytes. Y las imágenes completas de lenguajes/SDK suelen ser realmente pesadas. - Basura: en esas imágenes pueden encontrarse (o aparecer rápidamente) utilidades como
curl,wget, el gestor de paquetes, un shell y otras herramientas que tu aplicación en realidad no necesita para funcionar. - Vulnerabilidades: cuantas más paquetes haya en el sistema, más agujeros tendrá. Un atacante no necesita romper tu código en Python — puede aprovechar una vulnerabilidad en una versión antigua de
curlque simplemente “estaba ahí” en el contenedor.
Línea de defensa nº1: pasar a “imágenes doradas” (Alpine y Distroless)
La primera regla de seguridad para contenedores: elimina todo lo innecesario. Si tu aplicación no necesita bash, no debería estar en el contenedor.
1) Alpine Linux
Es una distribución Linux ultraligera. La imagen base pesa solo alrededor de 5 MB. No tiene casi nada, salvo lo esencial.
- Ventaja: mínimo espacio de ataque.
- Desventaja: usa la biblioteca
muslen lugar de la estándarglibc, lo que a veces causa problemas con algunas dependencias binarias específicas y con la compilación de ciertas bibliotecas.
2) Distroless (la elección de los profesionales)
Son imágenes que no tienen absolutamente nada excepto tu aplicación y sus dependencias. Ni siquiera tienen una línea de comandos (shell).
¿Por qué es genial? Si un atacante compromete tu aplicación, le resulta mucho más difícil “vivir” dentro del contenedor: no podrá simplemente ejecutar ls o curl para descargar malware, porque las herramientas habituales pueden no existir dentro del contenedor.
Línea de defensa nº2: Multi-stage builds (construcción en varias etapas)
Es una técnica que permite usar herramientas pesadas (compiladores, SDK) para construir la aplicación, pero no arrastrarlas a la imagen final.
Mal ejemplo (todo en uno)
FROM python:3.9
COPY . /app
RUN pip install -r /app/requirements.txt # Aquí quedan cachés y herramientas de compilación
CMD ["python", "/app/main.py"]
Buen ejemplo (Multi-stage)
# Etapa 1: Compilación
FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# Etapa 2: Imagen final (solo ejecución)
FROM python:3.9-slim
WORKDIR /app
# Copiamos solo las librerías instaladas desde la primera etapa
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
# Ejecutar como un usuario normal (ver más abajo)
USER 1001
CMD ["python", "main.py"]
Línea de defensa nº3: nunca trabajes como root
Por defecto, muchas cosas en contenedores se ejecutan como root (superusuario). Esto es peligroso: si un atacante obtiene ejecución de comandos dentro del contenedor, los permisos de root amplían drásticamente el abanico de ataques posibles, y si se dan condiciones adicionales (errores de configuración, contenedor privilegiado, vulnerabilidades del kernel) pueden aumentar el daño.
¿Qué hacer?
Siempre crea en el Dockerfile un usuario con permisos limitados y cámbiate a él usando la instrucción USER.
Regla de oro: la aplicación dentro del contenedor casi nunca necesita permisos de root para su funcionamiento normal.
Línea de defensa nº4: escaneo de imágenes (Trivy vuelve)
¿Recuerdas la herramienta Trivy del artículo anterior? Puede escanear no solo código, sino también imágenes Docker listas.
Cómo hacerlo
trivy image my-app:latest
Trivy revisará las capas de tu imagen y mostrará las vulnerabilidades en paquetes/componentes que vinieron con la imagen base y las dependencias instaladas, además de indicar qué versiones se consideran corregidas.
Resumen: lista de verificación de seguridad para tus contenedores
Para que tu “caja fuerte” sea realmente confiable, sigue estos cuatro puntos:
| Acción | Herramienta/Método | Para qué sirve |
|---|---|---|
| Minimizar | Usa Alpine o Distroless | Reducir la superficie de ataque |
| Limpiar | Multi-stage build | Quitar herramientas de compilación del prod |
| Restringir | Comando USER nonroot | Reducir las consecuencias de una compromisión |
| Auditar | trivy image | Encontrar vulnerabilidades en paquetes del SO |
Conclusión del ciclo DevSecOps
Hemos tratado cuatro poderosas herramientas:
- Git hooks (Gitleaks): para que las claves no salgan de tu ordenador.
- SAST (Semgrep): para que tu código no contenga fallos lógicos.
- SCA (Trivy): para que las bibliotecas de terceros no se conviertan en tu problema.
- Seguridad de contenedores: para que tu infraestructura sea ligera y esté protegida.
La seguridad no es un punto final, sino un proceso. Empieza a implantar estas herramientas una a una, y en un mes notarás cómo mejora la cultura de desarrollo en tu equipo. Ahora no solo “escribes código”, creas sistemas confiables.
Reseñas relacionadas
La experiencia de colaboración dejó una impresión sumamente positiva, principalmente por el profesionalismo y el enfoque para resolver los problemas que surgieron.
mendarinno384 · Jitsi Meet: Zoom personal, configuración de Jitsi Meet en Docker y en VPS
11.11.2025 · ⭐ 5/5
La experiencia de colaboración dejó una impresión sumamente positiva, principalmente por el profesionalismo y el enfoque para resolver los problemas que surgieron.
Había que hacer funcionar n8n, Redis y la base de datos. Lo había encargado antes a otro proveedor; todo se rompía constantemente. Se lo encargué a Mijaíl y al día siguiente todo funcionó rápido, ¡como un reloj!
christ_media · Instalación de n8n en su servidor VPS. Configuración de n8n, Docker, IA, Telegram
Comprador experimentado24.09.2025 · ⭐ 5/5
Había que poner en marcha n8n, redis y la base de datos. Contraté antes a otro proveedor, y todo se rompía constantemente. Lo encargué a Mikhail, y al día siguiente ¡todo empezó a funcionar rápido, como un reloj!
Gracias por el trabajo rápido y bien hecho. Todo se hizo de manera ágil y como debía ser!
Dr-zelenin · Instalación de n8n en su servidor VPS. Configuración de n8n, Docker, IA, Telegram
06.09.2025 · ⭐ 5/5
Gracias por el trabajo rápido y bien hecho. Todo se hizo con prontitud y tal como se necesitaba!
Solución rápida al problema, ¡recomiendo a Mijaíl como profesional a todo el mundo! Intenté montar una configuración similar por mi cuenta y siguiendo consejos de IA, y acabé gastando mucho tiempo y dinero (por el tiempo de inactividad del servidor). Así que mi consejo final: acudan a profesionales, sale más barato =) Gracias a Mijaíl por su profesionalidad.
ladohinpy · Instalación de n8n en su servidor VPS. Configuración de n8n, Docker, IA, Telegram
25.08.2025 · ⭐ 5/5
Solución rápida al problema, ¡recomiendo a Mikhail como profesional! Intenté montar una configuración similar por mi cuenta y siguiendo consejos de redes neuronales, y acabó siendo una pérdida de mucho esfuerzo y dinero (por el tiempo de inactividad del servidor). Así que mi consejo al final: acudan a profesionales, saldrá más barato =) Gracias a Mikhail por su profesionalismo.
Mijaíl configuró otro VPS. Rápida y profesionalmente sorteó ciertas limitaciones de los proveedores de hosting.
NadoBy · Instalación de N8n en su servidor VPS. Configuración de n8n, Docker, IA, Telegram
Cliente acostumbrado12.08.2025 · ⭐ 5/5
Mijaíl completó la configuración de otro VPS. De forma rápida y profesional, sorteando ciertas limitaciones impuestas por los proveedores de hosting.
¡Excelente trabajo, gracias! ¡Mijaíl es un profesional, lo recomiendo!
Dina_Perova · Instalación de n8n en su servidor VPS. Configuración de n8n, Docker, IA, Telegram
Cliente acostumbrado03.07.2025 · ⭐ 5/5
¡Excelente trabajo, gracias! Mikhail es un profesional en lo suyo, ¡lo recomiendo!