Cómo Docker traduce la dirección IP de la interfaz Docker0 a la dirección IP del host

Cómo Docker traduce la dirección IP de la interfaz Docker0 a la dirección IP del host

Estoy intentando crear un entorno de laboratorio para experimentar con ataques MiTM. También quiero aprender sobre Docker, así que decidí hacer esto con Docker. Creé 2 imágenes (atacante, víctima):

Víctima: basado en Alpine, con curl instalado.
Atacante: basado en Ubuntu, con iputils-ping iproute2 curl iptables vim ettercap-text-only dsniff y tshark instalados.

Ambos están en una red puenteada, por lo que el enrutador aquí sería la interfaz docker0 (predeterminada: 172.17.0.1).
Estoy ejecutando el contenedor del atacante con el indicador --privileged, para habilitar el uso de ettercap.

Entonces, cuando ambas imágenes se están ejecutando, estoy ejecutando ettercap (también probé con la herramienta arpspoof, el mismo efecto) desde el contenedor del atacante con:
ettercap -T -i eth0 -M arp:remote //victim_ip/ //172.17.0.1/

El tráfico de la víctima pasa a través del atacante, pero existe el problema de que cuando la víctima intenta hacer ping a google.com no hay respuesta. El ataque MiTM está funcionando porque puedo ver este tráfico en los contenedores de las víctimas, pero algo lo está bloqueando.

Descubrí cuál es el problema aquí. Abrí 2 wiresharks en mi host, uno en la interfaz docker0 y otro en mi interfaz wifi predeterminada. Antes del ataque, cuando hago ping a algo desde la red global, la ventana acoplable traduce su dirección IP de la ventana acoplable a la dirección IP de mi host y eso funciona bien, pero después de la arpspoofing, no funciona correctamente: el host envía paquetes con la fuente IP de contenedor de víctima de Docker (172.17.0.3). Además, lo extraño es que otro contenedor (atacante) está haciendo ping a la red externa sin ningún problema (docker0 traduce correctamente la IP de la ventana acoplable a la IP del host). Imagen de ambos wiresharks, a continuación.

Imagen de ambos wiresharks

Verifiqué iptables y esta regla (seleccionada en la imagen a continuación) está traduciendo la dirección IP de mi ventana acoplable a la dirección IP del host, pero después del ataque, esta regla no funciona (los paquetes no aumentan después del ataque de suplantación de identidad de arp). Intenté agregar algunas reglas de iptables adicionales pero sin efecto. No soy un maestro de iptables, así que si alguien tiene otras ideas sobre lo que también debería comprobar, déme una pista.

ingrese la descripción de la imagen aquí

Tal vez alguien podría explicarme o darme algunas fuentes adicionales sobre cómo exactamente Docker traduce su dirección IP a la dirección IP del host en la red puente y qué puedo hacer para restaurar la traducción correcta después de un ataque de suplantación de identidad. Cada consejo será apreciado.

Respuesta1

  • Cuando se instala Docker, docker0se crea una interfaz de red denominada para conectar cada contenedor.
  • Cuando Docker crea un contenedor, de forma predeterminada se le proporciona una interfaz de red virtual con un nombre que comienza con veth. Luego, Docker reenvía el tráfico de la interfaz de red del host a la interfaz de red virtual a través de reglas de iptables.
  • Si crea el contenedor con el comando docker run --network=host ..., hará que el contenedor utilice la interfaz de red del host. En este punto, la dirección IP del contenedor es la misma que la del host.

información relacionada