Skip to content
BotServBotServ
DockerRedesAislamientoBridgeSeguridad

Aislamiento de redes Docker

Aísla redes Docker: Bridge, redes personalizadas, redes internas y segregación entre contenedores.

S

schutzgeist

3 min read
Aislamiento de redes Docker

Aislamiento de redes en Docker

Qué cubre este artículo sobre aislamiento de redes en Docker

  • Puentes estándar y redes personalizadas.
  • Redes internas sin comunicación externa.
  • Segmentación de redes en Compose.
  • Ventajas de seguridad del aislamiento.
  • Consejos para arquitecturas de red limpias.

Introducción: Aislamiento de redes en Docker

En Docker, muchos contenedores se ejecutan frecuentemente en el mismo host. Sin aislamiento, los contenedores pueden verse entre sí, hacer ping y comunicarse a través de puertos abiertos. Para configuraciones sensibles a la seguridad, esto es problemático. Docker ofrece diferentes tipos de redes que permiten separar contenedores los unos de los otros. Si colocas bases de datos, APIs y contenedores web públicos en redes separadas, reduces el riesgo y obtienes una infraestructura más clara.

Este artículo muestra cómo aislar redes en Docker.

Conceptos clave

  • Bridge: Tipo de red estándar en Docker.
  • Overlay: Red para clústeres Swarm.
  • Host: El contenedor utiliza la red del host.
  • None: Sin red.
  • Red interna: Sin comunicación externa.
  • Segmentación: División en áreas lógicas de red.
  • Microsegmentación: Aislamiento fino por servicio.
  • Bridge predeterminado: Red estándar de Docker.

Bridge estándar

Por defecto, todos los contenedores se ejecutan en la red bridge. Pueden alcanzarse mutuamente por IP, siempre que no haya firewall entre ellos. Es conveniente, pero inseguro.

docker network ls

Red personalizada

docker network create app-net

Los contenedores solo en esta red pueden alcanzarse por nombres DNS:

docker run -d --name web --network app-net nginx
docker run -d --name db --network app-net postgres

Red interna

Las redes internas no tienen acceso externo:

docker network create --internal backend-net

Los contenedores en una red interna no pueden acceder a Internet. Ideal para bases de datos o APIs internas.

Ejemplo con Compose

services:
  web:
    image: nginx
    networks:
      - frontend

  app:
    image: mein-app
    networks:
      - frontend
      - backend

  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    internal: true

La base de datos es accesible solo a través de app, no directamente desde frontend.

No publicar puertos

Solo los contenedores que deben ser accesibles desde el exterior reciben puertos:

services:
  db:
    image: postgres
    networks:
      - backend
    # Sin ports aquí

Sin Internet para ciertos contenedores

Con network_mode: none:

services:
  batch:
    image: batch-processor
    network_mode: none

O mediante reglas iptables específicas.

Seguridad a través del aislamiento

  • Las bases de datos no son directamente accesibles.
  • Las APIs internas están protegidas.
  • Menor superficie de ataque.
  • Reglas más simples para firewalls y proxy inverso.
  • El malware en un contenedor se propaga más lentamente.

Proxy inverso como punto de entrada

Un Traefik o nginx accesible públicamente dirige las solicitudes a la red correcta. Los servicios detrás no necesitan sus propios puertos públicos.

Consejos

  • Una red para cada área lógica.
  • Bases de datos en la red backend interna.
  • No publicar todos los puertos.
  • Complementar con firewall en el host.
  • Logging y monitoring en todas las redes.
  • Permitir solo las conexiones necesarias.

Errores comunes

  • Contenedor en la red equivocada: Verifica la accesibilidad.
  • DNS no funciona: Las redes personalizadas proporcionan DNS, el bridge predeterminado no.
  • Redes internas y actualizaciones: El contenedor no puede descargar paquetes.
  • Puertos publicados en el lugar incorrecto: Brecha de seguridad.
  • Regla de firewall incorrecta: El contenedor sigue siendo accesible.

Enlaces y recursos adicionales

FAQ: Aislamiento de redes en Docker

¿Están aislados los contenedores Docker en la misma red? No, por defecto pueden alcanzarse mutuamente.

¿Qué es una red interna? Una red sin conexión externa, por ejemplo para bases de datos.

¿Necesito una red para cada servicio? Con varios servicios, la segmentación tiene sentido, pero no es obligatoria.

¿Puedo desconectar completamente un contenedor de la red? Sí, con network_mode: none.

¿Cómo accede un contenedor a Internet? En el bridge estándar o en una red personalizada, no en una red interna.

Fuentes y lecturas adicionales

Resumen: Aislamiento de redes en Docker

El aislamiento de redes en Docker es una medida de seguridad simple pero efectiva. Las redes personalizadas e internas separan lógicamente los contenedores entre sí. Las bases de datos y APIs internas pertenecen al backend, los servicios públicos al frontend. Si publicas puertos con moderación y no expones la red externa en todas partes, reduces la superficie de ataque y mantienes tu infraestructura clara.

Volver al blog
Share:

Entradas relacionadas