Iptables¶
Wenn wir die folgenden klassischen Umsetzungen mit Iptables
(bei Debian 11) umsetzen wollen, dann sollten wir die Netfilter-Technik
komplett entfernen (apt purge nftables
) und dann mit dem Paket für
iptables
ersetzen.
Die folgenden Ausführungen zeigen die Umsetzung mit Iptables.
Die eigentliche Technik ist in den letzten Umsetzungen ebenfalls Netfilter:
eine im Kernel implementierte Softwareschicht - man nutzt quasi iptables-nft
Mit iptables kann man Regelsätze / Konfigurationen für verschiedene Tabellen erzeugen:
filter
nat
mangle
raw
Die Tabellen können mit Richtlinien (Policies) zum Behandeln von Paketen versehen werden und haben Ketten (chains) für die Paketvermittlungen.
Wir interessieren uns beim NAT-Routing für die
Tabelle filter (chain FORWARD) und die
Tabelle nat (chain POSTROUTING)
Wichtig
Die Analyse der Ketten bezieht sich immer auf einen einzelnen NIC und nicht auf zwei NICs für unser Routing! Die Skizze kann da durch eine „linke und rechte“ Seite in die Irre führen!
Wir arbeiten erst einmal mit einfachen manuellen Inbetriebnahmen der nötigen NAT-Routing-Regeln.
Für die folgenden Befehle bitte die richtigen Router-NICs beachten: (Beachten: hier allgemeine Konfigurationsdaten - nicht die aus dem Seminar!)
eth0 (oder auch enp0s3)
NIC für die WAN-Seite (z.B.: 192.168.3.201 / 24 ; StdGW: 192.168.3.1; DNS: 192.168.3.1)
Anm.: da wir gleich Masquerading nutzen, kann auch dynamisch – per DHCP – zugewiesen werden!
eth1 (oder auch enp0s8)
NIC für die LAN-Seite (z.B.: 172.16.0.1 / 16)
Wir müssen jetzt auf dem Router verschieden Konfigurationen für das NAT-Routing vornehmen.
Forwarding für den Linux-Kernel aktivieren - der Kernel denkt sonst gar nicht daran, Pakete zwischen den Adaptern weiterzuleiten: (siehe auch oben Netfilter Anleitungen)
echo 1 > /proc/sys/net/ipv4/ip_forward
bzw. persistent - also nachhaltig - in /etc/sysctl.conf
einstellen/konfigurieren:
Zeile: net.ipv4.ip_forward = 1
auskommentieren und Rechner neustarten
Forwarding von Paketen in table filter für beide Richtungen (LAN -> WAN und WAN -> LAN):
Anm.: Angabe von -t filter kann als Standardtabelle auch weggelassen werden!
iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state
RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
Die Einstellung -m state
bezieht sich auf die Fähigkeit der Netfilter-Kernel-Technik
mittels Modul conntrack (Connection Tracking) Pakete auf Grund Ihrer
Verbindungseigenschaften (hier: „in Beziehung“ und „etabliert“) akzeptiert werden können,
ohne dass diese weiter untersucht werden müssen (siehe: Effizienz der Firewall)!
Kommen wir jetzt zum eigentlichen NATing bzw. Masquerading für die table nat:
NATing aktivieren (hier mit dynamischer WAN-Seite: Masquerading; sonst einfaches SNAT)
Für die Anbindung eines LAN mit mehreren Hosts müssen wir jetzt noch das gewünschte NAT-Routing (Erklärung: Masquerading - Kohnle - Masquerading - Erklärung ) ermöglichen:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Anm.: das sind nur sehr einfache Grundkonfigurationen, die bei weitem nicht alle Sicherheitsaspekte abdecken. (Einblick z.B. bei Red Hat Doku Firewall )
Iptables - Scripting
Für ein sauberes Skripting sollten immer erst die Ketten geleert werden.
Löschen von Tabellen: iptables -F
bzw. iptables -F -t nat
Anm.: solange die Regeln nicht persistent sind, reicht auch ein einfacher Neustart zum Flushen!
Gefahr
Vorsicht beim Löschen der Regeln, wenn diese Regeln den Zugang zum System überhaupt ermöglichen, da ggf. sonst (Policies) alle Zugriffe auf DROP (wegwerfen) konfiguriert sind!
Übung: Umsetzung der Regeln gerne als Skript: (touch nat-routing.sh
und chmod u+x nat-routing.sh
)
#!/bin/bash
# Variablen:
IPT="$(which iptables)"
WANNIC="eth0"
LANNIC="eth1"
# besser erst einmal alle Policies auf Akzeptieren:
$IPT –P INPUT ACCEPT
$IPT –P OUTPUT ACCEPT
$IPT –P FORWARD ACCEPT
# dann Tabellen filter und nat leeren
$IPT -t filter -F
$IPT -t nat -F
# und Regeln fuer NAT-Routing definieren
$IPT -t filter -A FORWARD -i $WANNIC -o $LANNIC -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A FORWARD -i $LANNIC -o $WANNIC -j ACCEPT
$IPT -t nat -A POSTROUTING -o $WANNIC -j MASQUERADE
Tipp
iptables Regelsätze auch nach Neustarts und ohne Skriptverwaltungen mit Hilfe von iptables-persistent Paket!
Nach der Installation: apt install iptables-persistent
kann man mittels: iptables-save > /etc/iptables/rules.v4
die Regeln nachhaltig machen (persistieren)!
Anm.: Tool iptables-save
gehört zu Paket iptables und könnte auch manuell genutzt werden!