Part2では,身近なTCP/IP通信の例として,LAN上のパソコンとWebサーバーの間にフィルタリング装置があるケースを想定して,実際にどんなテーブルが作成され,どのようにしてほかのパケットと区別するのかを見ていこう。
Part1で見てきたように,パケット・フィルタリングの基本は,どんなパケットの通過を許可・禁止するかというポリシーを決め,フィルタが解釈できるフィルタリング・テーブルに反映させることだ。Part2では身近なTCP/IP通信の例としてWebアクセスを取り上げ,実際にどんなテーブルが作成され,どのようにしてほかのパケットと区別するのか探っていこう。
LAN上のパソコンとWebサーバーの間にフィルタリング装置があるケースを想定。そして,この装置によって,LAN側からのWebアクセスだけが許され,ほかの通信はすべて禁止される場合を考える(図1)。
このときのポリシーは,「Webアクセスを通し,それ以外はすべて遮断」となる。では,フィルタリング装置が解釈できるフィルタリング・テーブルはどうなるだろうか。
Webアクセスを通す例を考える
Part1で見てきたように,IPパケットの5種類のヘッダー情報とパケットが流れる向きを組み合わせて作ってみると,図1の下にある表のようなものになる。実際の機器に対しても,これと似たような表に登録することが多い(図2)。
この表は,1行で一つのフィルタリング・ルールを表している。そしてフィルタリング装置は,このテーブルの上の行から順番に解釈し,通過しようとするパケットと照合する。もし,複数の行が通過パケットと合致したら,下の行の処理を優先する。つまり,1行目にはパケットを遮断,2行目には通過と書かれていて,どちらの条件にもパケットが合致するときは,2行目の方を優先し,パケットを遮断せずに通過させる。
ポート番号で限定する
もう少し詳しく見てみよう。まず1行目から。この行はすべての項目に「*」が書かれている。この*は,その項目が取り得る任意の値という意味だ。したがって,1行目のルールは,通過しようとするすべてのパケットが合致することになり,「どんなIPパケットも遮断せよ」という意味になる。
2行目と3行目はWebアクセスのパケットだけを限定して通過させるルールである。2行目がLAN側のパソコンからWebサーバーへ向かって流れる外向きパケット,3行目がWebサーバーからの返信パケット(内向き)の条件になる。
Webアクセスでは,HTTPというプロトコルを使ってWebサーバーにページのデータを要求するパケットを送ると,サーバーからページ・データが入ったパケットが返信されてくる。こうしたパケットだけを通過させるように二つのルールが記述されている。
具体的に見ると,HTTPはTCPを使う通信なので,フィルタリング・テーブルのプロトコル欄は,外向きと内向きパケットのどちらもTCPに限定する。
また,サーバーはTCPの80番ポートでWebアクセスを待ち受けているのが一般的なので,外向きパケットのあて先ポート番号と,内向きパケットの送信元ポート番号を80番に限定する。
さらに,LAN側パソコンのIPアドレスは192.168.0.1~192.168.0.254の範囲のどれかが割り当てられているとすれば,IPアドレスの範囲も「192.168.1.*」のように限定する。
一方WebサーバーのIPアドレスは,限定してしまうと特定のWebサーバーにしかアクセスできなくなる。このため通常は,外向きパケットのあて先IPアドレスと内向きパケットの送信元IPアドレスは,任意の値(図1のテーブルでは「*」)を許すようにする。
パケット・フィルタリングのポリシーを決めるとき,最初に考えなければならない前提条件がある。
それは,(1)遮断するパケットだけ限定して,ほかは通過させるスタンスと,(2)通過させるパケットを限定して,ほかを遮断するスタンスである。つまり,デフォルト許可とデフォルト禁止のどちらかを最初に決めるのだ(図A)。
一見,これらのスタンスは同じようにも思える。しかし,実際の場面では,セキュリティ強度と使い勝手の面で違いが出てくる。
デフォルト許可にした場合,クラッカなどからの攻撃に備えて,危険なパケットを遮断するフィルタリング・テーブルを登録することになる。しかし,攻撃手法は無数にあるので,テーブルに登録されていない不正パケットを通してしまうかもしれない。
そこで,セキュリティを確保するためには,デフォルト禁止のスタンスで通したいパケットだけを登録していくのが一般的である。実際,多くのファイアウォール製品が,デフォルト禁止の状態から許可するものだけを登録するようになっている。
ただし,デフォルト禁止のスタンスにすると,テーブルに登録されていないアプリケーションの通信は,クラッカからのパケットでなくても遮断される。