ファイアウォール
ファイアウォール(Firewall)は、コンピュータネットワークにおいて、ネットワークの結節、コンピュータセキュリティの保護、その他の目的のため、通過させてはいけない通信を阻止するシステムを指す。
ファイアウォールは、外部からの攻撃に対する防御だけではなく、内側から外部への望まない通信を制御することも出来る。ネットワークの利便性を損ねる場合もあるが、標的型攻撃などにより、内部にトロイの木馬が入り込んでしまっている場合などに、その活動を妨げる効果が期待できる。
ルーターにファイアウォールの機能を実装したものは、そのルーターを指して言うこともあるし、そういったアプライアンス商品などもある。近年ではネットワークの終端にあたる個々のコンピュータでも自分自身の防御のために、外部と接続するネットワークプロトコルスタック中に、望まない通信を防ぐ(たとえばTCPの接続要求など)フィルタなどを持っているものも多く、それらを指して言うこともある(たとえばWindowsには「Windows ファイアウォール」、macOSには「アプリケーションファイアウォール」がある)。
名称の元となった英語の「Firewall」は防火壁のことであり、通過させてはいけない通信を火に例えている。ファイアウォールを境界として3種類のゾーンを作成する。パケットの通過、拒否を決定するルールは、異なるゾーンへと向かうパケットを対象として作成することになる。
内部(Inside)ゾーン:外部から守るべきネットワーク。基本的に信頼できるものとして扱う。
外部(Outside)ゾーン:攻撃元となる可能性のあるネットワーク。基本的に信頼出来ないものとして扱う。
DMZ(DeMilitarized Zone:非武装ゾーン):内部と外部の中間に置かれるゾーン。基本的に外部からアクセスできるのはこのゾーンのみとなる。
以下では、OSI参照モデルに従ったレイヤによって分類しつつ説明する。
OSI参照モデルにおけるネットワーク層(レイヤ3)やトランスポート層(レイヤ4)に相当するIPからTCP、UDP層の条件(ポリシー)で、通信の許可/不許可を判断するもの。狭義でのファイアウォールとは、このタイプのものを指す。このタイプはさらに、スタティックなものとダイナミックなものとに分類できる。
基本的にはレイヤ3で通信制御を判断するが、フィルタの種類によってはレイヤ4のヘッダも参照する。すなわち、TCP/UDPのセッション単位で管理する訳ではない。ただし、ステートフルパケットインスペクション型ではTCP/UDPセッションの一部も記憶して判断動作する。
IP通信において、宛先や送信元のIPアドレス、ポート番号などを監視し、あらかじめ設定した条件によって、その通信を受け入れる(ACCEPT)、廃棄する(DROP)、拒否する(REJECT)などの動作で通信を制御する。具体的には、外部から内部へ向かうパケットを選別して特定のサービスのみを通す、また内部から外部へ向かうパケットも、セキュリティホールになりかねないため、代表的なサービス以外は極力遮断する、といった設定が行われることが多い。仕組みが単純なため高速に動作するが、設定に手間がかかる、防ぎきれない攻撃があるなどの問題点がある。
宛先および送信元のIPアドレスやポート番号などの接続・遮断条件を、IPパケットの内容に応じて動的に変化させて通信制御を行う方式。
スタティックなパケットフィルタで内部と外部で双方向の通信を行う場合は、内部から外部へ向かうパケットと、外部から内部へ向かうパケットの双方を明示的に許可しなければならない。一方、ダイナミックなパケットフィルタでは、内部から外部の通信を許可するだけで、その通信への応答に関してのみ、外部からの通信を受け入れる、といった動作を自動的に行う。
ステートフルインスペクション(Stateful Packet Inspection、SPI)ともよばれる、ダイナミックなパケットフィルタリングの一種。
レイヤ3のIPパケットが、どのレイヤ4(TCP/UDP)セッションに属するものであるか判断して、正当な手順のTCP/UDPセッションによるものとは判断できないような不正なパケットを拒否する。そのため、TCP/UDPセッションの一部情報を記憶して判断動作する。具体例として、ヘッダのSYNやACKフラグのハンドシェイクの状態などを記憶し、不正に送られてきたSYN/ACKパケットを廃棄する。
レイヤ3・IPパケットではなく、TCP/IPなどのレイヤ4・トランスポート層のレベルで通信を代替し、制御する。内部のネットワークから外部のネットワークへ接続する場合は、サーキットレベルゲートウェイに対してTCPのコネクションを張ったり、UDPのデータグラムを投げることになる。サーキットレベルゲートウェイは、自らに向けられていたIPアドレスとポート番号を本来のものへと振り替え、自らが外部と通信した結果を返すという動作をする。代表的なソフトウェア実装としてはSOCKSがある。また、ハードウェア実装としてレイヤ4スイッチにもこの機能を持たせる事ができる。
サーキットレベルゲートウェイは、あらかじめ多数のポートを開けたりNATを用意しなくても、プライベートIPアドレスしか持たない内部のネットワークからでも、外部のネットワークへ接続できるという点がメリットである。
パケットではなく、レイヤ7のHTTP や  といった、アプリケーションプロトコルのレベルで外部との通信を代替し、制御するもの。一般的にはプロキシサーバと呼ばれている。アプリケーションゲートウェイ型ファイアウォールの内部のネットワークでは、アプリケーションはアプリケーションゲートウェイ(プロキシサーバ)と通信を行うだけであり、外部との通信はすべてプロキシサーバが仲介する。アプリケーションプロキシが用意されていないサービスについては、サーキットプロキシで対応する事が可能である。
このため、アプリケーションゲートウェイで許されているプロトコルでトンネリングを行うソフトウェア、例えばSoftEtherやhttptunnelといった、運用方法によってはセキュリティホールになりうる実装の利用を、かえって促進してしまうという事例も近年目立っている。強すぎるセキュリティポリシーが迂回路を招いてしまっているとも言える。
プロキシは単に中継するだけの物が多いが、レイヤ7ファイアウォールはアプリケーションの通信の中身も検査する事ができる(例:アクセスURLチェック、ウイルスチェック、情報漏洩検出)。そのため、検査の仕方によってはレイヤ7ファイアウォールは相当な負荷が掛かり、ファイアウォールの処理上も、通信上もボトルネックとなることもある。また、未成年に好ましくないコンテンツのみを、末端のユーザにはプロキシサーバの存在を意識させない状態で、自動的にフィルタリングしてしまうといった実装も可能である。
なお、アプリケーションの通信の中身も検査するため、電気通信事業者が自らが仲介する通信の内容に立ち入ってはならない(通信の秘密)と言う原理原則に反する検閲だと批判する向きもある。通信事業に携わる技術者や学者の間ではこういった種類のファイアウォールを設置するという発想を強く批判する向きもある2008年1月。
上述のパケットフィルタリング型や、サーキットレベルゲートウェイ型ではそれぞれ、レイヤ3スイッチ(ルーター)やレイヤ4スイッチ等のハードウェア機器の一部機能として組み込まれている事も多い。この場合、ある程度簡易な条件でしかパケット検査をできないため、簡易ファイアウォール、広義のファイアウォールと呼ぶこともある。レイヤー7ファイアウォール(L7FW)は通信の内容まで検査するため、L7FWが本来の(狭義の)ファイアウォールであるとすることもある。
ソフトウェアによる実装としては、UNIXでは伝統的にipfwが使われてきた。カーネルレベルで動作するため、オーバーヘッドが小さく高速に動作する。macOSでもipfwが実装されている。Linuxカーネルには iptables、ipchains、nftables等が実装されている。
WindowsではZoneAlarm、ノートン インターネットセキュリティ、ウイルスバスター、NetOp Desktop Firewall等のフリーウェアないし商用アプリケーションが普及しているが、これらはファイアウォールというよりは、IDSに近い動作をしている。しかし、一般的にファイアウォールという語が防護のイメージを喚起しやすいためか、用語は混乱して使われている。一般的には、パーソナルファイアウォールと呼ばれる。
また、Windows XPでは、OSの機能として簡易的なファイアウォールが標準で搭載されている(Windows XP SP2ではユーザーが初期設定を行わずに利用できるように改良された)。純粋にスタティックなパケットフィルタ型ファイアウォールの実装としては、NEGiESなどがある。
Cisco PIX and Cisco ASA
Nortel Stand-alone and Switched Firewall
VSR - バリオセキュア
Devil-Linux (GPL)
pfSense (BSD-style license) (m0n0wall fork)