Ich möchte Port Forward mit iptables ausprobieren.
Ich möchte es zur Hand haben, daher ist die Konfiguration etwas speziell, aber es ist wie folgt.
Was ich erreichen möchte, ist, wenn ich über den Browser meines Smartphones auf den Notebook-PC (192.168.0.9) zugreife. Damit soll der Server an Port 4000 antworten.
TODO
Identifizieren Sie das TODO, während Sie den Paketfluss in der folgenden Abbildung überprüfen. Referenz: Iptables Tutorial 1.2.2 Kapitel 6.1
Das GET-Anforderungspaket des Smartphone-Browsers hat eine Ziel-IP von 192.168.0.9 und einen Ziel-Port von 80 und fließt in der Abbildung aus "NETWORK". Der Server ist der "lokale Prozess" in der Abbildung.
Daher kann das Anforderungspaket den Server wie folgt erreichen.
Der Ausgangszustand ist wie folgt.
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Verwenden Sie die White-List-Methode.
iptables -P INPUT DROP
iptables -P FORWARD DROP
Die Reihenfolge von TODO ist umgekehrt, aber machen Sie den Server zuerst mit dem Browser des Notebooks zugänglich.
iptables -A INPUT -d 127.0.0.1 -p tcp --dport 4000 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -p tcp --sport 4000 -j ACCEPT
Es ist verwirrend, weil es lokal ist, aber die Einstellungen und Pakete entsprechen wie folgt:
iptables -A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
Das Obige erlaubt Pakete vom Browser zum Server
iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
Das Obige erlaubt Pakete vom Server zum Browser
NAPT (Network Address Port Translation) ist das Ziel der Anforderung vom Smartphone (192.168.0.2).
iptables -t nat -A PREROUTING -s 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
Gehen Sie wie folgt vor, um von einem anderen als dem Smartphone im LAN darauf zuzugreifen.
iptables -t nat -A PREROUTING ! -s 192.168.0.9 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
Die Ziel-IP und der Zielport werden mithilfe des DNAT-Ziels neu geschrieben. 。 。 。 。 。 Es scheint oben zu funktionieren, aber es hat nicht funktioniert.
Es scheint, dass es standardmäßig keine Verbindung zu localhost von außen herstellt. Vielleicht sollte localhost von der Außenwelt isoliert sein.
Diesmal dient es zur Überprüfung, ändern Sie also die Einstellung.
sysctl -w net.ipv4.conf.eth0.route_localnet=1
Sie können jetzt darauf zugreifen!
Hatten Sie die Frage: "Ist es nicht erforderlich, das Antwortpaket vom Server zu SNATEN?" Ich hatte es. Es ist keine Schlussfolgerung erforderlich. Wenn für DNAT und SNAT eine Einwegkonvertierung definiert ist, wird die entgegengesetzte Richtung automatisch ausgeführt.
Die endgültigen Einstellungen sind wie folgt.
root@X1-Carbon-6th:~# iptables-save
Generated by iptables-save v1.6.1 on Sat Dec 28 14:15:30 2019
*nat
:PREROUTING ACCEPT [167:28771]
:INPUT ACCEPT [10:624]
:OUTPUT ACCEPT [314:29752]
:POSTROUTING ACCEPT [314:29752]
-A PREROUTING -s 192.168.0.2/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
COMMIT
Completed on Sat Dec 28 14:15:30 2019
Generated by iptables-save v1.6.1 on Sat Dec 28 14:15:30 2019
*filter
:INPUT DROP [3377:278628]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [3560:414379]
-A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
COMMIT
Completed on Sat Dec 28 14:15:30 2019
root@X1-Carbon-6th:~# sysctl -n net.ipv4.conf.enx7cc3a186ea62.route_localnet
1
Bitte beachten Sie beim Aufräumen Folgendes.
iptables -F && iptables -F -t nat
iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT
sysctl -w net.ipv4.conf.enx7cc3a186ea62.route_localnet=0
Ich habe Port Forward in meiner Umgebung versucht. Ich habe bestätigt, dass das Paketflussdiagramm sehr gut ist und dass es ausreichend eingestellt werden kann, wenn Sie beim Betrachten darüber nachdenken.
** "Gefällt mir" Danke. **: zwinker:
Recommended Posts