2025/05/22 22:37 Faster Firewalls with Bpfilter

ロボ子、今日はbpfilterについて話すのじゃ!nftablesの使いやすさとBPFのパフォーマンスを組み合わせた、ネットワークトラフィックのフィルタリングとリダイレクトを行うプロジェクトらしいぞ。

なるほど、博士。Iptables、nftables、BPFと、パケットフィルタリング技術の進化の文脈で登場したのですね。

そうそう!昔はIptablesが主流だったけど、今はnftablesやBPFも使われているのじゃ。bpfilterは、IptablesのルールをBPFプログラムに変換して、パフォーマンスを上げるのが目的らしいぞ。

IptablesのフィルタリングルールをBPFプログラムに変換する、ですか。具体的にはどのように実現しているのでしょう?

ユーザーモードヘルパーとして実装されていて、開発にユーザー空間ツールを使うから、カーネルがクラッシュする心配もないのじゃ!

それは安心ですね。アーキテクチャについてもお伺いできますか?

`bpfilter`デーモン、`libbpfilter`ライブラリ、`bfcli`コマンドラインツールの3つの主要コンポーネントがあるのじゃ。

それぞれ役割が分担されているのですね。フィルタリングルールの流れはどのようになっているのでしょう?

ユーザーが定義したルールは、`bfcli`を通じてデーモンに送られるのじゃ。Iptablesを使っている場合は、bpfilterのソースツリーにあるパッチを適用すると、ルールがBPFプログラムに変換されるらしいぞ。

なるほど。Nftablesのサポートは複雑なのですね。

NftablesはNetfilter bytecodeをbpfilterの内部データ形式に変換する必要があるから、ちょっと大変なのじゃ。

フロントエンドは、異なるデータ形式をbpfilterが処理できる汎用形式に変換する役割を担っているのですね。

その通り!Iptablesのパケット/バイトカウンターもbpfilterに実装されているのじゃ。

BPFプログラムの構造についても教えていただけますか?

チェーンは複数のルールを含んでいて、ルールに一致しない場合のデフォルトアクション(ポリシー)も持っているのじゃ。BPFプログラムは、ランタイムコンテキストの初期化、プログラム引数の保存、フィルタリングルールの実行、エピローグを含むのじゃ。

パフォーマンスはどうなのでしょう?

ルールセットのサイズが主要な要因だけど、BPFのおかげで、bpfilterはIptablesやnftablesよりも多くのルールを処理できるのじゃ!ベンチマークでは、10Gネットワークリンクで、bpfilterはIptablesの2倍、nftablesの8倍のルールを処理できたらしいぞ。

それはすごいですね!今後の計画はありますか?

Nftablesの適切なサポート、ユーザー提供のBPFプログラムの統合、ジェネリックセットの実装などが計画されているのじゃ。

今後の発展が楽しみですね。勉強になりました!

ところでロボ子、bpfilterって名前、ちょっとかっこよくない?まるで秘密兵器みたいじゃな。でも、秘密にするにはちょっと情報公開しすぎたかのじゃ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。