長谷川 泰右 NTTデータ関西テクシス ソリューションマーケティンググループ テクニカルサポート担当

ファイアウオールの2つの種類

 ファイアウオールは大きく,(1)パケット・フィルタリング型と(2)アプリケーション・ゲートウエイ型――の2種類に分類できる。両者の違いは,通信の扱い方にある。

図5●ファイアウオールの種類
ファイアウオールは大きく,(1)コネクションが両端のホストで確立される“パケット・フィルタリング型”と,(2)クライアントからのコネクションはファイアウオールとの間で確立され,そのリクエストをファイアウオールが中継する形で新規にサーバーに対してコネクションを確立する“アプリケーション・ゲートウエイ型”――に分かれる
 パケット・フィルタリング型ファイアウオールは,ルーターと同様にパケットを(ルールに基づいて)IPのレベルで転送する(図5[拡大表示](1))。つまり,クライアントがコネクションを張る相手は通信相手であるサーバーそのものである。

 一方のアプリケーション・ゲートウエイ型ファイアウオールは,プロキシとして動作する(同(2))。この場合,クライアントが直接コネクションを張る相手はファイアウオールである。ファイアウオールがクライアントの代理となって,目的となるサーバーに対して別のコネクションを張る。サーバーから見れば,ファイアウオールがクライアントとなるのである。

 一般的に,アプリケーション・ゲートウエイ・型の方が,WWWブラウジング時のJavaの実行禁止やTCPのデータ部分のチェックなど,きめ細かなアクセス制御を行うことができる。ただ,実際の製品を見てみると,アプリケーション・ゲートウエイ型ファイアウオール製品はパケット・フィルタリング型としても動作するものがほとんどであり,パケット・フィルタリング型ファイアウオール製品の中にも,アプリケーション・ゲートウエイ型として動作するものもある。

 なお最近のパケット・フィルタリング型ファイアウオールは「ステートフル・インスペクション(Stateful Inspection)」と呼ばれる機能を備えており,ステートフル・インスペクション型ファイアウオールと呼ばれることが多い。ステートフル・インスペクションとは,その名の通り,通信の状態を監視する機能である。ステートフル・インスペクションを備えないパケット・フィルタリング型ファイアウオールは,特定のプロトコルにおいて,大きな問題点を抱えている。

図6●パケット・フィルタリング型ファイアウオールの問題点
 例えば社内のクライアントPCからインターネット上のDNSサーバーへ名前解決リクエストを投げる場合を考えてみよう(図6[拡大表示])。クライアントからDNSへの行きのパケット(リクエスト・パケット)は,あて先IPアドレスがC(DNSサーバーのグローバル・アドレス),あて先ポート番号53,送信元IPアドレスがA(クライアントのプライベート・アドレス),送信元ポート番号が1024以上の任意の値――である。第2回に説明したように,TCP/UDPの通信では通信を開始する側の送信元ポート番号は1024以上の任意のポート番号が利用されるため,このような形になる。

 前述したようにファイアウオールは,通過しようとするパケットに対して,事前に設定したルールに照らし合わせてチェックを行う。図6の場合の行きのパケットを通過させるには,単純に,あて先ポート番号が53のパケットを通過許可としてルールを設定すればよい。問題は,DNSサーバーからの戻りパケットのルールである。送信元ポート番号が53の通信を許可してしまうと,送信元ポートが53で通信するように作成したアプリケーションからの通信は,悪意のあるものも含めてすべてファイアウオールを通過し,社内LANに達してしまう。あて先ポート番号でフィルタリングしようと思っても,1024以上のポート番号の通信をすべて許可する必要があり,大きく口を開けることになってしまう。

 そこでステートフル・インスペクションの登場だ。この機能を使えば,通過するパケットの状態を監視し,行きのパケットの通過を許可した時点で,戻りのルール(行きパケットに対する戻りパケット用)を動的に設定,許可することができる。なお,この戻りパケット用のルールは一定時間で無効となる。

 DNS以外にも,ファイル転送のFTP(File Transfer Protocol)を用いたアプリケーションなどで,ステートフル・インスペクションは有用だ。FTPでは,コントロール用(コマンド転送用)とデータ転送用の2つのTCPコネクションが張られるが,データ転送用のコネクションはサーバー側から張られる*7。これに伴い,インターネット側から社内に対してのコネクションを許可しなくてはいけないからだ。