nftables ist ein modernes Framework zur Paketfilterung unter Linux und ersetzt langfristig iptables. In diesem Beitrag zeige ich die wichtigsten Kommandos, die sich in meinem Admin-Alltag bewährt haben.
Die Anlage neuer Tabellen und Chains benötige ich in der Praxis selten, daher gehe ich darauf hier nicht ein.
In Teil 1 erkläre ich die grundlegenden Begriffe. In Teil 2 erläutere ich dann die wichtigsten Befehle.
Begriffsdefinition
table (Tabelle)
Eine Tabelle ist die oberste Organisationseinheit. Sie enthält chains
, sets
, maps
, flowtables
und objects
. Ich behandle in der Folge nur chains und sets.
Gängige Families für Tabellen:
ip
(nur IPv4)ip6
(nur IPv6)inet
(kombiniert IPv4 + IPv6)arp
,bridge
,netdev
(für spezielle Szenarien)
Beispiel einer einfachen inet
-Tabelle:
table inet mytable {
set blacklist {
type ipv4_addr
elements = { 1.2.3.4, 5.6.7.8 }
}
map portmap {
type inet_service : verdict
elements = { 22 : drop, 80 : accept }
}
chain input {
type filter hook input priority 0; policy accept;
ip saddr @blacklist drop
}
counter mycounter {
packets 0 bytes 0
}
}
chain (Kette)
Eine Chain ist ein Container für Regeln und verarbeitet eingehende, weitergeleitete oder ausgehende Pakete – je nachdem, an welchen Hook sie gebunden ist.
Typische Beispiele:
chain input
chain output
chain forward
- benutzerdefinierte Chains wie
chain f2b-chain
(für fail2ban)
Jede Chain kann zusätzlich eine Policy definieren – das ist das Standardverhalten, wenn keine Regel zutrifft:
drop
→ Paket wird verworfenaccept
→ Paket wird zugelassen
Beispiel für eine einfache input-chain
chain input {
type filter hook input priority 0;
policy accept;
ip saddr @blacklist drop
tcp dport 22 accept
}
In diesem Beispiel:
- Wird die Chain an den input-Hook gebunden (also an eingehende Pakete),
- mit der Policy
accept
als Standardverhalten, - und prüft zwei Regeln: Blockierung von IPs aus einem Set (
@blacklist
) und Zulassen von SSH (port 22
).
rule (Regel)
Eine Regel definiert, was mit einem Netzwerkpaket passieren soll, wenn es bestimmte Bedingungen erfüllt. Sie besteht aus:
- Aktionen (z. B.
accept
,drop
,reject
,log
,counter
) - Match-Bedingungen (z. B. Quell-IP, Zielport, Protokoll)
Beispiel:
tcp dport 22 ip saddr @addr-set-sshd reject
Diese Regel:
- trifft auf TCP-Verbindungen mit Zielport 22 (SSH) zu,
- prüft, ob die Quelladresse in einem Set namens
addr-set-sshd
enthalten ist, - und verwirft das Paket mit einer
reject
-Antwort.
set (Menge)
Ein Set ist eine dynamisch befüllbare Liste von Werten, die in Regeln referenziert werden kann. Typische Inhalte sind IP-Adressen, Ports oder ganze Kombinationen (z. B. IP + Port).
Sets werden häufig verwendet für:
- IP-Blocklisten (z. B. in Kombination mit Fail2Ban)
- Portfreigaben
- Optimierung mehrerer Regeln in einer einzigen
Beispiel:
set blacklist {
type ipv4_addr;
elements = { 1.2.3.4, 5.6.7.8 }
}
- type legt den Datentyp fest (z. B.
ipv4_addr
,inet_service
,verdict
, …) - elements enthält die Einträge
Sets sind besonders nützlich, weil sie zur Laufzeit geändert werden können – ohne das gesamte Regelwerk neu zu laden.
hook (Anker)
Ein Hook bindet eine Chain an einen bestimmten Punkt im Netzwerk-Stack, also an eine Phase der Paketverarbeitung im Linux-Kernel. Ohne Hook ist eine Chain nur intern nutzbar (z. B. als Ziel für jump
-Anweisungen). Gängige Hooks sind: input, output, forward, prerouting, postrouting.
Beispiel chain
mit hook
:
chain input {
type filter hook input priority 0;
policy accept;
ip saddr @blacklist drop
}
Diese Definition:
- bindet die Chain an den input-Hook (eingehende Pakete an das System),
- mit der Priorität 0 (Reihenfolge im Hook),
- und setzt die Policy auf
accept
, wenn keine Regel zutrifft.
Priorität (priority
) bestimmt die Reihenfolge, falls mehrere Chains denselben Hook verwenden.
Niedrigere Werte → frühere Ausführung.
ruleset (Regelwerk)
Das Ruleset ist das komplette nftables
-Regelwerk auf einem System.
Es umfasst alle Tabellen, Chains, Regeln, Sets, Maps, Objects und Flowtables – also den gesamten Firewall-Zustand.
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.