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 |
| cgroup | cgroup ごとのソケットフィルタリング |
| 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.daddr | IPv6 アドレス |
ip4.proto | プロトコル (tcp、udp、icmp) |
tcp.dport / tcp.sport | TCP ポート |
udp.dport / udp.sport | UDP ポート |
tcp.flags | TCP フラグ組み合わせ |
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 |
| アタッチされた XDP | ip link show <iface> |
| カウンタ | bfcli ruleset get 内のルールカウンタ |
| オーバーヘッド | sudo bpftop でプログラムコスト確認 |
bpfilter 対 代替案
| 側面 | bpfilter | iptables | nftables | 生 XDP/eBPF |
|---|
| パフォーマンス | 高 (BPF/XDP) | より低 (シーケンシャル) | iptables より良い | 最高 |
| シンタックス | 慣れたまたは bfcli | 慣れた | 最新、統一 | BPF コード記述 |
| 成熟度 | 新しい | 非常に成熟 | 成熟 | 依存 |
| 最適用途 | 慣れたルール付き BPF 速度 | レガシー互換性 | 最新 netfilter | カスタムデータパス |
bpftop でその実行時コスト検査; iptables と古典的パスと比較。
リソース