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)

Prinzip Iptables - Tables and Chains

Prinzip Iptables - Tables and Chains

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!