Taller: Firewall con Docker e iptables

Taller: Firewall con Docker e iptables

🛡️ Taller: Firewall con Docker e iptables

🎯 Objetivo

Simular un entorno de red segura con contenedores Docker, aplicando reglas de firewall usando iptables.

🧰 Requisitos

  • Ubuntu con Docker instalado
  • Conexión a internet para instalar paquetes

📦 Paso 1: Crear red personalizada

🐳 Paso 2: Crear los contenedores

  • Servidor nginx:
sudo docker run -dit --name servidor_web --network red_segura \
  --ip 172.25.0.10 nginx
  • Cliente atacante:
sudo docker run -dit --name cliente --network red_segura \
  --ip 172.25.0.20 alpine sh
  • Firewall (usa una IP libre para evitar conflicto):
sudo docker run -dit --name firewall --network red_segura \
  --ip 172.25.0.5 --cap-add=NET_ADMIN debian bash

🛠️ Paso 3: Configurar el contenedor firewall

sudo docker exec -it firewall bash
apt update && apt install iproute2 iptables curl -y

🔍 Paso 4: Probar conexión desde cliente

sudo docker exec -it cliente sh
apk add curl
curl 172.25.0.10

✅ Debería mostrar el HTML del servidor nginx

🚫 Paso 5: Aplicar regla de bloqueo en firewall

Ejecuta el comando como root para evitar errores de permisos:

sudo iptables -I FORWARD -s 172.25.0.20 -d 172.25.0.10 -p tcp --dport 80 -j DROP

🔁 Vuelve al cliente y repite el curl. Si todavía puedes acceder, verifica que el contenedor firewall esté correctamente enrutando el tráfico o considera aplicar la regla directamente en el host.

🧪 Paso 6: Verificar reglas

sudo iptables -L -v

⚠️ Alternativa: uso de DOCKER-USER para reglas efectivas

Si las reglas en la cadena FORWARD no bloquean el tráfico esperado, puedes insertar la regla en la cadena DOCKER-USER, que se procesa antes que las reglas gestionadas automáticamente por Docker:

sudo iptables -I DOCKER-USER -s 172.25.0.20 -d 172.25.0.10 -p tcp --dport 80 -j DROP

Luego repite la prueba desde el cliente para verificar si se bloquea correctamente.

📌 Opcional: limpiar reglas

sudo iptables -F

💡 Salir y gestionar contenedores

  • Salir de un contenedor sin detenerlo:
  • exit
  • Detener un contenedor:
  • sudo docker stop firewall
  • Eliminar un contenedor:
  • sudo docker rm firewall

📝 Evaluación sugerida

  • ✔️ Crear red y contenedores correctamente
  • ✔️ Acceder al servidor desde el cliente
  • ✔️ Aplicar regla iptables desde el contenedor firewall
  • ✔️ Confirmar bloqueo de acceso al puerto 80

¡Taller finalizado con éxito! Puedes expandir este entorno integrando fail2ban, nginx logs, o tcpdump para análisis de tráfico.

Comentarios