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:

Konfiguration

Die Syntax der obigen Kommandozeilenprogramme (außer nftables) sieht wie folgt aus:

Portweiterleitung

Zuerst einmal sollte man Sicherstellen, dass die Pakete durchgelassen werden:

   1 # iptables -A FORWARD -j ACCEPT -p udp --dport 12345 --sport 1024:65535 -d 192.168.142.42 -m state --state NEW
   2 # iptables -A FORWARD -j ACCEPT -p tcp --dport 12345 --sport 1024:65535 -d 192.168.142.42 -m state --state NEW
   3 

Die Pakete DNAT-en, damit sie weitergeleitet (geroutet) werden:

   1 # iptables -t nat -A PREROUTING -i pppoe_dsl -p udp --dport 12345 -j DNAT --to-destination 192.168.142.42:12345
   2 # iptables -t nat -A PREROUTING -i pppoe_dsl -p tcp --dport 12345 -j DNAT --to-destination 192.168.142.42:12345
   3 

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.