nftables Cheat Sheet: Nützliche Befehle für nft Teil 1

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:

nft
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 verworfen
  • accept → Paket wird zugelassen

Beispiel für eine einfache input-chain

nft
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:

nft
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:

nft
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:

nft
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.

Kommentare

Schreibe einen Kommentar