リビング+:特集 2003/05/16 21:29:00 更新

短期集中連載:ブロードバンドルータの最新機能を試す
第2回:SPIと動的パケットフィルタリングの違い

中上級クラスのブロードバンドルータでは、もはや標準機能のように採用されている「ステートフルパケットインスペクション」(SPI)。ルータの最新機能の中でも、もっともわかりにくいものの1つだろう。ここでは、ユーザーにとって、どのようなメリットがあるのかを中心に解説したい

 「ステートフルパケットインスペクション」(SPI)における「ステートフル」とは、過去のパケットの動向から導き出される“通信の状態”を、フィルタリングの判断材料にするという意味である。

 例えば、ftpでは、まず、クライアントからftpサーバに「コントロールコネクション」が作成され、コマンドが送りつけられる。その後、ftpサーバからクライアントに「データコネクション」が作成され、実際のデータをやりとりする。「コントロールコネクション」でコマンドが発行される前に「データコネクション」が作成されることはない。もし、いきなり準備もなく「データコネクション」が作成されたとしたら、それは不正アクセスである可能性が高い。

 従来の「ステートレス」なパケットフィルタでは、1つひとつのパケットしか見ていなかったため、このような状況を見逃してしまう。不正アクセスである可能性が高いパケットであっても、通す設定になっていたら通してしまい、「データコネクション」が作成される危険があるわけだ。パケットを遮断するかしないかの基準が常に一定であるため、従来のパケットフィルタは「スタティック」(静的)パケットフィルタともいう。

 これに対しSPIでは、それまでの「通信の状態」を記録しているため、現在の通信状態と矛盾するパケットは、不正パケットとして遮断することができる。言い換えれば、一連のパケットの流れを監視し、送られてくる順番や内容などをチェックして矛盾が見つかったら、パケットを破棄するのである。ftpの例でいえば、「コントロールコネクション」が作成されてもいないのに、「データコネクション」を作成しようとしたパケットは遮断される。

 一方、定められた手順に沿って「データコネクション」が作成されれば、パケットは通過を許可される。遮断するか許可するかの判断は「通信の状態」に応じて動的に変わってくるため、このようなフィルタは「ダイナミック」(動的)パケットフィルタとも呼ばれる。

 要は、パケット1つひとつを単体で評価する従来のパケットフィルタに比べ、SPIは一連のパケットの流れをまるごと、「通す」か「通さないか」の判断材料にするという点が新しい。

SPIのメリット、まずは初心者向けのメリット

 このようなしくみをもつSPIだが、ユーザーにとっては、どのようなメリットをもたらすのであろうか。それはユーザー層、製品によって変わってくるようだ。ここでは、初心者向けのメリットと上級者向けのメリットとして分けて考えてみたい。まずは、初心者向けのメリットである。

 従来のパケットフィルタは、機能を搭載しているだけでは安全面で貢献することはなかった。初期状態では何もフィルタリングルールが設定されておらず、環境に応じた細かなルールを設定して初めて効果が発揮されるからである。結局のところ、フィルタリングルールを作成できない初心者には、あまり役に立つ機能ではなかった。

 ところが、SPIは、細かなフィルタリングルールを用意せずにデフォルトのルールだけだったとしても、先述したような「通信の状態」に反する(=一連の流れに沿っていない)不正なパケットを遮断してくれる。特別な設定を施さなくてもセキュリティが高まるのである。ユーザーは、ただSPIの機能を有効にさえすればよい。

通信セッションの向きと実際にパケットが流れる向きは一致しない

 次に、上級者向けのメリットを考えてみたい。ただ、その前に通信の方向性に関する注意点を説明しておこう。

 例えば、PC上でWebブラウズしているところを想定する。このような状態は「PCからWebサーバへ」のアクセスだとイメージしがちだが、実際のパケットは「PCからWebサーバへ」(要求)流れるだけではなく、「WebサーバからPCへ」(応答)もまた流れていく。アクセスしたWebサーバが、Webページの内容を送り返してこなければ、PC上のWebブラウザは何も表示することができない。応答があってこそ通信というものは成り立つものだ。

 つまり、通信セッションとしての向きは「PCからWebサーバへ」という片方向のものであっても、実際のパケットは双方向に流れている。通信セッションの向きと、パケットの向きは必ずしも一致しないのである。

 そこで問題になるのが、フィルタリングルールの設定法である。セキュリティを高めるためには「外部からの通信はすべて拒否、内部からの通信はすべて許可」のように設定することが多い。ところが、パケットレベルで外部からの通信をすべて拒否してしまうと、不正アクセスどころか、Webブラウズさえ不可能になってしまう。このため、従来のパケットフィルタでは、通信セッションの流れとパケットの流れは、はっきり区別してフィルタリングルールを設定しなければならない。

 これを区別するためには、外部から送られてくるTCPパケットのヘッダをみて、「SYNフラグ」や「ACKフラグ」などをみつける必要がある。TCPは、通信の信頼性を高めるために、双方のコンピュータが仮想経路と呼ばれる通信路を作ってから(通信セッションを確立)実際の通信を開始する“コネクション型”だ。このため、通信セッションを始めようとする接続要求パケットには、その目印となる「SYNフラグ」、通信セッションとは逆の向きとなる応答パケットには「ACKフラグ」がセットされている。これらのフラグを調べることにより、外部からの接続要求パケットは遮断し、外部からの応答パケットだけを許可することができる。

 しかし、たかだか「外部からの通信はすべて拒否」するだけにも関わらず、設定はややこしくなる。しかも、ストリーミング配信などに用いられるUDPパケットは、TCPと異なりコネクションレス型であり、このようなフラグはない。つまり、UDPの場合は、応答パケットを許可しようとすると、危険な接続要求パケットまで許可することになってしまう。

プロトコルTCPUDP
概要信頼性重視、コネクション型速度重視、非コネクション型
アプリケーション・プロトコルHTTP、FTP、TELNETなどDHCP、DNSなど
static.jpg
従来のパケットフィルタの設定例。内部からはWWW/DNSへのアクセスだけを許可し、その他のアクセスは禁止した。また、外部からのアクセスはすべて禁止している。表中、20番のフィルタのプロトコル“tcpest”は、TCPパケットのうちACKフラグがセットされているもの(応答パケット)の意味する。しかし、本物の応答パケットでなくても、ACKフラグさえセットされていれば、不正なパケットでも通過させてしまう。また、UDPパケットにはフラグによる区別がないため、21番のフィルタも応答パケット以外の不正パケットを通過させてしまう可能性がある(クリックで拡大)

上級者向けのメリット

 しかしSPIであれば、パケットのフィルタリングを通信セッションレベルで行うことができる。SPIのステートフルな性質のおかげで、例えば、Webサーバから送られてくるWebページの内容のような応答パケットは、「PCからWebサーバへ」のアクセスの一部と見なされる。このため、外部のサーバから送られてきたにも関わらず、このパケットは「内部からの通信はすべて許可」というルールによって通過が許可される。

 UDPのようなコネクションレスのプロトコルに関しても、仮想的なセッションと見なし「通信の状態」を記録しているため(PC側が送信した要求パケットを記録しているため)、適切な応答パケットだけを許可することが可能だ。

 このように、SPIではフィルタリングルールの設定が容易になる。従来のパケットフィルタとは違って、直感的に設定できるのである。これは、サーバなどを設置する上級者にとっては、かなりのメリットだろう。容易な設定はミスが生じにくく、結果としてセキュリティを高めることにつながる。とくに、複数IPアドレスが割り当てられるような環境では、ぜひSPIによるフィルタリングを活用して欲しいところだ。

spi.jpg
ステートフルパケットインスペクションの設定例。前出のパケットフィルタの設定例と同じ内容だが、こちらの方がシンプルな設定で済み、設定内容の意味も判りやすい(クリックで拡大)

 ところが残念なことに、SPI搭載モデルのすべてでフィルタリングルールを独自に設定できるわけではない。初心者向けのメリットだけを期待してSPIを採用した製品では、フィルタリングルールの設定ができない。自分でフィルタリングルールを作成し、SPIを活用したいと思う上級ユーザーは、SPIのフィルタリングルールをユーザーが設定できる製品を選ぶ必要がある。

「動的フィルタ」との違い

 先述したとおり、SPIはダイナミック(動的)パケットフィルタリングの1種である。しかし、例えば、ヤマハのルータに搭載されているような「動的フィルタ」は、SPIとはやや性格が異なる。

 SPIでは、接続を要求するパケットと応答のパケットを1まとめにして取り扱う。一方、ヤマハの動的パケットフィルタも、SPI同様、通信の状態に応じて動的にフィルタリングすることができる。ところが、接続を要求するパケットと応答のパケットを別々に記述しなければならない。接続を要求するパケットは、静的フィルタとして設定する。

dynamic1.jpg

dynamic2.jpg
「動的フィルタ」を利用した設定例。これも前出の2例と同じ設定にしている。動的フィルタは静的フィルタと組み合わせて利用することになる。外部→内部の向きでは、SPIと同じで応答パケット以外を通過させることはない。しかし、設定はSPIに比べやや複雑になる。なお、動的フィルタの向きが「out」となっているが、これは通信セッションとしての向きが内部→外部ということを表している(クリックで拡大)

 「動的フィルタ」ではきめ細かい設定も可能だが、反面、フィルタリングルールの見通しが悪くなってしまう。この点に関しては「動的フィルタ」よりSPIの方が使いやすい。

SPIの限界

 デフォルト設定のままでもセキュリティを高めることができるSPIだが、当然のことながら万能ではない。SPIを有効にしていても、ポート転送機能や仮想DMZ機能を用いて、不用心にポートを開放していれば、簡単に侵入されてしまうだろう。ブロードバンドルータに搭載されているようなSPIの場合、ウイルスに感染されたメールを遮断するような機能もない。

 SPIは、いわば例外的なパケットによる不正行為から守ってくれるものである。このため、ユーザーが開放しているポートへの「正常の」パケットは問題なく通過させる。SPI搭載のルータだからといって安心せず、セキュリティ対策はさまざまなものを組み合わせて講じるようにして欲しい。

前 ブロードバンドルータの最新機能 2/5 次

[吉川敦,ITmedia]



Special

おすすめPC情報テキスト

モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!