Man-in-the-Middle mit iptables

Man-in-the-Middle mit iptables

Ich möchte ein Subsystem testen, das mit anderen Subsystemen über TCP kommuniziert. Ich habe Folgendes verwendet:

"iptables -A OUTPUT -p tcp --dport "+port_number" -j DROP"

den Verkehr auf einem Port zu stoppen, damit ich über ein Skript meine eigenen Daten an das zu testende System senden konnte. Das hat wirklich gut funktioniert.

Ich möchte den Datenverkehr jetzt jedoch an mein Skript weiterleiten, anstatt ihn einfach zu löschen. Anschließend möchte ich die Daten in meinem Skript bearbeiten, bevor ich sie an das zu testende Subsystem weiterleite.

Kann ich das mit iptables machen? Gibt es einen besseren Ansatz?

Antwort1

Sie könnten Folgendes versuchen (eingehender Datenverkehr zum Port 1234wird auf 4321den lokalen Host umgeleitet, auf dem Ihr Skript lauschen könnte):

iptables -I INPUT -p tcp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 4321 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1234 -j REDIRECT --to-ports 4321

Wenn Sie auch von derselben Maschine aus auf den Port zugreifen möchten 1234, müssen Sie eine OUTPUTRegel hinzufügen, die PREROUTINGvon der Loopback-Schnittstelle nicht verwendet wird:

iptables -t nat -I OUTPUT -p tcp -o lo --dport 1234  -j REDIRECT --to-ports 4321

Jetzt können Sie auf dem Server versuchen, mitzuhören nc -l 4321(hier können Sie Ihr eigenes Skript verwenden). Versuchen Sie auf einem Client, nc server_host_name_or_ip 1234etwas zu schreiben, um zu überprüfen, ob der Server die Umleitung korrekt durchführt.

Vergessen Sie nicht, die iptablesKonfiguration zu speichern!

verwandte Informationen