【いーびーぴーえふ】

eBPF(extended Berkeley Packet Filter) とは?

最終更新:
💡 カーネルに「プラグイン」を差し込むような技術

Linuxカーネルなどの特権的な場所で、サンドボックス化したプログラムを動かせる技術。カーネルのソースコードを変えたりカーネルモジュールを読み込んだりせずに、ネットワーク処理・セキュリティ・観測の機能を追加できる。

📌 このページのポイント
eBPF:カーネル内でプログラムを安全に実行 ユーザー空間 eBPFプログラム ロード バリファイア 安全性を検証 OK JITコンパイル ユースケース ネットワーク セキュリティ 観測 カーネル空間 ネットワーク XDP / TC セキュリティ LSM フック トレーシング kprobe / uprobe スケジューラ sched フック eBPF Maps(データ共有・集計用ストレージ)
eBPFの仕組み:プログラムのロードからカーネル内実行まで
ひよこ ひよこ
eBPFってなに?カーネルとかいきなり難しそう…
ペンギン先生 ペンギン先生
例えるなら「OSの中核部分にプラグインを差し込む技術」だよ。ふつうOSの中核(カーネル)に機能を足すには、カーネルのソースを変えるか、カーネルモジュールを読み込む必要があるんだ。eBPFを使うと、そのどちらもせずに、自分のプログラムをカーネルの中で動かせるよ
ひよこ ひよこ
カーネルの中で動くって、危なくないの?変なコードが入ったら大変じゃない?
ペンギン先生 ペンギン先生
そのためにベリファイア(検証器)があるよ。プログラムを読み込む前に「必ず最後まで実行が終わるか(永久に回り続けないか)」「初期化していないメモリや範囲外にアクセスしないか」などを調べて、通らないものは読み込まない仕組みなんだ。それに、読み込むには原則として特権(rootなど)が必要だよ。ただ、これで絶対に安全というわけではないから、誰が読み込めるかの管理は別に必要だね
ひよこ ひよこ
で、具体的に何に使うの?
ペンギン先生 ペンギン先生
大きく3つの分野があるよ。ネットワーク(パケット処理やロードバランシング)、セキュリティ(不審な動作の検知)、観測(性能の計測やトレース)。たとえばCiliumは、eBPFを使ってKubernetesのネットワークとセキュリティ、観測を実現するプロジェクトだよ
ひよこ ひよこ
そんなに便利なら、もっと前からあってもよさそうだけど?
ペンギン先生 ペンギン先生
もとになったBPFは、1992年12月付の論文で示されたパケットフィルタだったんだ。それを拡張したeBPFを操作するbpf()システムコールは、Linux 3.18で入ったよ。もとのBPF(クラシックBPF)と違って、カーネルの補助関数を呼んだり、「マップ」というデータ構造でユーザー空間のプログラムとデータをやり取りしたりできるから、用途がパケット以外に広がったんだね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「eBPF」って出てきたら「Linuxカーネルに、検証済みのプログラムを差し込んで動かす技術」と思えればだいたいOK!
📖 おまけ:英語の意味
「extended Berkeley Packet Filter」 = 拡張バークレーパケットフィルタ
💬 もとになったBPFは、ローレンス・バークレー研究所のマッカンとジェイコブソンが1992年12月付の論文(1993年冬のUSENIX会議で発表)で示したパケットフィルタだよ。今はパケット以外にも使えるので、eBPFは略語ではなく固有の名前として扱われているんだ

参考資料

← 用語集にもどる