Zurück zum Blog

Portweiterleitung mit Iptables unter Linux: Eine Anleitung

Portweiterleitung mit Iptables unter Linux: Eine Anleitung

Portweiterleitung, auch als Port-Mapping bezeichnet, ist eine Methode, mit der Remote-Geräte eine Verbindung zu einem bestimmten Dienst in Ihrem privaten lokalen Netzwerk (LAN) herstellen können. Wie der Name schon sagt, beinhaltet der Prozess das Weiterleiten von Anfragen für einen bestimmten Port an einen anderen Port oder ein anderes Netzwerk. Es ändert das Ziel des Pakets während der Übertragung und wird als eine Art von Netzwerkadressübersetzung (NAT)-Operation betrachtet.

Die Aktivierung der Portweiterleitung ermöglicht es Geräten oder Hosts, die nicht mit dem internen Netzwerk verbunden sind, aufeinander zuzugreifen, was andernfalls bei Deaktivierung eingeschränkt ist. Sie können die Vorteile der Portweiterleitung nutzen, um Ziel-Websites zu blockieren, die Sicherheit zu erhöhen und nach Belieben einen Umweg um die NAT-Firewall einzurichten.

In diesem Tutorial werden wir Sie durch die Schritte zur Weiterleitung von Ports mit iptables unter Linux führen.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie:

Host-Details

Zuerst müssen wir die Details der Schnittstellen und Adressen der aktiven Server kennen. Lassen Sie uns die Netzwerkschnittstellen unseres Systems überprüfen:

Sie sehen die Ausgabe:

Hier zeigt die hervorgehobene Ausgabe zwei Schnittstellen, die erste eth0 zugewiesen an die Adresse 192.51.100.45, und die zweite eth1 zugewiesen an die Adresse 192.168.1.5. Von diesen beiden Schnittstellen ist eine öffentlich und die andere privat. Wir werden einen Befehl ausführen, um zwischen den beiden zu unterscheiden und die öffentliche Schnittstelle zu ermitteln, die mit Ihrem Standard-Gateway verbunden ist. Zur Unterscheidung geben Sie Folgendes ein:

Sie sehen die Ausgabe:

Dummy-Daten für das Tutorial

Wir werden in diesem Tutorial Dummy-Adressen und Schnittstellenzuweisungen verwenden. Es steht Ihnen frei, diese Daten zu verwenden oder nach Belieben zu ersetzen.

Netzwerkdetails des Webservers:

  • Öffentliche IP-Adresse: 203.0.113.2

  • Private IP-Adresse: 192.0.2.2

  • Öffentliche Schnittstelle: eth0

  • Private Schnittstelle: eth1

Netzwerkdetails der Firewall:

  • Öffentliche IP-Adresse: 203.0.113.15

  • Private IP-Adresse: 192.0.2.15

  • Öffentliche Schnittstelle: eth0

  • Private Schnittstelle: eth1

Webserver-Einrichtung

Beginnen wir mit unserem Webserver-Host. Melden Sie sich zuerst mit Ihrem sudo Benutzer an.

Nginx installieren

Zuerst werden wir Nginx installieren auf unserem Webserver-Host installieren und so einschränken, dass er nur auf seiner privaten Schnittstelle lauscht. Dadurch wird sichergestellt, dass unser Webserver nur dann verfügbar ist, wenn wir die Portweiterleitung korrekt eingerichtet haben.

Aktualisieren Sie als Nächstes den lokalen Paket-Cache und verwenden Sie apt, um Nginx herunterzuladen und zu installieren:

Einschränkungen hinzufügen

Sobald wir Nginx auf unserem Webserver-Host installiert haben, werden wir ihn sperren, um sicherzustellen, dass er nur Eingaben von privaten Schnittstellen und von nirgendwo sonst akzeptiert. Dies stellt auch sicher, dass unsere Webserver nur aktiv sind, wenn die Portweiterleitung korrekt eingerichtet ist.

Um Einschränkungen hinzuzufügen, öffnen Sie die Standard-Serverblock-Konfigurationsdatei /etc/nginx/sites-enabled/default in einem beliebigen Texteditor Ihrer Wahl (hier verwenden wir den nano-Texteditor) und geben Sie Folgendes ein:

In der Ausgabe sehen Sie, dass die listen-Direktive zweimal erscheint:

Port Forwarding Nginx Default File

In diesem Tutorial verwenden wir die erste Direktive, um die IPv4-Weiterleitung zu demonstrieren. Die zweite, die für IPv6 konfiguriert ist, kann entfernt werden. Fügen Sie die private IP-Adresse Ihres Webservers mit einem Doppelpunkt direkt vor der 80 hinzu, um Nginx mitzuteilen, dass Eingaben nur über die private Schnittstelle entgegengenommen werden sollen. Bearbeiten Sie als Nächstes die Direktive:

Port Forwarding Nginx Edited Default File

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Bevor Sie fortfahren, stellen Sie sicher, dass keine Syntaxfehler vorliegen. Lassen Sie uns die Datei testen:

Nginx T

Wenn kein Fehler angezeigt wird, können Sie Nginx neu starten und die neue Konfiguration aktivieren:

Überprüfung der Netzwerkeinschränkung

Lassen Sie uns überprüfen, wie viel Zugriff wir auf unseren Webserver haben. Versuchen Sie, über die private Schnittstelle auf den Webserver zuzugreifen, indem Sie den Befehl curl verwenden:

Sie sehen die Ausgabe:

Port Forwarding Nginx Output1

Wenn wir versuchen, die öffentliche Schnittstelle zu verwenden, können wir keine Verbindung herstellen:

Das ist genau das, was wir erwartet haben.

Konfigurieren Sie die Firewall für die Weiterleitung von Port 80

Fahren wir mit der Implementierung der Portweiterleitung auf unserem Firewall-Rechner fort.

Weiterleitung im Kernel aktivieren

Standardmäßig ist die Portweiterleitung bei den meisten Systemen DEAKTIVIERT. Wir werden Änderungen vornehmen, um die Portweiterleitung durch einige Bearbeitungen zu AKTIVIEREN. Es gibt auch eine Option, die Portweiterleitung dauerhaft mit sudo-Rechten zu AKTIVIEREN, wie in den folgenden Schritten gezeigt.

Um die Weiterleitung des Datenverkehrs auf Kernel-Ebene zu AKTIVIEREN, geben Sie Folgendes ein:

Um die Portweiterleitung dauerhaft zu AKTIVIEREN, bearbeiten Sie die Datei /etc/sysctl.conf. Öffnen Sie die Datei mit sudo-Rechten und geben Sie Folgendes ein:

Suchen Sie darin die Zeile, die wie folgt aussieht, und heben Sie die Auskommentierung auf:

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Verwenden Sie dann die sysctl-Befehle, um die Änderungen in den Einstellungen anzuwenden, damit sie wirksam werden:

Grundlegende Firewall-Einrichtung

Gehen Sie zuerst die Anleitung durch, wie man eine grundlegende Firewall einrichtet auf Ihrem Rechner. Nach Abschluss haben Sie:

  • Installiert iptables-persistent
  • Den Standard-Regelsatz gespeichert in /etc/iptables/rules.v4
  • Umfassende Kenntnisse über das Hinzufügen und Ändern von Regeln mit dem iptables -Befehl

Sie können sich auch ansehen, wie man iptables-Firewall-Regeln auflistet und löscht.

Hinzufügen der Weiterleitungsregeln

Wir konfigurieren unsere Firewall so, dass der Datenverkehr, der in unsere öffentliche Schnittstelle ( eth0 ) auf Port 80 an unsere private Schnittstelle ( eth1) weitergeleitet wird. Standardmäßig hat unsere grundlegende Firewall eine FORWARD-Kette, die auf DROP gesetzt ist. Das Hinzufügen von Firewall-Regeln ermöglicht die Weiterleitung von Verbindungen zu unserem Webserver. Um die Sicherheit zu erhöhen, werden wir die Firewall-Regeln so einschränken, dass sie nur Weiterleitungsanfragen zulassen.

In der FORWARD-Kette akzeptieren wir neue Verbindungen, die für Port 80 bestimmt sind, von unserer öffentlichen Schnittstelle kommen und an unsere private Schnittstelle gerichtet sind. Wir identifizieren die neuen Verbindungen mithilfe der conntrack-Erweiterung und stellen sie durch ein TCP SYN-Paket dar:

Sie müssen jeglichen nachfolgenden Datenverkehr in beide Richtungen zulassen, der sich aus der eingehenden Verbindung ergibt. Geben Sie die folgenden Befehle ein, um ESTABLISHED und RELATED-Datenverkehr zwischen unseren öffentlichen und privaten Schnittstellen zuzulassen:

Lassen Sie uns überprüfen, ob unsere Richtlinie für die FORWARD-Chain eingestellt ist auf DROP:

Bisher haben wir einige Regeln hinzugefügt, die es dem Datenverkehr zwischen unseren öffentlichen und privaten Schnittstellen ermöglichen, unsere Firewall zu passieren. Allerdings ist iptables noch nicht darüber informiert, den Datenverkehr weiterzuleiten, da die Konfiguration der Firewall-Regeln noch aussteht. In den nächsten Schritten werden wir die NAT-Regeln hinzufügen und den permanenten Regelsatz anpassen, um den Datenverkehr zu leiten.

Hinzufügen der NAT-Regeln zur Weiterleitung von Paketen

Wir werden zwei separate Operationen durchführen, damit iptables die Pakete korrekt ändert und die Kommunikation mit den Clients und dem Webserver optimiert.

DNAT ist die erste Operation, die die PREROUTING-Chain der nat -Tabelle einleitet. Die Operation ändert die Zieladresse des Pakets und ermöglicht dessen korrekte Weiterleitung beim Übergang zwischen Netzwerken. Die Clients im öffentlichen Netzwerk verbinden sich jedoch mit unserem Firewall-Server und haben keine Informationen über unsere private Netzwerktopologie. Um Informationen mit dem privaten Netzwerk auszutauschen, ändern Sie die Zieladresse jedes Pakets, damit es unseren Ziel-Webserver korrekt erreichen kann.

Es ist wichtig zu beachten, dass wir uns auf die Konfiguration der Portweiterleitung konzentrieren. Die Durchführung von NAT für jedes Paket, das die Firewall erreicht, ist nicht Teil unseres Tutorials. Wir werden Pakete am Port 80 mit der privaten IP-Adresse unseres Webservers abgleichen:

Das Paket wird korrekt an unseren Webserver weitergeleitet, wobei die ursprüngliche Adresse des Clients als Quelladresse beibehalten wird. Trotz der Versuche des Servers, die Antwort direkt an diese Adresse zu senden, wird es nicht möglich sein, eine legitime TCP-Verbindung aufzubauen.

Um ein ordnungsgemäßes Routing zu konfigurieren, ändern wir die Quelladresse des Pakets. Lassen Sie uns die Quelladresse in die private IP-Adresse unseres Firewall-Servers ändern. Nach der Änderung wird die Antwort an die Firewall zurückgesendet, die sie wiederum an den Client weiterleitet.

Um diese Funktionalität zu aktivieren, fügen Sie eine Regel zur POSTROUTING-Chain der nat -Tabelle hinzu, die direkt vor dem Senden von Paketen in das Netzwerk ausgewertet wird. Gleichen Sie dann die für unseren Webserver bestimmten Pakete nach IP-Adresse und Port ab:

Once this rule is in place, our web server should be accessible by pointing our web browser at our firewall machine’s public address:

Sie sehen die Ausgabe:

Nginx Output2

Unsere Portweiterleitungskonfiguration ist abgeschlossen.

Anpassen des permanenten Regelsatzes

Nachdem wir die Portweiterleitung eingerichtet haben, speichern wir dies in unserem permanenten Regelsatz. Wenn Sie die Kommentare im aktuellen Regelsatz behalten möchten, verwenden Sie den iptables-persistent -Dienst, um Ihre Regeln zu speichern:

Sie können sie auch öffnen und manuell bearbeiten, um die Kommentare in Ihrer Datei zu behalten:

Konfigurieren Sie als Nächstes die filter-Tabelle und die nat-Tabelle, um die FORWARD-Chain-Regeln bzw. ROUTING-Regeln hinzuzufügen. Das Anpassen der nat-Tabelle ermöglicht es uns, PREROUTING- und POSTROUTING -Regeln hinzuzufügen, wie im folgenden Beispiel gezeigt:

Nachdem Sie die obigen Werte hinzugefügt haben, speichern und schließen Sie die Datei. Geben Sie als Nächstes den folgenden Befehl ein, um die Syntax Ihrer Regeln zu testen:

Wenn Sie keine Fehler sehen, laden Sie den Regelsatz:

Lassen Sie uns überprüfen, ob unser Webserver weiterhin über die öffentliche IP-Adresse Ihrer Firewall erreichbar ist:

Fazit

Am Ende dieses Tutorials sollten Sie mit der Weiterleitung von Ports auf einem Linux-Server mit iptables vertraut sein. Sie können Portweiterleitungsfunktionen nutzen, um die Topologie Ihres privaten Netzwerks zu verschle Verschleierung, während Sie gleichzeitig den Dienstverkehr so optimieren, dass er ungehindert durch Ihren Gateway-Firewall-Rechner fließen kann.

Da der Prozess explizit von Ihrer Netzwerksicherheit und den verwendeten Ports abhängt, ist er sicher. Es besteht jedoch die Möglichkeit eines Risikos, wenn Sie keine Sicherheits-Firewall oder VPN-Sicherheit in Ihrem Netzwerk haben. Daher ist es ratsam, die Firewall wie in diesem Tutorial beschrieben zu konfigurieren. Wir hoffen, dass diese Anleitung Ihnen hilft, im Internet sicher zu bleiben, wenn Sie Ihr privates Netzwerk nutzen.

Um weitere Firewall-Lösungen zu erkunden, die Sie auf Ihrem System implementieren können, finden Sie hier Ressourcen aus unserem Blog:

Viel Spaß beim Computing!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.