Contenedores en entornos aislados (Air-Gapped)
Los contenedores en entornos aislados (Air-gapped containers) te permiten restringir el acceso a la red de los contenedores controlando dónde pueden enviar y recibir datos. Esta característica aplica reglas de proxy personalizadas al tráfico de red de los contenedores, lo que ayuda a proteger entornos donde los contenedores no deben tener un acceso ilimitado a Internet.
Docker Desktop puede configurar el tráfico de red de los contenedores para aceptar conexiones, rechazar conexiones o canalizar el tráfico a través de proxies HTTP o SOCKS. Tú controlas a qué puertos TCP se aplica la política y si se debe utilizar un único proxy o políticas por destino a través de archivos de Autoconfiguración de Proxy (Proxy Auto-Configuration - PAC).
¿Quién debería usar contenedores en entornos aislados?
Utiliza contenedores en entornos aislados si:
- Tu organización requiere que los contenedores se comuniquen únicamente con servicios internos aprobados.
- Necesitas cumplir con estándares de conformidad que exigen aislamiento de red (como SOC 2, ISO 27001 o PCI DSS).
- Deseas evitar que los contenedores filtren datos o accedan a puntos finales externos no aprobados durante las compilaciones o en el tiempo de ejecución.
Cómo funcionan los contenedores en entornos aislados
Los contenedores en entornos aislados interceptan el tráfico de red del contenedor y aplican reglas de proxy:
- Intercepción del tráfico: Docker Desktop intercepta todas las conexiones de red salientes de los contenedores.
- Filtrado de puertos: Solo el tráfico en los puertos especificados (
transparentPorts) está sujeto a las reglas del proxy. - Evaluación de reglas: Las reglas del archivo PAC o las configuraciones de proxy estáticas determinan cómo manejar cada conexión.
- Gestión de conexiones: El tráfico se permite directamente, se enruta a través de un proxy o se bloquea según las reglas.
Algunas consideraciones importantes son:
- El ajuste de
proxyexistente sigue aplicándose al tráfico de la aplicación Docker Desktop en el host. - Si falla la descarga del archivo PAC, los contenedores bloquean las solicitudes a las URL de destino.
- El nombre de host está disponible para los puertos 80 y 443, pero solo se dispone de direcciones IP para otros puertos.
Requisitos previos
Antes de configurar contenedores en entornos aislados, debes tener:
- La imposición del inicio de sesión habilitada para asegurar que los usuarios se autentiquen en tu organización.
- Una suscripción de Docker Business.
- Configurada la
Gestión de Ajustes con el archivo
admin-settings.jsonpara administrar las políticas de la organización.
Configurar contenedores en entornos aislados
Agrega el proxy de contenedores a tu
archivo admin-settings.json. Por ejemplo:
{
"configurationFileVersion": 2,
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "",
"https": "",
"exclude": [],
"pac": "http://192.168.1.16:62039/proxy.pac",
"transparentPorts": "*"
}
}Parámetros de configuración
El ajuste containersProxy controla las políticas de red aplicadas al tráfico de contenedores:
| Parámetro | Descripción | Valor |
|---|---|---|
locked | Evita que los desarrolladores anulen los ajustes | true (bloqueado), false (por defecto) |
mode | Método de configuración de proxy | system (usar proxy del sistema), manual (personalizado) |
http | Servidor proxy HTTP | URL (ej., "http://proxy.company.com:8080") |
https | Servidor proxy HTTPS | URL (ej., "https://proxy.company.com:8080") |
exclude | Omitir proxy para estas direcciones | Matriz de nombres de host/IPs |
pac | URL del archivo de Autoconfiguración de Proxy | URL al archivo PAC |
transparentPorts | Puertos sujetos a las reglas de proxy | Puertos separados por comas o comodín ("*") |
Ejemplos de configuración
Bloquear todo el acceso externo:
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "",
"https": "",
"exclude": [],
"transparentPorts": "*"
}Permitir servicios internos específicos:
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "",
"https": "",
"exclude": ["internal.company.com", "10.0.0.0/8"],
"transparentPorts": "80,443"
}Enrutar a través del proxy corporativo:
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "http://corporate-proxy.company.com:8080",
"https": "http://corporate-proxy.company.com:8080",
"exclude": ["localhost", "*.company.local"],
"transparentPorts": "*"
}Archivos de Autoconfiguración de Proxy (PAC)
Los archivos PAC proporcionan un control detallado sobre el acceso a la red de los contenedores al definir reglas para diferentes destinos.
Estructura básica de un archivo PAC
function FindProxyForURL(url, host) {
if (localHostOrDomainIs(host, 'internal.corp')) {
return "PROXY 10.0.0.1:3128";
}
if (isInNet(host, "192.168.0.0", "255.255.255.0")) {
return "DIRECT";
}
return "PROXY reject.docker.internal:1234";
}Consideraciones generales
El formato del parámetro URL en la función
FindProxyForURLeshttp://host_o_ip:puertoohttps://host_o_ip:puerto.Si tienes un contenedor interno que intenta acceder a
https://docs-docker.esdocu.com/enterprise/security/hardened-desktop/air-gapped-containers, el servicio proxy de Docker enviarádocs-docker.esdocu.compara el valor del host yhttps://docs-docker.esdocu.com:443para el valor de la URL aFindProxyForURL. Si utilizas la funciónshExpMatchen tu archivo PAC de la siguiente manera:if(shExpMatch(url, "https://docs-docker.esdocu.com:443/enterprise/security/*")) return "DIRECT";La función
shExpMatchfallará; en su lugar, utiliza:if (host == docs-docker.esdocu.com && url.indexOf(":443") > 0) return "DIRECT";
Valores de retorno de un archivo PAC
| Valor de retorno | Acción |
|---|---|
PROXY host:port | Enrutar a través del proxy HTTP en el host y puerto especificados |
SOCKS5 host:port | Enrutar a través del proxy SOCKS5 en el host y puerto especificados |
DIRECT | Permitir conexión directa sin proxy |
PROXY reject.docker.internal:any_port | Bloquear la solicitud por completo |
Ejemplo avanzado de archivo PAC
function FindProxyForURL(url, host) {
// Permitir el acceso a Docker Hub para imágenes base aprobadas
if (dnsDomainIs(host, ".docker.io") || host === "docker.io") {
return "PROXY corporate-proxy.company.com:8080";
}
// Permitir repositorios de paquetes internos
if (localHostOrDomainIs(host, 'nexus.company.com') ||
localHostOrDomainIs(host, 'artifactory.company.com')) {
return "DIRECT";
}
// Permitir herramientas de desarrollo en puertos específicos
if (url.indexOf(":3000") > 0 || url.indexOf(":8080") > 0) {
if (isInNet(host, "10.0.0.0", "255.0.0.0")) {
return "DIRECT";
}
}
// Bloquear el acceso al localhost del desarrollador
if (host === "host.docker.internal" || host === "localhost") {
return "PROXY reject.docker.internal:1234";
}
// Bloquear todo el demás acceso externo
return "PROXY reject.docker.internal:1234";
}Verificar la configuración de contenedores en entornos aislados
Después de aplicar la configuración, comprueba que las restricciones de red del contenedor funcionen:
Probar acceso bloqueado:
$ docker run --rm alpine wget -O- https://www.google.com
# Debería fallar o agotar el tiempo de espera (timeout) según tus reglas de proxy
Probar acceso permitido:
$ docker run --rm alpine wget -O- https://internal.company.com
# Debería completarse correctamente si internal.company.com está en tu lista de exclusión o reglas de PAC
Probar enrutamiento de proxy:
$ docker run --rm alpine wget -O- https://docker.io
# Debería completarse correctamente si se enruta a través del proxy aprobado
Consideraciones de seguridad
- Apicación de políticas de red: Los contenedores en entornos aislados funcionan a nivel de Docker Desktop. Los usuarios avanzados podrían eludir las restricciones a través de diversos medios, por lo que debes considerar controles adicionales a nivel de red para entornos de alta seguridad.
- Impacto en el flujo de trabajo de desarrollo: Las políticas excesivamente restrictivas pueden interrumpir los flujos de trabajo de desarrollo legítimos. Realiza pruebas exhaustivas y proporciona excepciones claras para los servicios necesarios.
- Gestión de archivos PAC: Aloja los archivos PAC en una infraestructura interna confiable. Las descargas fallidas de PAC resultan en un bloqueo del acceso a la red de los contenedores.
- Consideraciones de rendimiento: Los archivos PAC complejos con muchas reglas pueden afectar el rendimiento de red del contenedor. Mantén las reglas simples y eficientes.
Siguientes pasos
- Explorar el Aislamiento de Contenedores Mejorado para restringir aún más lo que los contenedores pueden hacer en el tiempo de ejecución.
- Comprender cómo maneja Docker Desktop las redes del host y del contenedor