9.1 Aspectos principales de la seguridad de redes Docker
En esta lección vamos a revisar los aspectos principales de la seguridad de redes Docker, recomendaciones y mejores prácticas para asegurar la protección de tus contenedores y datos.
Aspectos principales de la seguridad de redes Docker
- Aislamiento de contenedores
- Control de acceso
- Encriptación de datos
- Monitoreo y auditoría
- Actualizaciones y parches
9.2 Aislamiento de contenedores
El aislamiento de contenedores es el primer paso para garantizar la seguridad en redes Docker. Ayuda a minimizar el impacto de posibles vulnerabilidades y evita accesos no autorizados entre contenedores.
Uso de redes personalizadas
Crea redes personalizadas para aislar contenedores y limitar su interacción solo a los servicios necesarios.
docker network create --driver bridge my_secure_network
En Docker Compose puedes definir una red personalizada para cada servicio.
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_secure_network
app:
image: myapp:latest
networks:
- my_secure_network
networks:
my_secure_network:
driver: bridge
Uso de reglas entre contenedores
Docker permite establecer reglas entre contenedores para gestionar la interacción en la red entre ellos.
docker network connect --link <source_container>:<alias> <target_network> <container_name>
Ejemplo:
docker network connect --link container1:c1 multi-host-network container2
9.3 Control de acceso
El control de acceso es importante para prevenir el acceso no autorizado a los contenedores y redes.
Restricción de acceso a puertos
Restringe el acceso a los puertos publicados utilizando direcciones IP y reglas del firewall.
docker run -d -p 127.0.0.1:8080:80 --name my_secure_container nginx
Uso de roles y políticas
Utiliza roles y políticas de acceso para limitar los permisos de los usuarios que gestionan los contenedores y las redes.
docker run -d --user <uid>:<gid> my_secure_container
9.4 Cifrado de datos
El cifrado de datos ayuda a proteger datos confidenciales tanto en reposo como en transmisión.
Cifrado de datos en reposo
Usa cifrado de sistema de archivos para los volúmenes que utilizan los contenedores.
docker run -d --name my_secure_container --mount
type=volume,source=my_volume,destination=/data,volume-driver=local,volume-opt=o=bind,volume-opt=device=/mnt/secure_data nginx
Cifrado de datos en transmisión
Usa TLS para cifrar los datos transferidos entre contenedores y servicios externos.
docker run -d -p 443:443 --name my_secure_container -v /path/to/cert.pem:/etc/nginx/cert.pem -v
/path/to/key.pem:/etc/nginx/key.pem nginx
9.5 Monitoreo y auditoría
El monitoreo y la auditoría permiten rastrear la actividad de los contenedores y redes, identificar posibles amenazas y reaccionar ante ellas.
Logs y métricas
Recoge los logs y métricas de los contenedores para análisis y monitoreo.
docker logs <container_name>
Usa herramientas de monitoreo como Prometheus y Grafana para rastrear el estado de los contenedores y redes.
Auditoría
Activa la auditoría para rastrear las acciones de los usuarios y los cambios en la configuración de los contenedores y redes.
docker events
9.6 Actualizaciones y parches
Las actualizaciones y parches regulares ayudan a proteger los contenedores y redes contra vulnerabilidades conocidas.
Actualizar Docker
Mantente al tanto de las actualizaciones de Docker e instala las nuevas versiones a tiempo.
sudo apt-get update
sudo apt-get install docker-ce
Actualizar imágenes
Actualiza regularmente las imágenes de los contenedores a las últimas versiones que incluyan correcciones de seguridad.
docker pull nginx:latest
9.7 Ejemplos de mejores prácticas
Ejemplo 1: Creación de redes aisladas
Crea redes aisladas para cada componente de tu aplicación.
docker network create --driver bridge frontend_network
docker network create --driver bridge backend_network
Ejecuta los contenedores en las redes correspondientes.
docker run -d --name frontend --network frontend_network nginx
docker run -d --name backend --network backend_network myapp
Ejemplo 2: Restricción del acceso a los puertos
Restringe el acceso a los puertos de los contenedores solo para las direcciones IP y hosts necesarios.
docker run -d -p 192.168.1.100:8080:80 --name restricted_container nginx
Ejemplo 3: Uso de TLS para encriptación
Configura los contenedores para usar TLS y así proteger los datos durante la transmisión.
docker run -d -p 443:443 --name tls_container -v /path/to/cert.pem:/etc/nginx/cert.pem -v
/path/to/key.pem:/etc/nginx/key.pem nginx
GO TO FULL VERSION