Portweiterleitung
Für NAT, Packetfilter, Portweiterleitungen und Packet-Manipulationen aller Art ist netfilter zuständig. Netfilter ist eine Komponente des Linux Kernels.
Konfiguriert wird Netfilter grundsätzlich und ausschließlich mit Hilfe der dafür vorgesehenen user space-Programme. Sie könne nur mit root-Rechten ausgeführt werden:
iptables: ausschließlich für IPv4
ip6tables: ausschließlich für IPv6
ebtables:
arptables:
nftables: soll eines Tages alle obigen Programme ersetzen
Konfiguration
Die Syntax der obigen Kommandozeilenprogramme (außer nftables) sieht wie folgt aus:
Portweiterleitung
Zuerst einmal sollte man Sicherstellen, dass die Pakete durchgelassen werden:
Die Pakete DNAT-en, damit sie weitergeleitet (geroutet) werden:
Script
Um obige Zeilen nicht nach jedem Neustart eintippen zu müssen, bietet es sich an, sie in ein Shell Skript zu packen bzw. sie in das vorhandene Shell Skript für die Netfilter-Konfiguration einzubauen. Doch diesmal mit Variablen:
1 #!/bin/bash
2
3 IPT=/sbin/iptables
4 IF_DSL=pppoe_dsl
5 IP_USER_1=192.168.142.42
6 PORT_1=12345
7
8 $IPT -A FORWARD -j ACCEPT -p udp --dport $PORT_1 --sport 1024:65535 -d $IP_USER_1 -m state --state NEW
9 $IPT -A FORWARD -j ACCEPT -p tcp --dport $PORT_1 --sport 1024:65535 -d $IP_USER_1 -m state --state NEW
10
11 $IPT -t nat -A PREROUTING -i $IF_DSL -p udp --dport $PORT_1 -j DNAT --to-destination ${IP_USER_1}:${PORT_1}
12 $IPT -t nat -A PREROUTING -i $IF_DSL -p tcp --dport $PORT_1 -j DNAT --to-destination ${IP_USER_1}:${PORT_1}
Allerdings ist es dringend Angeraten, lediglich ein Shell-Skript für die Komplette Netfilter-Konfiguration anzulegen, da man ansonsten leicht Fehler macht, denn die Reihenfolge, in welcher iptables aufgerufen wird, ist ausschlaggebend.
Anmerkung: Wenn man zur Bearbeitung seiner Firewall-Shell-Skripte vim benutzt, so sollte man sich dafür unbedingt iptables-save/restore syntax highlighter installieren, die Dinge werden so übersichtlicher und es Hilft Schreibfehler zu vermeiden.
Source NAT / Masquerading
Vor allem bei TCP-Verbindungen ist es für den Client wichtig, dass die Antworten von dem Server kommen, an den auch die Anfrage gestellt wurde. Fungiert das System, auf dem die Portweiterleitung eingerichtet wird, also nicht auch gleichzeitig als Gateway für den Zielserver (inkl. eingerichtetem Masquerading), muss man auch die Quelladresse umschreiben. Dafür gibt es 2 Möglichkeiten: SNAT oder MASQUERADING. Im Beispiel wird angenommen, dass das System die Adresse 192.168.142.100 in dem Netz besitzt, und selbiges Netz am Interface eth0 anliegt.
SNAT
Bei SNAT wird genau für diesen Anwendungszweck eine Umschreibung vorgenommen:
MASQUERADING
Masquerading wird üblicherweise für das gesamte Netz gemacht, das heißt jede Verbindung wird maskiert:
Portforwarding auf link-lokale Adressen (127.0.0.0/8)
Das Weiterleiten von Ports auf link-lokale Adressen ist erst seit Kernelversionen >= 3.6 möglich. Wer einen Distributionskern verwendet, kann diese Feature also erst ab Debian Jessie verwenden. Standardmäßig ist die Funktion deaktiviert; so kann sie aktiviert werden:
In diesem speziellen Fall ist es nicht notwendig im Kernel IP-Forwarding zu aktivieren.