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 |