図 DPIの仕組み
図 DPIの仕組み
[画像のクリックで拡大表示]

 DPIはDeep Packet Inspectionの略で、IPパケットのデータ部分(ペイロード)の情報を基に、フィルタリングなどの処理方法を決める機能である。ルーターやスイッチ、帯域制御装置、UTM(Unified Threat Management)、次世代ファイアウォールなどの機器がDPIを搭載する。用途はウイルス対策や特定のアプリケーションの制限など様々である。

 DPIの登場以前は、パケットの処理方法はヘッダー部分に含まれる宛先/送信元IPアドレスやポート番号などを基に決めるのが一般的だった。この方法をSPI(Stateful Packet Inspection)と呼ぶ。

 しかしインターネットの利用が一般化し、その上で動くサービスやアプリケーションが複雑になると、SPIでは不十分になってきた。例えばインターネット上での攻撃が高度になり、「パケットのヘッダー部分は正常に見えるが、データ部分にウイルスなどが埋め込まれている」といったケースが出てきた。そこでパケットのデータ部分もチェックして、もっと細かい処理を実現できるようにしたのがDPIだ。

 DPIの実装はベンダーごとに異なるものの、大まかにプロキシ型とフロー型の2種類に分けられる。

 一般にIPネットワークでは、データを分割して複数のパケットに載せて送り出す。プロキシ型のDPI機器は複数のパケットを一度メモリーにためて、元のデータに復元してから内容をスキャンする。そしてスキャンの結果に基づき、管理者があらかじめ決めておいた方法に従ってパケットを処理する(図の左下)。例えばウイルスが含まれる場合は廃棄し、正常ならそのまま宛先にパケットを転送するといった具合だ。一方フロー型では、複数のパケットに分割して送られてきたデータを、メモリーにためずそのままスキャンして処理する(図の右下)。

 プロキシ型とフロー型には、それぞれメリットとデメリットがある。

 プロキシ型はZIPなどの圧縮ファイルを送る場合、いったんメモリーにためたデータから元のファイルを復元し、圧縮を解いてから内容をスキャンする。そのため、ファイルの圧縮形式に関係なくデータの内容を調べることができる。ただしメモリーにためる分だけ時間が掛かってしまう。メモリーの容量には限りがあるので、スキャンできるデータの大きさにも制限がある。

 フロー型では、データをメモリーにためないので処理に時間が掛からず、データの大きさに制限もない。ただしDPIのエンジンが対応していない圧縮形式のファイルデータは無意味なビット列と認識してしまうため、適切に処理できない。

 導入企業は、必要となる性能や、社内で主にやり取りするファイルの種類によって、どちらかを選ぶことになる。