MAC層でパケットをキャプチャする

MAC層でパケットをキャプチャする

私は、中間ネットワーク ノード (Linux ベースのスイッチなど) でパケット全体 (MAC ヘッダーを含む) をキャプチャし、パケットに対して何らかの処理を実行してから中間ノードに送信する、MACsec に似たセキュリティ ソリューションを実装したいと考えています。

これを実行するのに役立つ適切なリソースを教えてください。現在、NIC ドライバーの変更を必要とするソリューションを検討しています。これよりも簡単なソリューションはありますか? 他の人はどのように MACsec を実装していますか?

ここで注意していただきたいのは、pcap や同様の方法を使用してパケットを単にキャプチャするだけではありません。私が求めているのは、パケットが中間ノードを通過する前にキャプチャし、改ざんして目的の受信者に送信できるようにすることです。

ありがとう

答え1

Linux カーネルがパケットを受信するときにそれを分析したい場合は、カーネル ドライバーを作成する必要があり、場合によってはカーネル自体を変更する必要もあります。インターフェイスがデータを受信すると、処理はすぐに開始されます。次のレイヤーを受信するように登録されているものはすべて、ハンドラーが呼び出されます。MAC ヘッダーはそれほど多くの処理を必要としないため、IP レイヤー ハンドラーが最初に多くの処理を開始します。

MAC ヘッダーを操作して独自の処理を実行したい場合は、MAC ヘッダーを受信した直後、IP 処理の前に自分自身を挿入する必要があります。または、仮想 NIC となるドライバーを作成することもできます。そのようにすれば、必要に応じてデータを処理できます。仮想 NIC は、実際の NIC と同じようにすべてのデータを参照します。カーネルをいじり回したり、自分のプロジェクトのためだけにカーネルを再構築したりしたくない場合は、これがおそらく最善の策です。

私の答えはここにありますLinux カーネル ネットワークについて学ぶための優れたリンクがいくつか紹介されています。また、Rami Rosen 著の『Linux Kernel Networking: Implementation and Theory』もお勧めします。ネットワーク スタックを詳細に調べるのに最適なリソースです。

MACSec はいずれカーネルに実装されるでしょう。たとえば、IPSec はセキュリティ ポリシーをカーネル内に保持し、ユーザーランド デーモンはトンネル接続を追跡します。そのため、残念ながら、必要なアクションを実行するには、ある程度のカーネル コードを記述する必要があると思います。

答え2

少し前に、レイヤー2、レイヤー3、またはそれ以上のレイヤーのデータパケットを少し試してみたかったのです。Pythonベースの便利なツールを見つけました。このツールは スカピー
パケットをキャプチャして操作できます。また、必要に応じてパケット ベースのフィルターを構築することもできます。

関連情報