nftables を使用してステートフル ブリッジ ファイルウォールを作成するにはどうすればよいですか?

nftables を使用してステートフル ブリッジ ファイルウォールを作成するにはどうすればよいですか?

nftables wikiにはですが、私にはうまくいかないようです。

このページにはカーネル 5.3 以降で動作するはずだと書かれていますが、ページにあるコマンドを正確に実行しようとすると、「プロトコル エラー」と表示されます。

# 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
                               ^^^^^^^^
  • ハードウェア: Raspberry Pi 4
  • カーネル: 5.10.92-v8+
  • nft --version:v0.9.8 (E.D.S.)

また、最新バージョンのnftablesとそのライブラリをビルドした後、次のことを試しました。

  • nftables 1.0.1
  • libnftnl 1.2.1
  • libmnl-1.0.4

ldd nft確かに新しいバージョンのライブラリが使用されていることを確認しましたが、それでも同じエラー メッセージが表示されました。

答え1

この機能はカーネル 5.3 以降で利用可能ですが、Raspberry は提供されたカーネルにこれをコンパイルしないことを選択しました。

カーネル構成ファイル(通常はカーネルとしてまたはカーネルから)が見つからなかったため/boot/config-xxx、インストールイメージを抽出してこれを直接確認しました。以下は、Raspbianのカーネルで利用可能なモジュールの比較です(zipイメージ公式サイトからダウンロード):

$ 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

類似のDebianカーネル同じアーキテクチャの場合:

$ 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

ご覧のとおり、必要なNetfilterサポートnf_conntrack_bridge接続トラック一部nft_meta_bridgenftables部分は、RaspberryPi OS のデフォルト カーネルでは利用できません (また、組み込みでもありません。grep bridge lib/modules/5.10.92-v8+/modules.builtin結果はありません)。これらの機能も有効になっているカーネルをビルドする必要があります。

他の珍しい機能も欠けている可能性があります。例えばモジュールnft_synproxyそしてnft_xfrm(IPSec フィルタリング用) も存在しません。

一方、非推奨のメソッド(機能の同等性が達成されたら削除される予定)を引き続き使用することもできますが、これも影響します。nftables良くも悪くも:br_netfilterカーネルモジュールしかしネイティブnftablesこの方法は、新しいカーネル5.3の方法を使用するように設計されているため、特にサポートされていません。特に、iptables'-m physdev --physdev-is-bridged

関連情報