Netfilter-Tables schicken sich an, das Erbe von IPTables anzutreten

© mrberger, Photocase.com

Wiedergeborener Wächter

Auch für einen weisen Hüter der Netzwerkeingänge ist es irgendwann an der Zeit, den Stab weiterzugeben. Das Netfilter-Team bereitet gerade den Firewall-Umstieg von IPTables zu NFTables vor. Der Kernel profitiert von schlankeren Strukturen, Anwender dürfen sich auf eine echte Filtersprache freuen.
High Availability lässt sich heute mit günstiger Hardware und einer großen Auswahl an kommerzieller sowie freier Software realisieren. ADMIN erklärt die ... (mehr)

Mancher Administrator wird aufstöhnen. "Nicht schon wieder ein neues Firewall-Subsystem im Linux-Kernel", denken vielleicht diejenigen, die von der Ankündigung gehört haben, dass das Paket NFTables den aktuellen Status Quo beim Linux-Firewalling ablösen soll [1] . Sie erinnern sich an den Reigen aus dem von FreeBSD entlehnten »ipfw« der Serie 1.x, »ipfwadm« aus Kernel 2.0, »ipchains« aus Version 2.2 und den anschließenden Wechsel auf die Netfilter-Architektur mit seinem Tool »iptables« sowie diversen Geschwisterprogrammen.

Doch die letzte Programmfamilie hat sein ursprünglicher Autor Rusty Russell bereits im Jahr 1998 aus der Taufe gehoben. So waren sich seine Nachfolger Harald Welte und später Patrick McHardy einig, dass es irgendwann Zeit für eine neue Runde würde, um das Filtern von Netzpaketen im Linux-Kern zu verjüngen.

Netfilter zeigt seit Jahren gute Leistungen, wie viele Zusatzmodule und der Einsatz in vielen kommerziellen Softwareprodukten und Appliances belegen. Dennoch gibt es auch einige Widrigkeiten, die geplagte Admins ärgern: So die Befehlssyntax, um Regeln in Ketten anzuordnen, die viele Sonderfälle hat und als komplex und unhandlich gilt.

Etwas Linderung verspricht zwar ein Füllhorn voll von Hilfsskripten, Programme und Generatoren, die die konkreten Befehlszeilen vor dem Admin verstecken, aber einige architektonische Probleme können auch die Tools nicht lösen. So ist es gegenwärtig nicht möglich, einzelne Regeln inkrementell einer laufenden Netfilter-Instanz hinzuzufügen. Stattdessen lädt das Werkzeug den aktuellen Regelsatz in den Userspace, fügt die neue Regel hinzu und überträgt die Vereinigungsmenge wieder in den Kernel. Gerade bei großen Regelsätzen wird das schnell zu einem ernsthaften Performance-Problem.

Das galt auch für einige Eigenschaften hinter den Kulissen des Kernels: So verarbeitet der Netfilter-Kern eine Regel nach der anderen. Zwar hatten einige Entwickler mit NF-Hipac ein Matching auf Grundlage von Baumstrukturen vorgeschlagen und implementiert [2] . Das Projekt führten sie aber seit 2005 weder fort, noch integrierten sie es in den Netfilter-Code, wie es sich dessen damaliger Chef Harald Welte erhofft hatte.

Trotz der Fülle an Erweiterungen sah der jetzige Projektleiter Patrick McHardy, dass sich nicht alle Ideen im aktuellen Netfilter-Code realisieren lassen und setzte sich an einen Neuanfang, den er gegenwärtig NFTables nennt [3] . Die Schnittstellen zum eigentlichen Linux-Kernel lässt er dabei weitgehend unangetastet. Die Einstiegspunkte für Pakete, die vom Userspace den Kernel betreten, die von einem Interface kommen oder den Kern wieder verlassen sollen, bleiben also bestehen (Abbildung  1).

Abbildung 1: Eine einfache Grafik als Ascii-Art ist auch heute noch Grundlage des Linux-Firewall-Subsystems Netfilter. An den Schnittstellen und Einhängepunkten ändert sich auch unter NFTables wenig.

Tradition neu geboren

Neu hingegen ist die Engine, die die Pakete filtert. Sie wird deutlich schlanker als ihr Vorgänger, da sie nur einfache Operationen ausführt, etwa ob ein Paket an einem Offset einen festgelegten Wert besitzt (siehe Abbildung  2). Außerdem hat McHardy den Kern um Basis-Operatoren wie einen Match auf Mengen erweitert.

Abbildung 2: NFTables setzt wie sein Vorgänger auf den Hooks des Linux-Netzwerkstacks auf. Die Entwickler haben jedoch die Filter-Engine verschlankt und viel Wissen über Protokolle in den Userspace verlegt.

Wer früher eine Zahl von unzusammenhängenden Subnetzen filtern wollte, die sich nur durch ein Oktett unterschieden, musste auf jedes Segment einzeln prüfen. Nun übernimmt dies eine einzige atomare Operation. Der frühere Code hatte viel mehr Wissen über den Aufbau einzelner Protokolle eingebaut. Diese Aufgabe übernehmen nun Userspace-Tools, die Regeln in eine binäre Darstellung übersetzen – analog zum Bytecode einer virtuellen Maschine.

Der neue NFTables-Kern ordnet die Regeln in Bäumen an und nutzt dazu stärker TLV genannte Datenstrukturen, die für Type-Length-Value stehen. Die Änderungen führen nebenbei dazu, dass ein Subsystem künftig praktisch jedes Protokoll filtern kann, also neben IP, IPv6 und ARP auch solche des Link-Layers. So fallen allein gut 10 000 Zeilen duplizierten Codes aus dem Kernel weg.

Der Netfilter-Kern wird außerdem schneller, weil er auf Funktionen wie Paketzähler in der Grundeinstellung verzichtet. Nur wenige Netfilter-Anwender nutzten sie. Wer will, kann sie wieder aktivieren. Dies geschieht mit Verdicts genannten Markierungen, von denen Paketen mehrere anheften dürfen. Sie legen fest, was mit ihnen geschieht: In einem Schritt statt mittels mehrerer Checks legt die neue Engine das Schicksal jedes Datenpakets fest.

Weise Worte

Einige Admins wünschen sich eine Linux-Portierung der OpenBSD-Firewall »pf« , die mit einer leistungsfähigen Filtersprache aufwartet. Dazu wird es dem Vernehmen nach jedoch nicht kommen. – zu groß sind die architektonischen Unterschiede im Kern, lässt das Netfilter-Team wissen. Dennoch dürfen sich Admins auf ein neues User-Interface freuen: Anstelle des unhandlichen Tools »iptables« mit seinen vielen, teilweise voneinander abhängigen Kommandozeilenoptionen spendiert das Netfilter-Team nun eine eigene Beschreibungssprache. An den Details der Syntax feilen die Entwickler noch, haben sich dazu aber extra einige Sprachdesigner ins Boot geholt. Die Anweisungen

define local_ifs = { eth0, eth1 }
filter input meta iif $local_ifs daddr 10.0.0.0/8 counter accept

lassen Pakete für das Netz 10.0.0.0/8 passieren, wenn sie von den lokalen Interfaces aus kommen. NFTables loggt dies. Das deutet bereits an, dass es wohl möglich ist, Regelsätze von IPTables in solche für NFTables zu übersetzen, wenn sie überschaubar sind. Gleichwohl existiert ein solches Werkzeug bislang nur in den Köpfen der Entwickler und Anwender.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023