Wie Docker die IP-Adresse der Docker0-Schnittstelle in die IP-Adresse des Hosts übersetzt

Wie Docker die IP-Adresse der Docker0-Schnittstelle in die IP-Adresse des Hosts übersetzt

Ich versuche, eine Laborumgebung zu erstellen, um mit MiTM-Angriffen zu experimentieren. Ich möchte auch Docker lernen, also habe ich beschlossen, dies mit Docker zu tun. Ich habe 2 Bilder erstellt (Angreifer, Opfer):

Opfer – basierend auf Alpine, mit installiertem curl. Angreifer –
basierend auf Ubuntu, mit installiertem iputils-ping iproute2 curl iptables vim ettercap-text-only dsniff und tshark.

Sie befinden sich beide in einem überbrückten Netzwerk, der Router hier wäre also die Docker0-Schnittstelle (Standard: 172.17.0.1).
Ich führe den Angreifer-Container mit dem Flag --privileged aus, um die Verwendung von Ettercap zu ermöglichen.

Wenn also beide Images ausgeführt werden, führe ich Ettercap (auch mit dem Tool Arpspoof versucht, gleiche Wirkung) vom Angreifer-Container aus mit:
ettercap -T -i eth0 -M arp:remote //victim_ip/ //172.17.0.1/

Der Datenverkehr des Opfers gelangt durch den Angreifer, aber es gibt das Problem, dass beim Versuch des Opfers, google.com anzupingen, keine Antwort erfolgt. Der MiTM-Angriff funktioniert, weil ich diesen Datenverkehr auf den Containern des Opfers sehen kann, aber etwas blockiert ihn.

Ich habe herausgefunden, wo das Problem liegt. Ich habe 2 Wiresharks auf meinem Host geöffnet, einen auf der Docker0-Schnittstelle und einen auf meiner Standard-WLAN-Schnittstelle. Vor dem Angriff, wenn ich etwas aus dem globalen Netzwerk anpinge, übersetzt der Docker seine Docker-IP-Adresse in meine Host-IP-Adresse und das funktioniert einwandfrei, aber nach dem Arpspoofing funktioniert es nicht richtig – der Host sendet Pakete mit der IP-Quelle des Docker-Opfercontainers (172.17.0.3). Außerdem ist das Seltsame, dass ein anderer Container (Angreifer) problemlos das externe Netzwerk anpingt (Docker0 übersetzt die Docker-IP korrekt in die Host-IP). Bild von beiden Wiresharks, unten.

Bild von beiden Wiresharks

Habe iptables geprüft und diese Regel (im Bild unten ausgewählt) übersetzt meine Docker-IP-Adresse in eine Host-IP-Adresse, aber nach dem Angriff funktioniert diese Regel nicht (Pakete werden nach dem ARP-Spoofing-Angriff nicht erhöht). Ich habe versucht, einige zusätzliche iptables-Regeln hinzuzufügen, aber ohne Wirkung. Ich bin kein iptables-Meister, also wenn jemand andere Ideen hat, was auch geprüft werden sollte, gebt mir einen Hinweis.

Bildbeschreibung hier eingeben

Vielleicht kann mir jemand erklären oder mir zusätzliche Quellen nennen, wie genau Docker seine IP-Adresse in die Host-IP-Adresse im Bridge-Netzwerk übersetzt und was ich tun kann, um nach einem ARP-Spoofing-Angriff die korrekte Übersetzung wiederherzustellen. Jeder Ratschlag ist willkommen.

Antwort1

  • Wenn Docker installiert ist, wird eine Netzwerkschnittstelle mit dem Namen docker0erstellt, um die einzelnen Container zu verbinden.
  • Wenn Docker einen Container erstellt, erhält er standardmäßig eine virtuelle Netzwerkschnittstelle, deren Name mit beginnt veth. Anschließend leitet Docker den Datenverkehr der Host-Netzwerkschnittstelle über iptables-Regeln an die virtuelle Netzwerkschnittstelle weiter.
  • Wenn Sie den Container mit dem Befehl erstellen docker run --network=host ..., verwendet der Container die Netzwerkschnittstelle des Hosts. Zu diesem Zeitpunkt ist die IP-Adresse des Containers dieselbe wie die des Hosts.

verwandte Informationen