コンテンツにスキップ

bpfilter - BPF ベース Linux パケットフィルタリング チートシート

bpfilter - BPF ベース Linux パケットフィルタリング チートシート

bpfilter は慣れたファイアウォールルールを最適化 BPF プログラムに変換するデーモンです。長年の問題を対処します: iptables には理解されたシンタックスがありますがシーケンシャルルール評価からのパフォーマンス上限があり、生 eBPF/XDP は高速ですが BPF コード書き込み・保守が必要。bpfilter は両者を橋渡けします — ルール を慣れた方法で表現し、適切なフック (XDP を含む、ネットワークスタック前のパケット処理) に添付された効率的 BPF にコンパイル。

ファイアウォール変更はリモートホストをロック可能。コンソールアクセス可能なシステムでテストし、ロールバックパスを保つ。

要件

  • BPF サポート付き最新 Linux カーネル (6.4+ 推奨)
  • ルート権限 (BPF プログラムをロード)
  • libbpf 利用可能

インストール

方法方法
ソースからgit clone https://github.com/facebook/bpfilter && make && sudo make install
Distro パッケージ一部の新しいディストリビューションで利用可能
デーモン開始sudo bpfilter (または systemd 経由)
確認bpfilter --version

アーキテクチャ

ピースロール
bpfilter デーモンルール受け取り、BPF 生成・ロード
bfcliルール表現用のネイティブ CLI
iptables/nftables フロントエンド既存ルールを bpfilter に変換
BPF プログラムフックに添付されたコンパイル済みフィルター

アタッチフック

フックパケット処理位置
XDP最早 — ドライバー、スタック前 (最速)
TC (トラフィック制御)基本解析後、ingress/egress
cgroupcgroup ごとのソケットフィルタリング
Netfilter古典的パスで互換性のある配置

XDP を選択すると最大のパフォーマンスウィンが得られます。特に不要なトラフィック破棄 (DDoS 軽減)、拒否されたパケットはスタック通過が不要。

bfcli でルールを定義

# 概念的なルールセット: デフォルト破棄、SSH と確立トラフィック許可
sudo bfcli ruleset set --from-str '
chain BF_HOOK_XDP policy DROP
  rule
    ip4.proto tcp
    tcp.dport 22
    ACCEPT
  rule
    ip4.saddr 10.0.0.0/8
    ACCEPT
'
コマンド説明
bfcli ruleset set --from-file Fファイルからルールをロード
bfcli ruleset getアクティブなルールセットを表示
bfcli ruleset flushすべてのルールを削除
bfcli chain set単一チェーンを管理

マッチャー

マッチャーマッチ対象
ip4.saddr / ip4.daddrソース/宛先 IPv4 (CIDR サポート)
ip6.saddr / ip6.daddrIPv6 アドレス
ip4.protoプロトコル (tcp、udp、icmp)
tcp.dport / tcp.sportTCP ポート
udp.dport / udp.sportUDP ポート
tcp.flagsTCP フラグ組み合わせ
meta.ifindexインターフェース

判定

判定効果
ACCEPTパケットを許可
DROP無音廃棄
CONTINUE次のルールにフォール・スルー

既存 iptables ルール使用

bpfilter は既存ツール保持用の変換フロントエンドを搭載:

# iptables 互換フロントエンドを bpfilter にポイント
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT

これが移行パス: ルールシンタックスと管理スクリプト保持、下側に BPF 実行を得る。

検証

チェックコマンド
アクティブなルールセットsudo bfcli ruleset get
ロード済み BPF プログラムsudo bpftool prog list
アタッチされた XDPip link show <iface>
カウンタbfcli ruleset get 内のルールカウンタ
オーバーヘッドsudo bpftop でプログラムコスト確認

bpfilter 対 代替案

側面bpfilteriptablesnftables生 XDP/eBPF
パフォーマンス高 (BPF/XDP)より低 (シーケンシャル)iptables より良い最高
シンタックス慣れたまたは bfcli慣れた最新、統一BPF コード記述
成熟度新しい非常に成熟成熟依存
最適用途慣れたルール付き BPF 速度レガシー互換性最新 netfilterカスタムデータパス

bpftop でその実行時コスト検査; iptables と古典的パスと比較。

リソース