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 1234
wird auf 4321
den 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 OUTPUT
Regel hinzufügen, die PREROUTING
von 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 1234
etwas zu schreiben, um zu überprüfen, ob der Server die Umleitung korrekt durchführt.
Vergessen Sie nicht, die iptables
Konfiguration zu speichern!