Port-Forwarding mit iptables

Will man einen ein Port-Forwarding einrichten, dass z.B. 192.168.1.100:80 nach 172.20.1.20:80 umgeleitet wird sind drei Schritte nötig.

Inhalt

IP-Forwarding einrichten

echo 1 > /proc/sys/net/ipv4/ip_forward

In der NAT Tabelle ein DNAT und SNAT erstellen

*nat
-A PREROUTING  -i eth0  -p tcp -m multiport --dports 80 -j DNAT --to-destination 172.20.1.20
-A POSTROUTING -o eth0  -p tcp -m multiport --dports 80 -j SNAT --to-source      192.168.1.100
COMMIT

[stextbox id=“warning“ caption=“Achtung“]
Bei dieser Form des Port-Forwardings sieht der Server auf den die Afrage weiter geleitet wurde, die IP Adresse des „Weiterleiters“ und nicht die ursprüngliche IP Adresse des Aufrufers!
Ruft z.B. eine Person mit der (öffentlichen) IP Adresse: 1.2.3.4 die Seite: http://192.168.1.100/ auf, so ist im log des Webservers folgendes zu sehen:

192.168.1.100 - - [01/Jan/1970:00:00:00 +0200] "GET / HTTP/1.1" 200 762 "-" "Mozilla/5.0"

Anstelle von 1.2.3.4 sieht der Webserver also nur: 192.168.1.100, weil die Anfrage ja von diesem Server an ihn weiter geleitet wurde.

In diesem Beispiel ist das kein grosses Problem, wenn man aber z.B. Mail-Anfragen so weiter leitet, könnte es sein, dass die IP dem weitergeleiteten Mailserver „vertraut“ vorkommt und er auf eine SMTP-Authentifizierung verzichtet – Damit schafft man quasi ein „Open Relay“!
Beim Forwarden sollte man also je nach Anwendung sehr vorsichtig sein.

Will man erreichen, dass der weitergeleitete Server die „Original IP“ sieht, muss dieser die IP des weiterleitenden Servers als „default gateway“ eingetragen haben.
So müsste in diesem Beispiel der Server mit der IP: „172.20.1.20“ als default gateway/route die IP: „192.168.1.100“ eingetragen haben. Dann (und nur dann!) kann man die SNAT Anweisung weg lassen. So sieht dann der weitergeleitete Server die Original IP, sendet die Antwort über sein default gateway wieder an den weiterleitenden Server und dieser zurück zum Client.
[/stextbox]

In der FILTER Tabelle Forwarding erlauben

*filter
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -p tcp -m state --state NEW -m multiport --dports 80 -j ACCEPT
COMMIT

Quellen

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert