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:
-
iptablesverwende 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-savekann ich komplette Regelsätze sichern.Durch die kompakte Form als Textdatei mit jeweils allen Optionen von
iptablesfür die betreffende Regel in einer Zeile eignet sich die Ausgabe voniptables-savesehr gut zur Analyse eines Paketfilters. Darauf komme ich in einem späteren Kapitel zurück. -
iptables-restorenimmt die Ausgabe voniptables-saveund 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-xmlnimmt die Ausgabe voniptables-saveund 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
-
ip6tableszur Manipulation von Regeln und Regelketten, -
ip6tables-savezum Speichern des gesamten IPv6-Regelsatzes und -
ip6tables-restorezum 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:
-
arptablessetzt die Regeln zum Inspizieren und Manipulieren von Datagrammen des Address Resolution Protocol (ARP), -
arptables-savesichert alle Regeln und -
arptables-restorestellt 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