時として、優れたテクノロジーが、その強みと実際のビジネスニーズが交わる転換点を迎えることがあります。これにより、そのテクノロジーは単に実現可能なだけでなく、実用的なものになります。Berkeley Packet Filter(BPF)は最近、Linux開発者の間でこの転換点を迎えました。BPFは、Linuxホスト上で極めて効率的にインターセプトと処理を行うポイントであり、近い将来、Windowsサーバーにも対応範囲が広がると期待されています。利用可能なデータは多岐にわたり、サイト信頼性エンジニアリング(SRE)の運用タスクにおけるフルスタックの可視性向上に直接貢献します。また、セキュリティやトラフィック管理に関する課題の解決にも自然に適合します。フックも多岐にわたり、オブザーバビリティ、セキュリティ、ネットワークの各専門家にとって魅力的な、BPFアプリケーション用の有用なトリガーポイントを豊富に提供します。BPFは、過大なコストをかけずにオブザーバビリティを実現するのに適したテクノロジーです。そして、そのすべてはオブザーバビリティから始まります。
BPFは、その基本設計により、コンピューティング処理をほぼ最大限の効率(1ワット当たりのコスト)で実行できます。さらに、ツールチェーンがバイトコードを生成するため、低レベルのアセンブリ言語のようなプログラミングではなく、目的とする成果に集中できます。なぜでしょうか。BPFの真価を引き出すのは、次の2つの設計上の特性です。
命令セット設計
BPFのソフトウェア設計は、当時登場しつつあった最新のCPUアーキテクチャを意図的にモデルとしています。実際、プロセッサー用語が使われているのは、BPFの要素と用途を正確に表しているためです。BPFにはレジスターと命令があり、CPUが直接処理できるように設計されています。BPFはBSD Packet Filterの設計(1992年)を基に、現在のレジスターベースのCPUアーキテクチャにより適するよう再設計されたパケットキャプチャーフィルターマシンです。この設計は2014年、「Enhanced Berkeley Packet Filter」、すなわちeBPFがLinuxv3.18のkernelに導入されたことで自然な発展を遂げました。リリース当初、eBPFをClassic Berkeley Packet Filter(cBPF)と区別することは重要でした。現在サポートされているすべてのkernelバージョンには2014年の機能強化が含まれているため、今日ではこの区別の重要性は低下しています。注目すべき機能強化として、レジスター幅の拡大(32ビットから64ビットになり、キャッシュラインまたはクロックサイクル当たりの処理量が増加)、レジスター数の増加(2個から10個になり、最新のCPUレジスターとkernel ABIを1対1で対応付けやすくなったこと)、BPFプログラムの安全性と有用性を高める複数の命令セット強化が挙げられます。
リンク層
BPFは、ネットワークタップとパケットフィルターで構成されます。タップは、ネットワーク回線から特定のネットワークインターフェースにパケットが到達する際に、データリンク層で動作します。パケットをコピーし、フィルターが検査できるようにします。この挿入ポイントにより、Linuxホストのネットワークパス全体を可視化できます。受信トラフィックではホストプロセッサーが処理を開始する前、送信トラフィックではホストからネットワーク回線へ送出される直前にあたります。この図は、BPFが受信パケットの経路と交差する位置をデータリンク層として示しています。

利用可能なデータは多岐にわたり、SREの運用タスクにおけるフルスタックの可視性向上に直接寄与します。この例では、フィールドのうち、IPv4ヘッダーで最もよく使用されるものをいくつか取り上げます。

このデータを使用してポリシーを定義し、パケットフィルタリングをカスタマイズできます。次のポリシーは、特定の宛先IPアドレスに送信されるTCPパケットをフィルタリングします。
オブザーバビリティにeBPFを活用すると、1つで2つのメリットが得られます。観測したデータを、観測以外の目的にも利用できるためです。たとえば、トラフィックルーティングやセキュリティに活用できます。
先ほどご紹介したデータセットに戻ると、Linuxホストへのトラフィックの流入経路を可観測性の観点から把握するために使用するデータの一部は、ほかの用途にも役立ちます。たとえば、送信元IP、宛先IP、宛先ホスト、ポートは、流入トラフィックのルーティングとアクセス制限の両方に利用できます。
用途を問わず、すべてはBPFタップによるパケットのコピーから始まります。コピーが取得されると、データをメモリに格納し(詳しくは「BPF Maps」を参照)、テレメトリストリームとしてエクスポートできるほか、ポリシーやフィルタリング処理を指定する他のBPFプログラムでも同時に活用できます。ここで、オブザーバビリティからトラフィック管理とセキュリティへと用途が分岐します。BPFの極めて高い効率性を最大限に活かすには、必要なデータとその使用方法を明確に把握することが出発点となります。本シリーズの次回の記事では、同僚のMuhammad Waseem Sarwarが、Linuxネットワークスタック内のさまざまな位置でBPFプログラミングを行うための選択肢を解説します。
著者について

関連するブログ記事

SOAS 2025:足並みの乱れが凡庸さを招く
AI導入における方針の不一致は、非効率を招きます。セキュリティ、自動化、導入の各戦略を整合させ、AIの可能性を最大限に引き出す方法をご紹介します。

WebAssemblyが重要な理由
WebAssembly(Wasm)は、あらゆるプラットフォームで高性能なアプリケーションを実現する、ポータブルで高速かつセキュアなバイナリ命令セットです。
インフラストラクチャは依然として格好の攻撃経路
クラウドコンピューティングでは、APIやドラッグ&ドロップ式の設定ツールを活用し、ネットワークやインフラストラクチャを敬遠する人がそれらを直接扱わずに済むようにすることで、インフラストラクチャへの対応を不要にすることが長年追求されてきました。しかし、インフラストラクチャを無視することも、攻撃の主要な標的であるという事実を見過ごすこともできません。
堅牢なデータアーキテクチャがもたらす戦略的メリット
適切に構築されたデータアーキテクチャがもたらす効果は、業務プロセスの改善にとどまりません。戦略的な業務効率の向上、より深いビジネスインサイトの獲得、隣接するビジネス機会への展開にもつながり、これらすべてをより俊敏に実行できるようになります。
デジタルワークフローにおける不正検知には、データだけでは不十分
2019年には、業界全体でクレジットカード詐欺の試みが約25万件確認されました。これは約2分に1件の割合です。今日、不正を検知するには、デジタルワークフロー上のできるだけ多くのポイントから収集したデータを相互に関連付け、手作業によるデータ処理をはるかに上回る速度で分析する能力が求められます。