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

Nachdem ich in Teil 1 die grundlegenden Begriffe zu nft erläutert habe, zeige ich in Teil 2 die wichtigsten Befehle.

sudo lasse ich bei den nachfolgenden Beispielen weg. Es wird für nft Kommandos nötig sein.

Ausgabe der kompletten Konfiguration:

Bash
nft list ruleset

Mit diesem Befehl wird das gesamte nftables-Regelwerk in seiner aktuellen Form ausgegeben.

Da das Ruleset je nach Komplexität sehr umfangreich sein kann, habe ich mir ein eigenes Skript erstellen lassen, das die Ausgabe auf das Wesentliche kürzt: Bei mehrzeiligen Blöcken innerhalb geschweifter Klammern wird nur die erste und letzte Zeile angezeigt.

Das ist besonders dann hilfreich, wenn man die Struktur mithilfe von LLMs (z. B. ChatGPT, Claude, Gemini) analysieren oder vergleichen will.

Hier ein Einzeiler, der das Ruleset kürzt:

Bash
nft list ruleset | awk 'BEGIN{b=0;h="";c=0;f="";l="";e=""} /{/&&!/}/{if(b)print;else{b=1;h=$0;c=0;f="";l="";e=""};next} /}/&&!/{/{if(b){b=0;print h;if(c<=2&&e!="")print e;else if(c>2){print f;print l};print $0}else print;next} {if(b){if(NF>0&&!/^[[:space:]]*$/){c++;if(c==1)f=$0;l=$0;if(c<=2){if(e=="")e=$0;else e=e"\n"$0}}}else print}'

Ausgabe von Tabellen und Chains

Tabellen und Chains wurden in Teil 1 dieses Cheatsheets erklärt – hier zeige ich dir die wichtigsten Befehle, um sie aufzulisten.

Auflisten von Tabellen:

Bash
nft list tables          # listet alle Tabellen auf

# Ergebnis z. B:
table ip filter
table ip nat
table ip6 filter
table ip6 nat
table inet firewalld

# Eine konkrete Tabelle (hier: Fail2Ban-Tabelle) ansehen
nft list table inet f2b-table

# Alle Chains dieser Tabelle mit Handle-Nummern (-a!)  
nft -a list chain inet f2b-table f2b-chain

Ausgabe:

nft
table ip filter
table ip nat
table ip6 filter
table ip6 nat
table inet firewalld
table inet f2b-table

Dabei bedeutet:

  • inet = Family (IPv4 + IPv6)
  • f2b-table = Tabellenname (hier automatisch von Fail2Ban erstellt)

Anzeigen einer bestimmten Tabelle:

nft list table <family> <tablename>

Bash
nft list table inet f2b-table

In der Ausgabe siehst du dann den Inhalt der Tabelle wie Sets und Chains.

Anzeige aller Chains in einer Tabelle (inkl. Handles):

nft -a list chain <family> <tabellenname> <chainname>

Bash
nft -a list chain inet f2b-table f2b-chain
  • -a zeigt zusätzlich die Handle-IDs, die du brauchst, wenn du einzelne Regeln löschen willst
  • f2b-chain ist der Name der Chain, z. B. von Fail2Ban automatisch angelegt

Wenn du den Inhalt eine Tabelle anzeigen lässt, erhältst du auch eine Auflistung der Chains.

Regeln

Regeln sind immer Teil einer Chain, somit brauchst du sie nicht separat anzeigen lassen.

Ausgabe von Sets

Für die Ausgabe der Sets zu einer Tabelle benötigst du grep und sed:

Bash
nft list sets table inet f2b-table | grep "set" | sed 's/ {$//'

Als Ergebnis erhältst du dann eine Liste der in der Tabelle enthaltenen Sets.

Einen kompletten Set gibst du wie folgt aus:

nft list set <family> <tabellenname> <set-name>

Bash
nft list set inet f2b-table addr-set-proftpd

Als Ergebnis erhältst du dann alle Einträge des Sets:

nft
table inet f2b-table {
	set addr-set-proftpd {
		type ipv4_addr
		elements = { 1.95.66.108, 2.59.152.3,
			     8.130.146.108, 8.134.69.106,
			     ...
			     222.252.20.251, 223.240.69.191 }
	}
}

Wenn du ein einzelnes Element aus einem Set abfragen möchtest geht das mit

nft get element <family> <tablename> <setname> { 1.2.3.4 }:

Bash
nft get element inet f2b-table addr-set-proftpd { 185.156.73.233 }

Das Ergebnis sieht dann wie folgt aus:

nft
table inet f2b-table {
	set addr-set-proftpd {
		type ipv4_addr
		elements = { 185.156.73.233 }
	}
}

Aber Vorsicht, wenn das Element nicht gefunden wird, dann erhältst du eine eher kryptische Fehlermeldung:

nft
Error: Could not process rule: No such file or directory
get element inet f2b-table addr-set-proftpd { 1.2.3.4 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Besser ist es also, du arbeitest immer mit grep

nft list set <family> <tablename> <setname> | grep 1.2.3.4

Wird das Element nicht gefunden, ist die Ausgabe leer.

Ein Element fügt man zu einem Set wie folgt hinzu:

nft add element <family> <tablename> <setname>

Bash
nft add element inet f2b-table addr-set-proftpd { 1.2.3.4 }

Ein Element entfernt man aus einem Set wie folgt:

nft delete element <family> <tablename> <setname>

Bash
nft delete element inet f2b-table addr-set-proftpd { 1.2.3.4 }

Kommentare

Schreibe einen Kommentar