🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Seguridad en Contenedores Docker: Buenas Prácticas 2025

Actualizado el 10 de marzo de 2026

La adopción de Docker en entornos de producción ha pasado de ser una tendencia a una necesidad operativa. Sin embargo, a medida que las arquitecturas de microservicios se vuelven más complejas, la seguridad contenedores se convierte en el pilar fundamental para evitar fugas de datos, escaladas de privilegios y ataques de denegación de servicio. En 2025, las amenazas han evolucionado: desde exploits en el runtime de contenedores hasta ataques a la cadena de suministro de imágenes. Este artículo recopila las mejores prácticas actualizadas para fortificar tu infraestructura Docker, minimizar vulnerabilidades y aplicar políticas de red robustas.

Principios Fundamentales de Seguridad en Contenedores

Antes de aplicar herramientas, es crucial entender que un contenedor no es una máquina virtual. Comparte el kernel del host, lo que implica que una vulnerabilidad en el runtime (como runc o containerd) puede comprometer todo el sistema. La seguridad en contenedores Docker se basa en tres pilares: inmutabilidad de imágenes, principio de mínimo privilegio y aislamiento de red.

Inmutabilidad y Trazabilidad

Cada capa de una imagen Docker debe ser rastreable. En 2025, el uso de firmas digitales (Notary, Cosign) es obligatorio en entornos corporativos. No basta con escanear imágenes una vez; hay que hacerlo en cada etapa del pipeline CI/CD.

[INFO] La inmutabilidad significa que una vez desplegado, un contenedor nunca debe modificarse en runtime. Si necesitas cambios, construye una nueva imagen y reemplázala.

Imágenes Minimizadas: Reducir la Superficie de Ataque

Las imágenes minimizadas son la primera línea de defensa. Cuantos menos paquetes, menos vulnerabilidades potenciales. En 2025, la tendencia es usar imágenes base como scratch, alpine o distroless.

Estrategias para Minimizar Imágenes

  • Usa imágenes oficiales y ligeras: Prefiere alpine (5 MB) sobre ubuntu (200 MB). Ejemplo: FROM alpine:3.19.
  • Elimina capas innecesarias: Combina comandos RUN con && y limpia la caché de paquetes.
  • Evita herramientas de depuración en producción: No incluyas curl, bash, vim o netcat en imágenes de producción.
  • Usa multi-stage builds: Compila en una imagen pesada y copia solo los binarios a una imagen final ligera.
# Etapa de compilación
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

# Etapa final minimizada
FROM alpine:3.19
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]

[TIP] Herramientas como docker-slim pueden reducir imágenes existentes hasta un 80% eliminando archivos y dependencias no utilizados.

Escaneo de Vulnerabilidades Integrado

No basta con minimizar; hay que escanear. Integra herramientas como Trivy, Grype o Snyk en tu pipeline. En 2025, los escáneres ya detectan vulnerabilidades en dependencias de lenguajes (npm, pip, Go modules) y no solo en paquetes del sistema.

# Ejemplo con Trivy
trivy image --severity HIGH,CRITICAL --no-progress myapp:latest

Políticas de Red: Microsegmentación y Control de Tráfico

Las políticas de red en Docker son esenciales para aislar contenedores. Por defecto, todos los contenedores en un mismo host pueden comunicarse entre sí. Esto es un riesgo enorme. En 2025, se recomienda usar redes definidas por el usuario (user-defined networks) y aplicar reglas de firewall con iptables o eBPF.

Configuración de Redes Seguras

  1. Crea redes separadas por propósito: Una red para frontend, otra para backend y otra para base de datos.
  2. Usa redes bridge personalizadas: Evita la red bridge por defecto.
  3. No expongas puertos innecesarios: Solo publica puertos estrictamente necesarios con -p o en el docker-compose.
# docker-compose.yml con redes aisladas
version: '3.8'
services:
  web:
    image: nginx:alpine
    networks:
      - frontend
    ports:
      - "80:80"
  api:
    image: myapi:latest
    networks:
      - frontend
      - backend
  db:
    image: postgres:16-alpine
    networks:
      - backend
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true  # Sin acceso externo

Políticas de Red con Docker Swarm o Kubernetes

Si usas orquestadores, las políticas de red se vuelven declarativas. En Docker Swarm, puedes usar docker network create --attachable y luego asignar servicios. En Kubernetes, los NetworkPolicies son obligatorios para entornos multiinquilino.

[WARNING] No confíes en el aislamiento por defecto de Docker. Siempre define políticas explícitas. Un contenedor comprometido en la misma red puede atacar a sus vecinos.

Gestión de Privilegios y Recursos

Un contenedor con --privileged tiene acceso completo al kernel del host. En 2025, esta práctica está totalmente desaconsejada. En su lugar, usa capacidades específicas (capabilities) y monta solo los volúmenes necesarios.

Buenas Prácticas de Ejecución

  • Ejecuta como usuario no root: Crea un usuario dentro del Dockerfile y úsalo.
  • Desactiva capacidades peligrosas: --cap-drop=ALL y luego --cap-add=NET_BIND_SERVICE si es necesario.
  • Limita recursos: Usa --memory, --cpus y --pids-limit para prevenir DoS.
  • Monta volúmenes en modo solo lectura: :ro para evitar escrituras no autorizadas.
# Dockerfile con usuario no root
FROM alpine:3.19
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
COPY --chown=appuser:appgroup app /app
CMD ["/app"]
# Ejecución segura
docker run --read-only --cap-drop=ALL --cap-add=NET_BIND_SERVICE --memory=256m --cpus=0.5 myapp:latest

Monitoreo y Actualización Continua

La seguridad no es un estado, es un proceso. En 2025, la automatización del parcheado es clave. Usa herramientas como Watchtower o Diun para actualizar imágenes automáticamente, pero con cuidado: siempre prueba en staging.

Registro y Auditoría

  • Habilita Docker audit logging: Redirige logs a un SIEM centralizado.
  • Usa Falco o Tracee: Detectan comportamientos anómalos en runtime (ejecución de shells, montajes inesperados).
  • Analiza la capa de red: Con herramientas como Cilium o Calico para visibilidad de tráfico entre contenedores.

[INFO] La mayoría de los ataques a contenedores ocurren en la fase de runtime. Un monitor de seguridad como Falco puede alertarte si un contenedor intenta ejecutar chmod en /etc o abrir un socket no autorizado.

Resumen de Buenas Prácticas 2025

  • Imágenes: Usa bases minimizadas (Alpine, Distroless) y escanea cada build con Trivy.
  • Red: Crea redes aisladas, evita la red por defecto y aplica políticas de firewall.
  • Privilegios: Ejecuta como no root, elimina capacidades innecesarias y monta volúmenes en solo lectura.
  • Actualizaciones: Automatiza el parcheado de imágenes y monitorea runtime con Falco.
  • Cadena de suministro: Firma imágenes con Cosign y verifica firmas antes de desplegar.

Implementar estas prácticas no solo protege tus aplicaciones, sino que también te prepara para auditorías de seguridad y cumplimiento normativo. La seguridad contenedores en Docker es una responsabilidad compartida entre desarrolladores y operaciones. En 2025, la automatización y la inmutabilidad son tus mejores aliados. Empieza por minimizar tus imágenes, aislar tus redes y escanear cada capa. El resto vendrá por añadidura.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel