XDPを使用してパケットを破棄したりネットワークを制御したりすることは知っていますが、プロセスレベルで同様のものをどのように実装しますか?
カーネルは私たちが実行しているプロセスを知らないので、eBPFを使用して特定のプロセスへのネットワークアクセスをどのようにブロックできますか(例:公開内部告発者)?
答え1
OpenSnitchはeBPFを使用してパケットをブロックしません。
eBPFを使用しますが、カーネルスタックの複数のポイントでパケットを追跡し、関連フローが関連付けられているプロセスに関する情報を含む、そのパケットのメトリックとメタデータを収集するために使用されます。あなたは見ることができますOpenSnitchカタログの関連検出器。
この情報はeBPFマップを介してユーザースペースに転送され、ユーザースペースエージェントはパケットをブロックするかiptables
新しいルールを挿入します。nftables
(ブロックの代わりにXDPプログラムを使用することも可能ですが、パケットをブロックするネットワークスタック内のすべてのプログラムからデータを収集する追跡プログラムを分離する必要があります。)
特定のプロセスに関連するパケットをドロップするようにシステム全体に何かを設定したい場合は、同様のアプローチを取ることができます。接続が関連付けられているプロセスを識別するトレースセクションを設定し、この情報を他のプロセスに提供します。パケットのコンポーネントを破棄します。
代わりに、監視したい特定のプロセスを識別してパケットをフィルタリングしたい場合(一部のパケットは許可されているがすべてのパケットは許可されていない)、プログラム接続に別のeBPFフック(ソケットまたはcgroup関連)を使用できます。特定のソケットまたはネットワークスタック機能に。