IPTables Port-forwarding

tk_heaven

Cadet 3rd Year
Registriert
Apr. 2019
Beiträge
32
Guten Tag,
Ich hatte mal einen Thread gepostet dort ging es darum, wie man die IP von einem VPS Server weiterleiten kann. Dort wurde mir erzählt das ich es per Firewall einstellen muss (IPTables). Ich habe mich jetzt ausführlich zu dem Thema belesen und habe auch einige Änderung in der Firewall vorgenommen. Bloß das grundlegende Problem der Portweiterleitung bleibt.
Für die Portweiterleitung habe ich diese beiden Befehle verwendet:

iptables -A PREROUTING -t nat -i ens3 -p tcp --dport 80 -j DNAT --to 10.8.0.6:80
iptables -A FORWARD -p tcp -d 10.8.0.6 --dport 80 -j ACCEPT

Bloß wenn ich jetzt die öffentliche IP von meinem VPS Server per Port 80 zu erreichen funktioniert es nicht.
Habe ich ein Fehler in dem Code oder muss ich noch etwas anderes einstellen?
Hier eine kleine Kurzbeschreibung von dem Netzwerk :
Großer-Router( VLAN1( TP-Link Router( PC ; Server <--> VPS Server(VPN) <--> öffentliches Netz ) ) ; VLAN2 ; VLAN3 ).
Ich bedanke mich schon einmal für eure Hilfe
 
Zuletzt bearbeitet:
Du musst von Außen den Traffic auch erlauben:

iptables -A INPUT -d <deine öffentliche IP>/32 -p tcp -m tcp --dport 80 -j ACCEPT
 
  • Gefällt mir
Reaktionen: tk_heaven
d2boxSteve schrieb:
Du musst von Außen den Traffic auch erlauben:
Kann ihn trotzdem nicht erreichen.
Muss ich an dem lokalen Server auch noch etwas an der Firewall einstellen?
 
Zuletzt bearbeitet:
tk_heaven schrieb:
Kann ihn trotzdem nicht erreichen.
Muss ich an dem lokalen Server auch noch etwas an der Firewall einstellen?
Wenn dieser auch eine firewall hat, dann muss du natürlich sicherstellen dass er auf den gewünschten Ports auch Pakete von öffentlichen IP's durch lässt.
Wenn du noch nen DSL oder sonstigen NAT-Router dazwischen hast, musst du hier natürlich auch die entsprechenden Ports auf den lokalen Server weiterleiten. Ausser du hast da was mit nem VPN gebaut...
Ergänzung ()

Ich sehe gerade, deine Regel hat als Ziel eine IP aus einem privaten Adressbereich. Dann hast du wohl ein VPN dazwischen.
 
  • Gefällt mir
Reaktionen: tk_heaven
rocketworm schrieb:
Wenn dieser auch eine firewall hat, dann muss du natürlich sicherstellen dass er auf den gewünschten Ports auch Pakete von öffentlichen IP's durch lässt.
Wenn du noch nen DSL oder sonstigen NAT-Router dazwischen hast, musst du hier natürlich auch die entsprechenden Ports auf den lokalen Server weiterleiten. Ausser du hast da was mit nem VPN gebaut...
Ja ich habe einen VPN von dem lokalen Server zu dem VPS Server. Somit müsste ich eigentlich nur dem lokalen Server sagen das er die Ports weitergeben soll und dem VPS Server das wenn die öffentliche IP aufgerufen wird er das an den lokalen weitergeben soll oder?
 
Kannst du vom VPS eigentlich deinen Server 10.8.0.6 anpingen, also stimmt das Routing im Tunnel?
 
Ich vermute mal es sieht bei dir so aus:
Quell IP --> Internet --> öffentliche IP VPS:80 --> VPN IP VPS --> VPN IP lokaler Server:80

Wenn dein Forwarding auf dem VPS korrekt eingerichtet ist. (Kann man am lokalen Server z.b. mit Wireshark prüfen), dann brauchst du wahrscheinlich noch Firewallregeln auf deinem lokalen Server welche den Zugriff auf Port 80 von öffentlichen IP Adressen erlaubt.
Wenn es blöd läuft, musst du ggf noch routen. Es kann durchaus sein, dass die ankommende Anfrage nicht zurück durch den VPN Tunnel über den VPN beantwortet sind sondern, dass dein Server die Antwort zurück über deinen Lokalen Router schickt (default route).
 
Und vom ersten Post, das interface ens3, ist das auch wirklich das mit der öffentlichen IP?
Ergänzung ()

@rocketworm : genau das hat er vor. Er sitzt hinter einem fremdadministrierten Router auf den es keine Zugriff gibt. Nur so kann er seinen Webserver im Internet erreichbar machen.
Ergänzung ()

Mir fällt nochwas ein ... auf welche IP ist der Webserver konfiguriert, auf eine interne 192.168.x.y ? Der muss auf * hören, sonst antwortet er nicht durch den Tunnel, da wird er ja mit 10.8.0.6 angesprochen ...
 
d2boxSteve schrieb:
Kannst du vom VPS eigentlich deinen Server 10.8.0.6 anpingen, also stimmt das Routing im Tunnel?
Ja ich kann den 10.8.0.6 anpingen und der ens3 ist auch der interface für das öffentliche Netz
Ergänzung ()

rocketworm schrieb:
Ich vermute mal es sieht bei dir so aus:
Quell IP --> Internet --> öffentliche IP VPS:80 --> VPN IP VPS --> VPN IP lokaler Server:80

Wenn dein Forwarding auf dem VPS korrekt eingerichtet ist. (Kann man am lokalen Server z.b. mit Wireshark prüfen), dann brauchst du wahrscheinlich noch Firewallregeln auf deinem lokalen Server welche den Zugriff auf Port 80 von öffentlichen IP Adressen erlaubt.
Wenn es blöd läuft, musst du ggf noch routen. Es kann durchaus sein, dass die ankommende Anfrage nicht zurück durch den VPN Tunnel über den VPN beantwortet sind sondern, dass dein Server die Antwort zurück über deinen Lokalen Router schickt (default route).
Das Problem ist das ich auf dem Server Debian 9 installiert habe aber nur die Terminal version gibt es Wireshark auch als Terminal version oder muss ich mir die grafische Oberfläche mit installieren um das zu sehen.
 
Anstelle von wireshark nimmt man unter Linux: tcpdump
Mir -i kannst du das Interface angeben welches du abhören möchtest und -n deaktiviert Namensauflösung: tcpdump -ni ens3

Auf wleche IP's hört denn nun dein Webserver, auch auf die 10.8.0.6?
 
  • Gefällt mir
Reaktionen: rocketworm
@d2boxSteve der lokale Server hat eine Interne IP das ist eine 172. ... und dann noch die VPN IP das ist die 10.8.0.6. Und er hört zurzeit auf die lokale IP. Müsste ich Ihn aber nicht von beiden erreichen? Weil wenn ich z.B auf Windows einen Webserver starte kann ich Ihn ja trotzdem aus mehreren Netzen aufrufen. auch wenn er unterschiedliche IPs an den Interfaces hat.
Ergänzung ()

@d2boxSteve zumindest erreiche ich Ihn vom lokalen Netzwerk aufjedefall wie kann ich das prüfen ob er drauf hört?
 
Zuletzt bearbeitet:
Die INPUT-Chain hat keinerlei Auswirkungen bei Paketen, die weitergeleitet werden sollen. Diese Pakete schlagen nämlich ausschließlich in der FORWARD-Chain auf.

INPUT --> Eingehende Pakete, die im System verbleiben, also für den Host selbst bestimmt sind
FORWARD --> Eingehende Pakete, die weitergeleitet werden sollen, also zB für die VM bestimmt sind
 
Raijin schrieb:
Die INPUT-Chain hat keinerlei Auswirkungen bei Paketen, die weitergeleitet werden sollen. Diese Pakete schlagen nämlich ausschließlich in der FORWARD-Chain auf.

INPUT --> Eingehende Pakete, die im System verbleiben, also für den Host selbst bestimmt sind
FORWARD --> Eingehende Pakete, die weitergeleitet werden sollen, also zB für die VM bestimmt sind
Okay und was hat das mit der ursprünglichen Frage zutun, oder war das auf den Post von d2boxSteve gemeint?
 
Ist das ein Apache? Da musst du festlegen, auf welche IP er hört. Übrigens auch unter Windows, da ist * aber default, beim Apache nicht ...

IIS:
771825


Apache:

/etc/apache2/sites-available# cat 000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
...
<VirtualHost 127.0.0.1:80>
...
Ergänzung ()

Prüfen ... installier auf deinem VPS "lynx", das ist ein Kommandozeilenbrowser. Öffne da mittels "lynx http://10.8.0.6" deine Webseite ... wenn das schon nicht geht musst du am Webserver schaun.
 
  • Gefällt mir
Reaktionen: tk_heaven und rocketworm
tk_heaven schrieb:
Okay und was hat das mit der ursprünglichen Frage zutun, oder war das auf den Post von d2boxSteve gemeint?
Das war als Einwand zu einem Beitrag weiter oben gemeint, ich hatte nur den Kommentar vergessen.

Letztendlich musst du - wie ja schon bereits durch meine Vorredner begonnen - nun an jeder Zwischenstation prüfen ob Daten ankommen, um den Punkt zu finden, an dem sie hängenbleiben. D.h. tcpdump/wireshark am Host, also dem VPS und anschließend in der der VM. Von welcher Seite du anfängst, ist egal, weil du alle Glieder der Kette prüfen musst bis du dort angelangst wo die Pakete nicht mehr ankommen.

Übrigens: Es ist nicht wirklich zielführend, dass du nun schon 3 Threads zu dem Thema gestartet hast, um dann in jedem davon jeweils auf den Vorgänger zu verweisen. Bleibe bitte bei einem Thread sofern es um dieselbe Sache geht.
 
  • Gefällt mir
Reaktionen: tk_heaven
Also habe jetzt mit dem tcpdump den ens3 also das Interface von der öffentlichen auf Port 80 abgehört.
linux.png


Wenn ich mir das genau anschaue Schickt der Client zwar die Anfrage bekommt aber keine Antwort. Und wenn ich dann mit tcpdump auf das interne Interface schaue kommt keine Anfrage. Für mich bedeutet das doch dass irgendwas bei der Portweiterleitung falsch gelaufen ist. Wie könnte ich das im besten Fall sehen bzw. habe ich irgendwelche Schritte vergessen?

@Raijin danke das du mich drauf hingewiesen hast, werde das nächste mal dran denken.
 
Nächster Schritt, das VPN Interface (vermutlich tun0) abhören, ob da was zum Server geschickt wird oder ob Regel für Forward noch falsch ist.
 
  • Gefällt mir
Reaktionen: tk_heaven
d2boxSteve schrieb:
Nächster Schritt, das VPN Interface (vermutlich tun0) abhören, ob da was zum Server geschickt wird oder ob Regel für Forward noch falsch ist.
Das hatte ich gemacht, das meinte ich unter Internes Interface. Also es muss wahrscheinlich irgendwas Falsch sein an der Regel
 
Im Grunde muss im Tunnel das Packet so aussehen:

Quelle 10.8.0.1 (die orginalquelle muss vom Server genattet werden, weklär später warum)
Ziel 10.8.0.6

Wenn ein Paket mit der Original-Quelle am Webserver ankommt schickt er sonst das Paket beim lokalen Internet raus und nicht durch den Tunnel zurück.
Daher muss der VPS hier Source-NAT machen.
 
  • Gefällt mir
Reaktionen: tk_heaven und Raijin
Zurück
Oben