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:
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:
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:
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:
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>
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>
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 willstf2b-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
:
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>
nft list set inet f2b-table addr-set-proftpd
Als Ergebnis erhältst du dann alle Einträge des Sets:
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 }
:
nft get element inet f2b-table addr-set-proftpd { 185.156.73.233 }
Das Ergebnis sieht dann wie folgt aus:
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:
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>
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>
nft delete element inet f2b-table addr-set-proftpd { 1.2.3.4 }
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.