Webserver hinter NAT: So hören Sie auf öffentliche IP-Adressen

Webserver hinter NAT: So hören Sie auf öffentliche IP-Adressen

Ich habe einen Debian-Webserver (nginx), der hinter einer Firewall mit NAT läuft. Der Webserver hostet mehrere Sites, die SSL und ihre eigene IP-Adresse benötigen. Ich möchte, dass die SSL-Sites nur auf ihre spezifische IP-Adresse hören und die gemeinsam genutzten Sites nur auf die gemeinsam genutzte IP.

Momentan höre ich auf ein Platzhalterzeichen * für alle Domänen, was, wie ich annehme, bedeutet, dass es auf eine einzelne LAN-Adresse hört und Site-Inhalte basierend auf dem Hostnamen und nicht auf der IP-Adresse bereitstellt. Ich möchte dies korrigieren.

Was ist die richtige Vorgehensweise? Soll für jede IP-Adresse ein 1:1-NAT erstellt und die LAN-IPs zur abzuhörenden Netzwerkschnittstelle hinzugefügt werden, um dann die LAN-IPs bestimmten Domänen zuzuweisen? Oder gibt es einen besseren Weg? Gibt es eine Möglichkeit, die öffentliche IP weiterzugeben und darauf basierend Maßnahmen zu ergreifen? Danke.

Antwort1

Nein, Sie können die ursprüngliche Ziel-IP-Adresse nach der Durchführung von NAT nicht weitergeben, zumindest nicht direkt.

Ich verwende 192.0.2.0/24 als Ihren externen IP-Block und 198.51.100.0/24 als Ihren internen (siehe RFC5737).

Sie könnten beispielsweise Folgendes tun:

  • NATen Sie die Zielports jeder externen IP auf einen anderen Satz von Ports der internen IP. Beispiel: NAT 192.0.2.1:80 und 192.0.2.1:443 auf 198.51.100.1:80 und 198.51.100.1:443 und dann NAT 192.0.2.2:80 und 192.0.2.2:443 auf 198.51.100.1:81 und 198.51.100.1:444. Konfigurieren Sie den Webserver so, dass er auf den differenzierten Ports auf die entsprechenden Dienste wartet. Wählen Sie unbedingt Ports, die nicht für andere Zwecke verwendet werden, und überprüfen Sie Ihre Firewall-Einstellungen.
  • Weisen Sie dem Webserver zusätzliche interne IPs zu. Weisen Sie dem Webserver beispielsweise 198.51.100.1 und 198.51.100.2 zu. NATen Sie die entsprechenden externen IP/Port-Paare an die entsprechenden internen IP/Port-Paare (z. B. 192.0.2.1 an 198.51.100.1 und 192.0.2.2 an 198.51.100.2). Weisen Sie nginx an, die entsprechenden Dienste an die entsprechenden internen IPs zu binden.

Wenn Sie sich für die letztere Lösung entscheiden, ist Ihre Umgebung einfacher und standardkonformer, da Sie nicht mit ungewöhnlichen Portnummern und Portübersetzungen zu tun haben, Sie müssen jedoch jedem Webserver mehrere interne IPs zuweisen (ich nehme an, Sie haben nur einen). Wenn Sie die letztere Lösung verwenden, können Sie außerdem 1:1 NAT verwenden.

Das heißt, wenn Sie überhaupt keinen Grund haben, den Webserver hinter ein NAT zu stellen (NAT ist keine Firewall), hören Sie einfach auf den externen IPs (dazu wäre auch eine Änderung der Topologie erforderlich).

Antwort2

Es klingt, als ob Sie für jede Site eine andere öffentliche IP-Adresse wünschen. Das bedeutet, dass die Firewall die verschiedenen öffentlichen IP-Adressen präsentieren muss. Die Firewall kann dann die Anfragen an verschiedene IP-Adressen an den Nginx-Server weiterleiten oder diese Anfragen an verschiedene Ports derselben IP-Adresse weiterleiten. Sie können dann den Nginx-Server entsprechend antworten lassen.

Wie Sie das genau konfigurieren, hängt von Ihrer Firewall ab. Mit iptables könnten Sie beispielsweise Folgendes in einem Skript tun:

KINCAID=192.168.1.112
EXTIPJMN=50.60.70.80
iptables -t nat -A PREROUTING -d $EXTIPJMN -p tcp -i $EXT --dport 8081 -j DNAT --to-destination $KINCAID:8080

Dadurch werden Anfragen, die über die IP-Adresse EXTIPJMN (50.60.70.80) und Port 8081 eingehen, an Ihren internen Server mit der IP-Adresse KINCAID (192.168.1.112) und Port 8080 weitergeleitet.

Es ist möglich, verschiedene Sites von derselben IP-Adresse aus zu bedienen, sogar über https. Dies wird von den meisten, aber nicht allen modernen Clients unterstützt.

verwandte Informationen