Wechsel von iptables nach nftables unter Debian

Jörg Kruse

Mit der kommenden Stable-Version Debian 10 („Buster“) wird iptables durch nftables als Standardwerkzeug zum Filtern von IP-Paketen ersetzt. Das mitinstallierte Paket iptables-nftables-compat ermöglicht es hierbei, weiterhin die alten ip-, ip6-, arp- und ebtables Regeln zu laden. Daneben enthält es auch Tools, mit welchen die alten Rules in ein entsprechendes nftables Ruleset übersetzt werden können.

Nftables bringt für den Anwender einige Vorteile mit sich. Als zwei Beispiele seien hier genannt, dass Tabellen für IPv4 und IPv6 nicht mehr getrennt definiert werden müssen und Regeln auch mehrere Aktionen enthalten können. Im Wiki von nftables, welches eine umfassende Dokumentation enthält, sind die wichtigsten Unterschiede gegenüber iptables aufgelistet.

Bereits in Debian 9 („Stretch“) ist es möglich, nftables über den Paketmananger zu installieren. Im Repository von Stretch befindet sich die schon etwas ältere Version 0.7, die ein paar Einschränkungen mit sich bringt, aus den Backports (stretch-backports) kann man aber Version 0.9 erhalten, welche auch in Debian Buster verfügbar ist. Zusätzlich zu nftables empfiehlt es sich, iptables-nftables-compat zu installieren, wenn man die darin enthaltenen Übersetzungstools nutzen möchte. Mit iptables-translate lassen sich beipielsweise einzelne Befehle und mit iptables-restore-translate ein ganzer Regelsatz übersetzen, siehe hierzu die Beispiele in der Manpage von xtables-translate(8).

Der Regelsatz, der von nftables geladen wird, ist unter Debian in der Datei /etc/nftables.conf gespeichert. Nach der Installation von nftables enthält die Datei ein minimales Ruleset, welches alle IP-Pakete durchlässt. Beispiel-Konfigurationen für verschiedenene Anwendungsfälle finden sich unter /usr/share/doc/nftables/examples. Bei einem komplexen Setup empfiehlt es sich ggf., die Konfiguration erst auf einem Testsystem zu erproben und fertigzustellen, bevor diese auf einem Produktivsystem eingesetzt wird.

Sofern systemd als Systemmanager verwendet wird (was in Debian 9 und 10 standardmäßig der Fall ist), lässt sich nftables darüber starten, um das fertige Ruleset zu laden:


# systemctl start nftables

Analog zu „iptables -L -nv“ kann man sich nun mit dem Kommandozeilen-Tool nft den Regelsatz inklusive Counter ausgeben lassen:


# nft list ruleset

Um das Ruleset in /etc/nftables.conf auch nach dem nächsten Boot zu laden, wird nftables als Service-Einheit unter Systemd aktiviert:


# systemctl enable nftables

Spätestens vor dem Reboot sollte ggf. iptables-persistent deinstalliert werden, damit darüber nicht mehr das alte iptables Ruleset geladen wird.

Tags: Debian

Die Kommentarfunktion wurde nach 180 Tagen automatisch geschlossen.