Wie erstelle ich eine Stateful Bridge-Filewall mit NFtables?

Wie erstelle ich eine Stateful Bridge-Filewall mit NFtables?

Das nftables Wiki hatein Beispiel, aber es scheint bei mir nicht zu funktionieren.

Auf der Seite steht, dass es seit Kernel 5.3 funktionieren sollte, aber es erscheint „Protokollfehler“, wenn ich die genauen Befehle von der Seite ausprobiere:

# nft add table bridge filter
# nft add chain bridge filter forward '{type filter hook forward priority 0; }'
# nft add rule bridge filter forward ct state established,related accept
Error: Could not process rule: Protocol error
add rule bridge filter forward ct state established,related accept
                               ^^^^^^^^
  • Hardware: Raspberry Pi 4
  • Kernel: 5.10.92-v8+
  • nft --version:v0.9.8 (E.D.S.)

Ich habe es auch versucht, nachdem ich die neueste Version von nftables und seinen Bibliotheken erstellt hatte:

  • nftables 1.0.1
  • libnftnl 1.2.1
  • libmnl-1.0.4

Ich habe bestätigt ldd nft, dass tatsächlich die neuen Versionen der Bibliotheken verwendet wurden, dennoch erscheint immer noch die gleiche Fehlermeldung.

Antwort1

Diese Funktion ist seit Kernel 5.3 verfügbar, Raspberry hat sich jedoch dazu entschieden, sie nicht in die mitgelieferten Kernel zu kompilieren.

Da ich die Kernel-Konfigurationsdatei (normalerweise als /boot/config-xxxoder aus Kernel vorhanden) nicht finden konnte, habe ich das Installationsimage extrahiert, um dies direkt zu überprüfen. Hier ist ein Vergleich der verfügbaren Module im Raspbian-Kernel (ausZIP-Bildvon der offiziellen Site heruntergeladen):

$ ls -1 lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nft_reject_bridge.ko

gegenüber einemähnlicher Debian-Kernelfür die gleiche Architektur:

$ ls -1 lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_conntrack_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_meta_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_reject_bridge.ko

Wie man sehen kann, benötigte Netfilter-Unterstützung nf_conntrack_bridgefür dieKontaktTeil und nft_meta_bridgefür dieNftablesgrep bridge lib/modules/5.10.92-v8+/modules.builtinTeil ist im Standardkernel von RaspberryPi OS nicht verfügbar (und nein, es ist auch nicht integriert: hat kein Ergebnis). Ein Kernel mit diesen aktivierten Funktionen muss erstellt werden:

Es ist durchaus möglich, dass auch andere seltene Funktionen fehlen. Zum Beispiel Modulenft_synproxyUndnft_xfrm(zur IPSec-Filterung) sind ebenfalls nicht vorhanden.

In der Zwischenzeit kann man immer noch die veraltete Methode verwenden (die entfernt werden soll, sobald die Funktionsparität erreicht ist), was sich auch aufNftablesim Guten wie im Schlechten: diebr_netfilterKernelmodulAber nativeNftablesfehlt die spezifische Unterstützung für diese Methode, da sie für die Verwendung der neueren Kernel-5.3-Methode konzipiert ist. Insbesondere gibt es kein Äquivalent füriptables'-m physdev --physdev-is-bridged.

verwandte Informationen