通常のパケットフィルタ

ネットワーク上の通信は、ほとんどの場合で双方向です。何らかのデータを送信すると、そのデータに対する返事が返ってきます。パケットフィルタを行うためには、「通信は双方向」ということを考慮して適切に設定しなければいけません。

通常のパケットフィルタは、受信したパケットのIPアドレスやポート番号などをチェックして、パケットを許可するか拒否します。通常のパケットフィルタを利用していると、リクエストとそのリプレイのそれぞれの方向でどのような通信を許可するかをあらかじめ設定しておかなければいけません。つまり、通常のパケットフィルタでは、通信はリクエストとそのリプライから成り立っているという通信の状態は特に考慮せず、パケット単位でファイアウォールを通過させるかどうかを決めているだけです。

条件を作成する際、サーバ側のアプリケーションのポート番号はウェルノウンポートで決まっています。ところが、クライアント側のアプリケーションのポート番号はダイナミックに決められることがほとんどです。サーバからのレスポンスを通過させるために、ファイアウォールで許可するポート番号の範囲が広くなってしまいます。また、クライアントは複数存在するので、ファイアウォールを通過する通信のIPアドレスはある程度の範囲で指定することになります。許可するパケットのIPアドレスやポート番号を範囲指定しなければいけないということは、不正なパケットがファイアウォールを通過できてしまう危険性が増すことになります。

spi01.png
図 通常のパケットフィルタ

SPIのパケットフィルタ

通常のパケットフィルタより高度なパケットフィルタ技術として、SPI(Stateful Packet Inspection)があります。SPIのパケットフィルタは、通信が双方向であることを考慮しファイアウォールを通過する通信の状態を管理してフィルタリングします。
SPIによるパケットフィルタでは、クライアントアプリケーションのリクエストパケットがファイアウォールを通過できるように条件を設定します。クライアント側からのパケットを受信すると、ファイアウォールはパケットのIPヘッダやTCP/UDPヘッダ、アプリケーションヘッダなどを解析して、自動的にそのレスポンスパケットのIPアドレス、ポート番号の組み合わせだけをピンポイントで許可する条件を作成し、パケットを転送します。レスポンスパケットが返ってくると、自動的に作成された条件によってパケットが許可されることになります。そして、ファイアウォールではクライアントアプリケーションとサーバアプリケーション間の通信の状態をセッション情報として管理し、ファイアウォールを経由したアプリケーションの通信ができるようにします。なお、クライアントアプリケーションとサーバアプリケーションの通信が終了すると、セッション情報が削除されます。

spi02.png
図 SPI

また、SPIでのパケットフィルタは、TCPヘッダのフラグ情報の整合性を確認して、不正なパケットを拒否することも可能です。さらに、アプリケーションごとの通信の特徴を踏まえたフィルタリングを行うことも可能です。なお、自動的にリプライパケットを許可する条件を作成する機能を指して、ダイナミックパケットフィルタリングと呼ぶこともあります。