SNAT mit iptables

Bisher sprachen wir allgemeine Grundsätze NAT, NAT-Typen, und was jede Art von NAT nicht.
Netfilter / iptables kann verwendet werden, die NAT durchführen in einer der Wege, die wir diskutiert. Tatsächlich gibt es viele Dinge, die Sie mit iptables in diesem Bereich tun können, und wir werden versuchen, zur Deckung der so viel wie möglich in diesem Artikel. Bevor wir dort ankommen, sehen wir, was müssen wir in der Lage, erfolgreich NAT auf Linux ausführen.

Einrichten des Kernels

In der Regel kommt jeder Linux-Distribution mit Kernel mit Netfilter-Unterstützung kompiliert, iptables-Tool, und alle Module, für die Durchführung von Network Address Translation benötigt.
Ein sehr gutes HowTo für die Erstellung der Linux-Kernel 2.4 und 2.6 wird von Kwan Lowe geschrieben und können auf http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html gefunden werden
Beim Kompilieren eines neuen Kernels oder die Kompilierung des Kernels, die Sie haben, müssen Sie Netfilter = y, um iptables zu verwenden. In der 2.6-Kernel, ist diese Option in der Regel finden unter Device Drivers | Networking support | Networking support (NET [= y]) | Networking options, Aber es hängt wirklich von der Kernel-Version.
Zum Beispiel, im Kernel 2.6.14, ist diese Option zu finden unter Networking | Netzwerk-Optionen.
Wenn Sie make menuconfig oder make xconfig zur Konfiguration Ihres Kernel zu kompilieren, wählen Sie Networking | Networking options | Network packet filtering (replaces ipchains) | IP: Netfilter Configuration.
In der IP: Netfilter Configuration Bereich finden Sie die Optionen für NAT benötigt wie folgt:
IP_NF_CONNTRACK oder Connection Tracking (für masq / NAT erforderlich) Aufzeichnungen über die IP-Pakete, die durch das Gerät geleitet, um sie passieren korrekt an den NAT-Endpunkte, wenn die Anträge aus diesen werden beantwortet. Dies ist für NAT von entscheidender Bedeutung. Wenn Sie sagen, Nein Hier finden Sie nicht in der Lage, NAT durchführen.

Das Netfilter NAT-Tabelle

Die NAT-Tabelle enthält drei-Ketten PREROUTING, POSTROUTING und OUTPUT. Jede Kette kann Regeln, die der Reihe nach, bis eine der Regeln geprüft werden, enthalten ein Spiele-Paket, das gleiche wie für die Ketten in der Netfilter-Tabelle. Diese Ketten können durch Eingabe des Befehls iptables betrachtet werden-t nat-L.
die Module und iptable_nat ip_conntrack bei der Ausstellung alle Befehle mit iptables-t nat, so ist es nicht erforderlich, um Linux-Dienstprogramme für insmod oder modprobe für NAT zu arbeiten.
Die OUTPUT-Kette wird nicht vollständig unterstützt, so werden wir zu ignorieren, dass für jetzt.
Die Ketten PREROUTING und POSTROUTING aussagekräftige Namen. Die PREROUTING-Kette wird durch den Kernel, bevor eine Routing-Entscheidung analysiert wird. Deshalb, was wir in der PREROUTING-Kette zu tun ist, um die Adresse des Ziel-IP ändern und dann lassen Sie es um die Routing-Verfahren, um das Ziel, dass wir gerade geändert (DNAT) zu finden.

SNAT mit iptables

SNAT eine der am häufigsten verwendeten Arten von NAT mit iptables, weil der Topologie verwendet wird.
Mal sehen, zum Beispiel das folgende Szenario:
Netzwerk 192.168.1.0/24 ist in unserem Büro. Wir verfügen über eine Ethernet-Verbindung aus unserem Provider, der uns abgetretenen 1.2.3.1/30 die IP-Adresse und das Default Gateway 1.2.3.2.
Alle Computer im Netzwerk 192.168.1.0/24 haben die Standard-Gateway auf 192.168.1.1 gesetzt.
Unsere Linux-Router verfügt über zwei Ethernet-Schnittstellen:

  • Eth0 mit der IP-Adresse 192.168.1.1 Netzmaske 255.255.255.0 und ist zu einem Wechsel, dass andere Geräte im Netzwerk verbindet 192.168.1.0/24 verbunden.
  • Eth1 mit der IP-Adresse 1.2.3.1 und Netzmaske 255.255.255.252, ist der Provider CPE (Customer Premises Equipment) verbunden, die ein DSL-Modem, Kabelmodem-, Medien-Konverter, etc. werden können
  

Wir können bis SNAT, so dass alle Geräte im Netzwerk 192.168.1.0/24 auf das Internet zugreifen und nur eine Regel:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J SNAT - to 1.2.3.1

Dieser Befehl hat die gleiche Wirkung wie den folgenden Befehl ein, die wir verwenden würde, wenn die IP-Adresse von eth1 dynamisch zugewiesen wurden, oder wenn wir früher eine DFÜ-Modem statt einer Ethernet-Karte:


iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J MASQUERADE

Nehmen wir an unserem Provider filtert alle Ports höher als 1024. In diesem Fall müssen wir den Quell-Port sowie zu ändern, und nicht nur die Quell-IP-Adresse. Dies kann dadurch erreicht werden:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - to 1.2.3.1:1-1024

Der Laptop-Benutzer in der vorherigen Abbildung zu sehen ist ein IRC-Fan und er gibt uns einen Anruf sagte, er kann keine Verbindung zu IRC-Netzen. Dies bedeutet, dass die ip_conntrack Modul ein wenig Hilfe braucht, und wir können es ihm zu geben, indem Sie die ip_conntrack_irc Modul im Kernel. Außerdem möchten wir den Benutzern machen erfolgreichen FTP-Verbindungen, und so wollen wir die ip_conntrack_ftp Modul sowie hinzuzufügen.

ip_conntrack_irc # modprobe oder insmod ip_conntrack_irc
ip_conntrack_ftp # modprobe oder insmod ip_conntrack_ftp

Nach ein paar Wochen hat der Laptop-Nutzer anderen Nutzern im Netzwerk 192.168.1.0/24, wie wunderbar das IRC davon überzeugt ist, so haben wir etwa 20-30 Benutzer eine Verbindung zu den gleichen IRC-Netzwerk. Jetzt haben sie angefangen, sich zu beklagen, wie schwierig es ist, auf dem IRC-Netzwerk anzuschließen, weil das IRC-Netzwerk ermöglicht nur ein paar Verbindungen von der gleichen IP-Adresse. Wir rechnen, dass 32 IP-Adressen sind genug für sie, so nennen wir die Anbieter zu beauftragen uns ein / 27 öffentliche IP-Subnetz. Für ein paar Dollar extra, weisen sie uns 1.2.4.0/27. Wir müssen die erste Regel zu ändern:

 

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J SNAT - to 1.2.4.0-1.2.4.32

Sie aufhören, zu jammern, aber wir wissen, dass wir nicht die öffentliche IP-Adresse unseres Linux-Router für NAT verwenden mehr. Let's hinzufügen, dass auch, so geben wir ihnen eine zusätzliche IP-Adresse:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - to 1.2.4.0-1.2.4.32 - Bis 1.2.3.1

Einer unserer Nutzer wird in einen Streit im IRC, und wird überschwemmt, während SNAT seine IP-Adresse MAPPS zu 1.2.4.15. Unser Provider's Flood-Detection-System filtert automatisch die IP-Adresse und schickt uns eine E-Mail informieren Sie uns darüber. Wir müssen aufhören SNAT zu internen Adressen auf dieser IP-Adresse anzeigen, so dass wir folgendes tun:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - Bis 1.2.4.0-1.2.4.14 - bis 1.2.4.16-1.2.4.32 - bis 1.2.3.1

Ein Mann aus dem Rechnungswesen mit der IP Adresse 192.168.1.19 beklagt, dass er nicht alle Computer mit IP-Adressen über 192.168.1.32 zugreifen können. Es ist möglich, dass er seine Netzmaske 255.255.255.227 hat sich verändert, so dass alle IP-Pakete von seinem Computer zu Computer in 192.168.1.0/24, die nicht in 192.168.1.0/27 passieren die Linux-Router und nutzen Sie SNATed. Um dieses Problem zu lösen, haben wir zwei Alternativen.
Der erste wäre nicht SNAT 192.168.1.0/24 wenn das Fahrtziel in einem anderen Rechner im 192.168.1.0/24:


iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -D! 192.168.1.0/24 -J SNAT - to 1.2.4.0-1.2.4.32 - bis 1.2.3.1

Die zweite Wahl, die wir haben, ist nur die Pakete, die aus weiter eth1 SNAT:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -O eth1 -J SNAT - to 1.2.4.0-1.2.4.32 - bis 1.2.3.1

Unser Provider verbunden anderen Standort unseres Unternehmens auf die gleiche Ausstattung, und da sind wir in der selben VLAN, wir haben nicht einen Tunnel zwischen den Routern an jedem Standort zu bauen, sondern nur Route der Netze durch die Linux-Router an dieser Stelle . Auf der anderen Seite haben wir das Netzwerk 192.168.2.0/24. Wir müssen auf die Computer in unserem Netzwerk Zugang zu Computern im Netzwerk 192.168.2.0/24 ohne SNATing ihnen lassen:

iptables-t nat-I POSTROUTING-s 192.168.1.0/24-d 192.168.2.0/24-j ACCEPT

Dieser Befehl wird die Regel vor dem NAT-Regel einfügen, so dass, wenn alle Pakete aus 192.168.1.0/24 ist für jede IP im Netzwerk 192.168.2.0/24 bestimmt sind, werden dieser Regel entsprechen und die Kette wird nicht weiter analysiert, so SNAT findet nicht statt.
Jane, unsere Sekretärin, ist berühmt für ihre guten Kaffee, aber da hat sie den IRC-Fieber, sie ist nicht mehr etwas zu tun. Der Manager ist über diese böse, aber sie will nicht Jane Feuer, weil sie zu ihrem berühmten Kaffee abhängig ist, so kommt sie zu uns bitten, etwas dagegen zu tun. Es gibt viele Dinge, die wir in dieser Sache zu tun, zum Beispiel Drop-Pakete von Jane (192.168.1.31), wenn Sie versuchen zum Zugriff auf Ports 6666 bis 6669 in der POSTROUTING-Kette:

iptables-t nat-I POSTROUTING-s 192.168.1.31 -P tcp - dport 6666:6669 -J DROP

Wir möchten an den Manager, was Jane machen darf fragen. Zum Beispiel, wenn der Manager will Jane nur Web-Zugriff zulassen, können wir folgendes tun:

iptables-t nat-I POSTROUTING-s 192.168.1.31 -P tcp - dport! 80 -J DROP

Diese Regel wird nicht SNAT Jane's IP-Adresse bei dem Versuch, etwas anderes als Port 80 TCP-Zugriff, aber es wird SNAT ihre IP-Adresse beim Zugriff auf alle UDP-Dienste, da UDP-Pakete, die nicht der Regel entsprechen, so sie in der Lage sein wird, alle DNS-Server zugreifen außerhalb unseres Netzwerks.

DNAT mit iptables

Wir werden weiterhin mit dem bisherigen Szenario für DNAT auch. Eines Tages, fordert der Manager uns sagen, sie braucht, um ihren Computer von zu Hause aus zugreifen können. Natürlich können sie das nicht tun, weil ihre private IP-Adresse 192.168.1.50. Wir entscheiden uns für eine der öffentlichen IP-Adressen, die wir für ihre Büro-Rechner haben, zugeteilt werden, aber wenn man ein Alias für eth0 für die zu schaffen, würden wir verlieren nicht nur einige IP-Adressen, aber sie wird auch nicht in der gleichen sein Netzwerk wie die anderen. Die beste Lösung ist es, anzeigen eine öffentliche IP-Adresse (sagen wir 1.2.4.1) an private IP ihrem Büro-Computer-Adresse (192.168.1.50). Dies ist, natürlich, DNAT:

iptables-t nat-A PREROUTING-d 1.2.4.1 --j DNAT - to 192.168.1.50

Also das nächste, was zu tun ist, sie anzurufen und ihm sagen, daß, wenn sie zu ihrem Büro-Rechner von zu Hause in Verbindung zu treten versucht, muß sie eine Verbindung zu 1.2.4.1.
Unsere Intranet-Server hat die IP-Adresse 192.168.1.100. Ein Mann aus der Abteilung Finanzen über einen Breitbandanschluss und fragt uns, ob er den Intranet-Server von zu Hause aus zugreifen können. Er gibt uns seine öffentliche IP-Adresse als 1.2.5.17. Wir sagen ihm, dass er aus seiner Heimat sollte die IP-Adresse 1.2.4.2 in seinem Web-Browser zu versuchen, und wir ausführen:

iptables-t nat-A PREROUTING-s 1.2.5.17-d 1.2.4.2 --p tcp - dport 80-j DNAT - to 192.168.1.100

Wir denken, wir möchten auf den Intranet-Server von überall SSH. Es wäre eine sehr kluge Idee, eine IP-Adresse mit dem Intranet-Server anzeigen, wie es für unser Unternehmen von entscheidender Bedeutung, und wenn ein SSH-Fehler entdeckt wird, wir nicht wollen, dass Server gehackt werden. Eine gute Idee wäre, eine hohe Port-Nummer, den SSH-Port auf dem Intranet-Server anzeigen (dies ist PAT oder NAPT).

iptables-t nat-A PREROUTING-d 1.2.4.2 -P tcp - dport 65521-j DNAT - to 192.168.1.100:22

Auf diese Weise, wenn wir nicht im Büro, und wir wollen in den Intranet-Server, SSH, öffnen wir eine SSH-Verbindung zu 1.2.4.2 Port 65521.
Nach einer Weile nehmen wir an, installiert einen Web-Server mit der IP-Adresse 192.168.1.200. Der Webserver ist www.mycompany.whatever und Punkte in DNS 1.2.4.5. Um den Zugang für die Außenwelt, führen wir die folgenden:

iptables-t nat-A PREROUTING-d 1.2.4.5-p tcp - dport 80-j DNAT - to 192.168.1.200

Transparent Proxy

Transparent Proxy ist eine Möglichkeit, Benutzer dazu zu zwingen einen Proxy-Server, auch wenn ihre Browser so konfiguriert sind, nicht zu verwenden. Wahrscheinlich wissen Sie über die Vorteile der Verwendung eines Proxy-Server spart Bandbreite für Seiten aus dem Cache und Zutrittskontrolle Umsetzung (zB leugnen, Downloads von Dateien, die gefährlichen Erweiterungen haben).
Wir können transparenter Proxy für alle oder einige Benutzer ausführen, um sie von den Proxy-Umgehung zu verhindern, wann immer sie wollen. Dies ist besonders gut für Computer der Kinder zu verweigern ihnen den Zugang zu sexuell expliziten Websites, zum Beispiel.
Auf unseren Linux-Router, installierten wir ein Squid Proxy-Server herstellen, um einige Inhalte aus dem Web. Außerdem möchten wir den Zugang zu Sex-Sites oder bösartiger Downloads für Benutzer verweigern. Die Nutzer sind nicht sehr über die Verwendung von unseren Proxy-Server zufrieden, und entfernen Sie sie in der Regel von ihrem Browser-Konfiguration. Wir können sie zu zwingen, den Proxy-Server trotzdem zu verwenden. Wenn der Proxy-Server lauscht auf Port 3128 werden wir folgendes tun:

iptables-t nat-A PREROUTING-s 192.168.1.0/24 -P tcp - dport 80-j REDIRECT - to-port 3128

Wenn wir an den Manager zulassen möchten (wer hat die IP-Adresse 192.168.1.50) auf den Proxy-Server zu umgehen, tun wir dies wie folgt aus:

iptables-t nat-I PREROUTING-s 192.168.1.50 --p tcp - dport 80-j ACCEPT

Diese Regel wird in der PREROUTING-Kette zugeordnet werden, und sie wird in der POSTROUTING-Kette SNATed werden.

Ein Artikel eingereicht von Philip A Clare


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "SNAT mit iptables" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 411 users browsing the articles directory