Versuch 6b: Linux Firewalls mit Netfilter

Einführung in das Linux Modul Netfilter mit vergleich der beiden Frontends iptables und nftables

1 Einführung

  • Netzwerksicherheit beginnt beim Host
  • Linux bietet mit Netfilter ein Framework zur Paketfilterung
  • Tools:
    • iptables (klassisch)
    • nftables (modern)
    • firewalld, ufw (Abstraktionen)

2 Netfilter

Das Netfilter-Projekt wurde 1998 gegründet, und im Jahr 2000 in den Linux-Kernel integriert. Es handelt sich um ein in C geschriebenes Softwaremodul unter der GPL-Lizenz. Netfilter ist ein zentraler Bestandteil des Linux-Kernels und stellt Funktionen bereit, die beim Empfangen, Weiterleiten und Senden von Netzwerkpaketen zum Einsatz kommen. Dabei bietet es eine Schnittstelle für weitere Kernelmodule wie Paketfilter, NAT oder Connection Tracking. Durch diese modulare Struktur können Pakete an verschiedenen Punkten im Netzwerkstack abgefangen, analysiert, gefiltert oder manipuliert werden – z. B. durch Tools wie iptables oder nftables, die auf Netfilter aufsetzen.


3 Netfilter Architektur

[IN] --> [PREROUTING] --> [INPUT] --> App
                |              |
              [FORWARD]       [OUTPUT] --> [POSTROUTING] --> [OUT]

Netfilter greift in verschiedenen Hooks des Linux-Netzwerkstacks:

  • PREROUTING vor dem Routing (z. B. NAT)
  • INPUT Pakete, die an das lokale System gehen
  • FORWARD Pakete, die durch das System weitergeleitet werden
  • OUTPUT Pakete, die lokal erzeugt wurden
  • POSTROUTING nach Routing (z. B. SNAT)

3.1 Begriffserklärung: Table, Chain & Regel

3.1.1 Table (Tabelle)

Eine Table ist ein Container für Regeln, gruppiert nach Zweck. Es gibt verschiedene Table-Typen wie:

  • filter – für klassische Paketfilterung
  • nat – für Netzwerkadressübersetzung (z. B. SNAT, DNAT)
  • mangle – für Manipulation von Paket-Headern (z. B. TTL, QoS)

In nftables kann eine Table für mehrere Protokollfamilien gelten (z. B. inet für IPv4 + IPv6).

3.1.2 Chain (Kette)

Eine Chain ist eine Reihenfolge von Regeln innerhalb einer Table. Sie wird mit einem Hook (z. B. input, forward, output) verbunden – also dem Punkt im Netzwerkstack, an dem sie wirkt.

Beispiel: Die input-Chain in der filter-Table wird für alle eingehenden Pakete an das System selbst verwendet.

3.1.3 Regel (Rule)

Eine Regel beschreibt eine Bedingung + Aktion: Wenn ein Paket z. B. TCP ist und Port 22 verwendet → erlaube es. Regeln werden von oben nach unten geprüft, bis eine passende gefunden wird.

Typische Aktionen:

    accept – zulassen

    drop – verwerfen (ohne Antwort)

    reject – verwerfen (mit Antwort)

    log – protokollieren

4 iptables vs. nftables

nftables wurde 2009 ins Leben gerufen mit dem Ziel, die getrennten Tools für IPv4, IPv6, Bridge-Filterung und ARP-Protokolle in einem einheitlichen Werkzeug zu vereinen. Es wurde konzipiert, um iptables langfristig abzulösen. Dies funktionierte anfangs nicht vollständig, da viele Tools und Projekte fest auf iptables basierten. iptables war viele Jahre das Standardwerkzeug zur Paketfilterung unter Linux. Es verwendet Tabellen (z. B. filter, nat) mit festgelegten Chains und Regeln, die linear geprüft werden. Die Syntax ist einfach, aber bei komplexen Setups schnell unübersichtlich – etwa wenn Ports, Interfaces oder Protokolle gruppiert werden sollen. nftables ersetzt alle ip*-Tools (iptables, ip6tables, ebtables, arptables) durch ein einheitliches Regelwerk. Die Syntax ist deklarativ und erlaubt Gruppierungen, Sets, dynamische Regeln und bessere Performance durch internes Compiling. Regeln werden zentral im Kernel gespeichert und können mit nft list ruleset übersichtlich ausgegeben werden. Seit Kernel 4.18 ist nftables offiziell empfohlen und wird aktiv weiterentwickelt.

5 Beispiel: iptables

iptables -P INPUT DROP
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • Standard-Drop, aber SSH/HTTP erlaubt
  • Zustandserkennung vermeidet doppelte Regeln

6 Beispiel: nftables

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input tcp dport {22, 80} accept

Zeile 1: Erstellt eine Tabelle namens filter im Familienkontext inet (IPv4 + IPv6)

Zeile 2: Erstellt eine Chain input in der Tabelle filter: type filter hook input → Diese Chain wird beim INPUT-Hook aufgerufen priority 0 → Reihenfolge innerhalb des Hooks (Standard ist 0) policy drop → Alles wird verworfen, was nicht explizit erlaubt ist

Zeile 3: Erlaubt alle Pakete, die Teil einer bestehenden oder verwandten Verbindung sind

Zeile 4: Erlaubt neue TCP-Verbindungen auf Port 22 (SSH) und 80 (HTTP)

7 Tools & Test

  • Test mit:
    • nmap, nc, curl, ping
  • Monitoring:
    • ulogd, journalctl, Logging-Regeln
  • Konfiguration sichern:
    • iptables-save, nft list ruleset

8 Fazit

  • Netfilter = leistungsfähiges Framework
  • nftables wird iptables langfristig ablösen
  • Gute Firewall = Basis jeder sicheren Infrastruktur

Empfehlung:

  • Für neue Systeme: direkt nftables nutzen
  • Für Automatisierung: Ansible + Versionierung
  • Logging & Monitoring nicht vergessen