Netfilter: Benutzerprogramme

Im Netfilter-Framework gibt es vier Gruppen von Userspace-Programmen, die sich um verschiedene Belange bei der Paketfilterung kümmern:

  • iptables ist zuständig für die Filterung und Manipulation von IPv4-Traffic,
  • ip6tables kümmert sich um IPv6,
  • ebtables ist für die die Filterung und Manipulation von Datagrammen auf OSI-Schicht 2, also bei Netzwerk-Bridges zuständig, und
  • arptables kümmert sich um ARP, das heißt die Zuordnung von Ethernet-Adressen zu IPv4-Adressen.

Auf alle vier gehe ich im folgenden nur kurz ein, für detailliertere Erläuterungen verweise ich auf die Handbuchseiten.

iptables

Hier habe ich es mit insgesamt vier Programmen zu tun:

  • iptables verwende ich, wenn ich einzelne Paketfilterregeln von Hand oder in einem Skript explizit ändern will.

    Konkret nutze ich es für die Verwaltung von Regelketten:

    • Anlegen und Löschen von benutzerdefinierten Ketten,
    • Vorgabe einer Policy,

    und für die Verwaltung der Regeln:

    • Anlegen, Ändern und Löschen von Regeln,
    • Abfragen, Setzen und Löschen von Zählerständen,
    • Aktivierung von Match-Erweiterungen und Modulen für das Connection Tracking.
  • Mit iptables-save kann ich komplette Regelsätze sichern.

    Durch die kompakte Form als Textdatei mit jeweils allen Optionen von iptables für die betreffende Regel in einer Zeile eignet sich die Ausgabe von iptables-save sehr gut zur Analyse eines Paketfilters. Darauf komme ich in einem späteren Kapitel zurück.

  • iptables-restore nimmt die Ausgabe von iptables-save und installiert alle Regeln im Kernel. Dieses Programm wird in den Skripts beim Systemstart verwendet, um die vor dem Herunterfahren gesicherten Regeln beim Neustart des Rechners wiederherzustellen.
  • iptables-save-xml nimmt die Ausgabe von iptables-save und wandelt sie in XML für die weitere maschinelle Verarbeitung um.

    Bis jetzt habe ich für dieses Programm noch keine Verwendung gefunden.

ip6tables

Hier gilt das für iptables gesagte. Es gibt die drei Programme

  • ip6tables zur Manipulation von Regeln und Regelketten,
  • ip6tables-save zum Speichern des gesamten IPv6-Regelsatzes und
  • ip6tables-restore zum Wiederherstellen des Regelsatzes mit einem Befehl.

ebtables

Für die Administration der Ethernet Bridging Tables gibt es das Programm ebtables, das ich nur benötige, wenn ich eine Ethernet-Bridge betreibe. Die Bridge kann echte Ethernet-Adapter verbinden oder virtuelle Maschinen.

Ein Einsatzfall, für den ich ebtables verwende, ist eine Bridge, die zusätzlich als Router, zum Beispiel für ein VPN arbeiten soll. Will ich in einem bestehenden Netzwerk minimal invasiv nachträglich einen VPN-Router einsetzen, ohne die Rechner oder den Zugangs-Router neu zu konfigurieren, dann kann ich den VPN-Router als Bridge zwischen dem vorhandenen Router und den Rechnern im Netz platzieren. Damit die Datagramme, die durch das VPN geleitet werden sollen, auch wirklich dort ankommen, muss der IP-Stack des VPN-Routers sie zu “sehen” bekommen. Dafür nehme ich mit ebtables diese Datagramme von der Weiterleitung durch die Bridge aus und führe sie dem IP-Stack zu.

arptables

Hier habe ich es ebenfalls mit drei Programmen zu tun:

  • arptables setzt die Regeln zum Inspizieren und Manipulieren von Datagrammen des Address Resolution Protocol (ARP),
  • arptables-save sichert alle Regeln und
  • arptables-restore stellt alle wieder her.

Zwar kann ich mit arptables auch einen einzelnen Rechner schützen, doch werde ich dieses vorwiegend bei einer Bridge einsetzen. Die Regeln und Optionen von arptables sind auf das Protokoll ARP abgestimmt, Details finden sich in den Handbuchseiten.

Netfilter erweitern

Falls mir die Funktionalität des Netfilter-Frameworks nicht ausreicht, kann ich dieses um eigene Funktionen ergänzen.

Dafür gibt es verschiedene Wege. Ich kann ein Kernel-Modul schreiben, das an den nötigen Hooks eingehängt und von einem Userspace-Programm gesteuert wird.

Alternativ kann ich mit libipq die entsprechende Funktionalität auch im Userspace realisieren.

Für Experimente und Tests würde ich die Filterung im Userspace vorziehen, bei hohen Anforderungen an die Performance den Weg über das Kernel-Modul.

Einen Einstieg in dieses Thema bietet das Linux netfilter hacking HOWTO