[LINUX] Versuchen Sie, iptablse zu lernen, portieren Sie vorwärts

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.

image.png

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.

  1. Schreiben Sie die Ziel-IP in der Abbildung unter "nat PREROUTING" auf 127.0.0.1 und den Ziel-Port auf 4000 um.
  1. Lassen Sie das Paket mit "Filter INPUT" in der Abbildung passieren

Überprüfung

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

Festlegen der Standardrichtlinie

Verwenden Sie die White-List-Methode.

 iptables -P INPUT DROP
 iptables -P FORWARD DROP

Ermöglichen Sie den Zugriff auf den WEB-Server auf dem Notebook-PC

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

Übertragen Sie den http-Zugriff vom Smartphone auf den Server auf dem Notebook-PC

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.

Überprüfen Sie die Einstellungen

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 

Aufräumen

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

Zusammenfassung

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

Versuchen Sie, iptablse zu lernen, portieren Sie vorwärts
UDP-Portweiterleitung
Über WOL Port Forward
Versuchen Sie, Daten zu erfassen, während Sie mit anaconda eine Portweiterleitung an RDS durchführen.
Versuchen Sie, iptables zu lernen, bis Sie im Internet surfen können
Probieren Sie Caffe und Pylearn2 zusammen aus
Versuchen Sie es mit pytest-Overview und Samples-