パーソナル型ファイアウォールは,パソコンにインストールしてパソコン単体のセキュリティ・レベルを確保する。WindowsXPなら,「Windowsファイアウォール」としてOSが標準で備えている。それ以外のOSには市販ソフトを購入する必要があるが,ウイルス対策ソフトとセットになっていることが多いため,一般的に利用されている。

三つのフィルタでパケットを検査

 パーソナル型ファイアウォールは,OSのTCP/IP処理ソフトの上下でパケットをチェックし,フィルタリングする。LANアダプタとTCP/IP処理ソフトの間,TCP/IP処理ソフトとアプリケーションの間でパケットを横取りして,内容を検査したうえで本来のあて先に渡すわけである。パケットを一時的に横取りするだけなので,ユーザーやアプリケーションは特に意識する必要はない。アプリケーションやOSの設定を変える必要もない。

 このパーソナル型ファイアウォールは,パソコンが送受信するパケットを三つのフィルタで検査するのが基本だ(図2-1)。それは,
フィルタ1:LANアダプタとTCP/IP処理ソフトの間で動作するフィルタ
フィルタ2:TCP/IP処理ソフトとアプリケーションの間で検査するフィルタ
フィルタ3:アプリケーション自体を検査するフィルタ

である。

図2-1●パーソナル型ファイアウォールのしくみ
図2-1●パーソナル型ファイアウォールのしくみ
TCP/IP処理前,処理後,アプリケーションとのインタフェースの3段階でフィルタリングするのが一般的だ。
[画像のクリックで拡大表示]

 フィルタ1では,ping(ピング)*1パケットやTCPの接続要求パケットを多数送信する攻撃など,TCP/IP処理ソフトに対する攻撃パケットを検出して遮断する。TCP/IP処理ソフトをハングアップさせるようなパケットをここで遮断する。

 フィルタ2は,動的フィルタリングやステートフル・インスペクションを実行する中核のフィルタである。パソコンからの送信パケットに対応する正しい応答パケットだけを通すようにする。

 フィルタ3は,実際に通信をしているアプリケーションをチェックするフィルタである。通信アプリケーションが登録済みかをチェックし,登録されていない場合は,その旨をパソコン画面にポップアップ表示する。これにより,ウイルスなどの不正プログラムが外部に攻撃を仕掛けたり,メールを送ったりするのを遮断する。

アプリケーションを見て判断

 パーソナル型ファイアウォールの最大の特徴は,図2-1のフィルタ3,つまりアプリケーションを見て不正な通信をブロックできることだ。これは,ゲートウエイ型ファイアウォールに対する強みでもある。IPアドレスやポート番号だけでは通していいかを判断しにくい通信も容易に止められる。市販ソフトだけでなく,WindowsXPに付属するWindowsファイアウォールもこの機能を備えている。

 アプリケーションのチェックが特に有効なのは,パソコン内で動き出したスパイウエア*2やウイルスが,パケットを送信したり,メール・ソフトなどを使ってデータを送信しようとするとき。

 スパイウエアやウイルスが通信しようとするときは,インターネット・アプリケーションで広く使われているポート番号をあて先に指定して通信を試みることが多い。例えばWebアクセスに使う80番をあて先ポート番号に指定する。こうなると,ゲートウエイ型ファイアウォールはパケットだけを見て不正なパケットだと判断するのが難しい。

  一方,パーソナル型ファイアウォールはパソコンにインストールして使うので,そのパソコンで動いているプログラムを監視できる。つまり,パソコン内で動いているどのアプリケーションが通信しようとしているかがわかる。

 そこでパーソナル型ファイアウォールには,あらかじめユーザーが通信を許可するアプリケーションを登録しておく。そして,登録されていないアプリケーケーションが通信を開始しようとすると,画面に警告メッセージを表示し,通信を許可するかどうかをユーザーに判断させる(図2-2)。

図2-2●アプリケーションを見て不正な通信をブロック
図2-2●アプリケーションを見て不正な通信をブロック
パーソナル型ファイアウォールはパケットのデータ部分まで検査する機能を備えていることが多い。この機能があると,ウイルスなどの攻撃パケットをアプリケーションへ渡す前に遮断できる。

 ユーザーが決めたアクション(許可か禁止か)はファイアウォールのフィルタリング・ルールに反映され,同じアプリケーションが再び通信しようとしたときは,そのルールが適用される。したがって,ユーザーがパーソナル型ファイアウォールを入れて使い続けていくうちに,自然とルールが出来上がる。

 なお,WindowsXPに付属するWindowsファイアウォールは,アプリケーションが外側からの通信を待ち受けようとすると警告ウインドウを表示するが,アプリケーション側から通信を開始するときは警告ウインドウを表示しない。