概要
ファイアウォール (防火壁) とは,ある特定のコンピュータ・ネットワークとその外部との通信を制御し,内部のコンピュータ・ネットワークの安全を維持することを目的としたソフトウェア,あるいはそのソフトウェアを搭載したハードウェアである. 英語で防火壁と表現するのは,外部から内部のコンピュータ・ネットワークへ侵入しようとするクラッキング行為を,火事に喩えたものである. ファイアウォールは,その動作するプロトコル階層によって細かく分類される.
パケット・フィルタ型
3 層 (ネットワーク層) や 4 層 (トランスポート層) に相当する IP から TCP,UDP 層の条件で,通信の許可 / 不許可を判断するもの. 狭義でのファイアウォールとは,このタイプのものを指す. このタイプはさらに,静的なものと動的なものとに分類できる.
なお,4 層ヘッダも参照するが,主として 3 層で判断動作する. すなわち,TCP/UDP のセッション単位で管理する訳ではない (ただし,ステートフル・パケット・インスペクション型では TCP/UDP セッションの一部も記憶して判断動作する.)
静的なパケット・フィルタ
IP 通信において,宛先や送信元の IP アドレス,ポート番号などを監視し,あらかじめ設定した条件によって,その通信を受け入れる (ACCEPT),廃棄する (DROP),拒否する (REJECT) などの動作を行うことで,通信を制御する. 具体的には,外部から内部へ向かうパケットを選別して特定のサービスのみを通す,また内部から外部へ向かうパケットも,セキュリティ・ホールになりかねないため,代表的なサービス以外は極力遮断する,といった設定が行われることが多い. 仕組みが単純なため高速に動作するが,設定に手間がかかる,防ぎきれない攻撃があるなどの問題点がある.
動的なパケット・フィルタ
IP パケットの内容に応じて,宛先や送信元の IP アドレス,ポート番号などの,接続や遮断といった動作のための条件を動的に変化させ,通信制御を行おうというもの. たとえば,静的なパケット・フィルタでは,内部と外部で双方向の通信を行う場合は,内部から外部へ向かうパケットと,外部から内部へ向かうパケットの双方を許可しなければならないが,動的なパケット・フィルタの場合は,内部から外部の通信を許可するだけで,その通信への応答に関してのみ,外部からの通信を受け入れる,といった動作を自動的に行ってくれる.
ステートフル・パケット・インスペクション (Stateful Packet Inspection,SPI)
動的なパケット・フィルタリングの一種である. 3 層の IP パケットが,どの 4 層 (TCP/UDP) セッションに属するものであるか判断して,正当な手順の TCP/UDP セッションによるものとは判断できないような不正なパケットを廃棄する. そのため,TCP/UDP セッションの一部情報を記憶して判断動作する. 具体例として,TCP ヘッダの SYN や ACK フラグのハンドシェイクの状態などを記憶し,不正に送られてきた SYN/ACK パケットを廃棄する. (SPI は侵入防止システムの機能としてもとりあげている.)
サーキットレベル・ゲートウェイ型
IP パケットではなく,TCP/IP などのトランスポート層のレベルで通信を代理 (proxy) でおこない,制御する. 内部のネットワークから外部のネットワークへ接続する場合は,サーキットレベル・ゲートウェイに対して TCP のコネクションを張ったり,UDP のデータグラムを投げることになる. サーキットレベル・ゲートウェイは,自らに向けられていた IP アドレスとポート番号を本来のものへと振り替え,自らが外部と通信した結果を返すという動作をする. 代表的なソフトウェア実装としては SOCKS がある. また,ハードウェア実装として 4 層スイッチにもこの機能を持たせる事ができる.
サーキットレベル・ゲートウェイは,あらかじめ多数のポートを開けたり NAT を用意しなくても,プライベート IP アドレスしか持たない内部のネットワークからでも,外部のネットワークへ接続できるという点が利点である.
アプリケーション・ゲートウェイ型
パケットではなく,7 層の HTTP や FTP といった,アプリケーション・プロトコルのレベルで外部との通信を代替し,制御するもの. 一般的にはプロキシサーバと呼ばれている. アプリケーション・ゲートウェイ型ファイアウォールの内部のネットワークでは,アプリケーションはアプリケーション・ゲートウェイ (プロキシサーバ) と通信を行うだけであり,外部との通信はすべてプロキシサーバが代替する. プロキシ (proxy) とは,英語で 「代理人」 を意味する. アプリケーション・ゲートウェイ型ファイアウォールに守られたネットワークは,プライベート IP アドレスで構築されることが普通である. 当然,アプリケーション・ゲートウェイが用意されていないサービスについては,一切外部とは通信出来ない. 安全性は高いが,内部ネットワークのユーザの利便性も下がる.
このため,アプリケーション・ゲートウェイで許されているプロトコルでトンネリングを行うソフトウェア,たとえば SoftEther や httptunnel といった,運用方法によってはセキュリティ・ホールになりうる実装の利用を,かえって促進してしまうという事例も近年目立っている. 強すぎるセキュリティ・ポリシーが迂回路を招いてしまっているとも言える.
プロキシは単に中継するだけの物が多いが,7 層ファイアウォールはアプリケーションの通信の中身も検査する事ができる (例:アクセス URL チェック,ウイルスチェック,情報漏洩検出). そのため,検査の仕方によっては7 層ファイアウォールは相当な負荷が掛かり,ファイアウォールの処理上も,通信上もボトルネックとなることもある. また,未成年に好ましくないコンテンツのみを,末端のユーザにはプロキシサーバの存在を意識させない状態で,自動的にフィルタリングしてしまうといった実装も可能である.
なお,アプリケーションの通信の中身も検査するため,電気通信事業者が自らが仲介する通信の内容に立ち入ってはならない (通信の秘密) と言う原理原則に反する検閲だと批判する向きもある. 通信事業に携わる技術者や学者の間ではこういった種類のファイアウォールを設置するという発想を強く批判する向きもある.
なお実際に,ISP のぷららがファイル共有ソフトウェア Winny の通信を全て遮断する事を計画・発表し,それに対して通信の秘密を侵害する可能性があるとして総務省から行政指導を受け,Winny 遮断は同 ISP ユーザの利用者の選択に任せるとした事例もあった.
具体的な実装例
上述のパケット・フィルタリング型や,サーキットレベル・ゲートウェイ型ではそれぞれ,3 層スイッチ, ルータや 4 層スイッチ等のハードウェア機器の一部機能として組み込まれている事も多い. この場合,ある程度簡易な条件でしかパケット検査をできないため,簡易ファイアウォール,広義のファイアウォールと呼ぶこともある. 7 層ファイアウォール (L7FW) は通信の内容まで検査するため,L7FW が本来の (狭義の) ファイアウォールであるとすることもある.
ソフトウェアによる実装としては,UNIX では伝統的に ipfw が使われてきた. カーネルレベルで動作するため大変高速である. Mac OS X でも ipfw が実装されている. (Mac OS X は現行ヴァージョン Mac OS X v.10.5 Leopard からは正式に UNIX である.) なお,Linux では iptables,ipchains といった実装が一般的である.
Windows では ZoneAlarm,ノートン・インターネット・セキュリティ,ウイルスバスター,NetOp Desktop Firewall 等のフリーウェアないし商用アプリケーションが普及しているが,これらはファイアウォールというよりは IDS に近い動作をしている. しかし,一般的にファイアウォールという語が防護のイメージを喚起しやすいためか,用語は混乱して使われている. 一般的には,パーソナル・ファイアウォールと呼ばれる.
また,Windows XP では,OS の機能として簡易的なファイアウォールが標準で搭載されている. (Windows XP SP2 ではユーザが初期設定を行わずに利用できるように改良された) 純粋に静的なパケット・フィルタ型ファイアウォールの実装としては,NEGiES などがある.
ここ最近においては,統合脅威管理 (UTM) が注目されており,ファイアウォールにゲートウェイ・アンチウイルス,不正侵入防御,コンテンツ・フィルタリング等の機能を追加し,統合的にゲートウェイで脅威から守るというアプローチがファイアウォールの付加機能として注目を浴びている.