Nftables - Nachfolger der Iptables

Nftables

Früher nutzte man unter Linux die Iptables um die Firewall bis ins letzte Detail professionell zu konfigurieren, doch die Iptables sind recht komplex und damit zu arbeiten erfordert recht viel Wissen. Dies hat sich mit den Nftables um einiges vereinfacht, selbst in Debian 10 wurden die Iptables inzwischen durch die neue Variante ersetzt - man kann die Iptables-Befehle zwar noch nutzen, diese weden jedoch nur übersetzt für die neuen Befehle.

In diesem Beitrag werden wir die Nftables nun näher kennen lernen.

Nftables installieren

Man muss für die Nftables nichts installieren, diese sind seit Kernel 3.13 direkt im Linux-Kernel implementiert, nach installieren müssen Sie maximal über die Paket-Verwaltung das Paket "nftables". Um zu sehen das die nötigen Module geladen wurden nutzen wir einfach als Administrator auf dem Terminal den Befehl:

modinfo nf_tables

Als Ausgabe sollten wir eine ähnliche Ausgabe (mit unterschiedlichen Angaben zur Version) erhalten:

filename:       /lib/modules/5.2.2-122.current/kernel/net/netfilter/nf_tables.ko 
alias:          nfnetlink-subsys-10 
author:         Patrick McHardy <kaber@trash.net> 
license:        GPL 
depends:        nfnetlink 
retpoline:      Y 
intree:         Y 
name:           nf_tables 
vermagic:       5.2.2-122.current SMP preempt mod_unload modversions

Nftables nutzen

Wie die Iptables kommen auch die Nftables ohne bestehenden Regel-Satz daher, sind also leer und ohne Konfiguration, statt den Befehl "iptables" nutzt man ganz einfach "nft". Anders als die Iptables bestehen in der Grundkonfiguration der Nftables auch noch keine Filter, Tabellen oder Ketten - die benötigten erstellt man sich ganz einfach selbst (um die Grundlagen zu verstehen sollten Sie zuerst auch den Beitrag über die Iptables lesen).

Nun wollen wir die Nftables einfach einmal dazu bringen das System von außen komplett abzuschotten, also niemand in das System eindringen kann - ohne Angabe einer Netzwerk-Schnittstelle wirken die Befehle auf alle Schnittstellen:

nft add table ip filter
nft add chain ip filter input {type filter hook input priority 0/;}
nft add rule ip filter input drop
nft list ruleset -a

Auf keiner Netzwerk-Schnittstelle ist nun ein Eindringen in das System möglich, mit dem ersten Befehl erstellen wir ganz einfach die Tabelle "filter", mit dem zweiten legen wir die Kette "filter" an, in der dritten erlauben wir keinen Zugang in das System, alle Netzwerk-Pakete werden ganz einfach verworfen - "drop".

Wie Sie Tabellen und Ketten benennen ist der Software komplett egal, ich werde hier einfach die alten Bezeichnungen aus den Iptables nutzen. Mit dem letzten Befehl lassen Sie sich die bestehenden / erstellten Regeln anzeigen - hier erhalten Sie nun jede erstellte Regel nach der Form "handle Nummer", um eine bestehende Regel - etwa die zweite zu löschen:

nft delete rule ip filter input handle 2

Als Beispiel möchte ich nun den Port 22 - also SSH freischalten:

nft add rule inet filter input tcp dport 22 ct state new,established accept

Wir erstellen also eine neue Regel für die Tabelle "filter" und eingehende Pakete "input" mit dem Protokoll "tcp" auf dem Port "22", "inet" gibt einfach an das die Regel für das IP-Protokoll IPv4 und IPv6 gelten, der Rest gibt an das bestehende Verbindungen weiterhin erlaubt werden - also nicht noch einmal vollständig gefiltert werden was extrem Zeit kosten würde. Wir können auch gleich mehrere Ports angeben um nicht für jeden Port eine eigene Regel erstellen zu müssen, etwa für SSH (22), FTP (21) und SSL (443):

nft add rule inet filter input tcp dport {21, 22, 443 } ct state new,established accept

Um die Einstellungen zu speichern nutzt man nun ganz einfach den Befehl:

nft list ruleset > firewall.config

Mit:

nft -f firewall.config

lassen Sie sich die bestehenden und gespeicherten Einstellungen nun ansehen.