ステートフルパケットインスペクション
ファイアウォールが、通信の状態(セッション)を記録しておき、許可した通信に対する応答のパケットを自動的に通過させる方式。応答の向きの許可ルールを個別に書かなくてよい。
イマシルちゃんの解説
ステートフルパケットインスペクションは、通信の進み具合を記録してパケットを通すか判断するファイアウォールの方式だよ。
例えば社内の端末から外部のWebサーバへの接続を許可したら、通信相手のIPアドレスやポート番号などを記録するんだ。
戻ってきたパケットはその記録と照合し、許可したやり取りに合うものを通すよ。
これなら外部からの通信を広く許可せずに、必要な返事を受け取れるんだ。
ただし、許可した通信の中身まで安全だと保証するわけではないよ。
この解説はわかりやすかったですか?
より深い解説
定義
ステートフルパケットインスペクション(SPI)は、通過する通信のセッション(送信元・宛先のIPアドレスとポート番号、プロトコル、TCPの状態など)を状態表に記録し、その状態に照らして、パケットを通すかどうかを判断するファイアウォールの方式である。
静的パケットフィルタリングとの違い
| 静的パケットフィルタリング | ステートフルパケットインスペクション | |
|---|---|---|
| 判断の材料 | パケット1つ1つのヘッダー(アドレス、ポート番号) | パケットのヘッダー+通信の状態 |
| 応答の通信 | 応答の向きのルールも明示的に書く必要がある | 許可した通信の応答は、自動的に通す |
| 応答を装った攻撃 | 応答に見せかけたパケット(ACKの付いたパケットなど)を通してしまうことがある | 記録にない応答は通さない |
| ルールの数 | 多くなる | 少なくて済む |
許可ルールの読み方
ステートフルパケットインスペクションを持つファイアウォールでは、まず通信を始める向き(最初のパケットを送る側から、受ける側への向き)の許可を設定する。記録した接続への応答を許可できる構成なら、その応答のために逆向きの新規接続まで広く許可する必要はない。
| 送信元 | 宛先 | プロトコル/宛先ポート番号 | 目的 |
|---|---|---|---|
| 内部セグメント | プロキシサーバ | TCP/8080 | PCからプロキシへ接続する |
| プロキシサーバ | インターネット | TCP/80、TCP/443 | プロキシからWebサイトへ接続する |
| DMZのサーバ | syslogサーバ | UDP/514 | DMZの機器からログを送る |
宛先のポート番号は、通信を受ける側(サーバ)のポート番号である。送信元のポート番号は、クライアントが一時的に選ぶため、通常は指定しない。
UDPの扱い
UDPには接続の開始と終了がないが、ステートフルのファイアウォールは、送信元・宛先の組を記録し、一定時間内に返ってきた逆向きのパケットを応答として通す。DNSやNTPの問い合わせと応答などが、これに当たる。
静的なルールで往復を許可する場合
静的パケットフィルタリングでは、要求と応答の両方向を個別に確認する。たとえばクライアントの一時ポートを53,000、接続先のHTTPSサーバのポートを443とすると、往復は次のようになる。
| 向き | 送信元ポート | 宛先ポート |
|---|---|---|
| クライアント → サーバ | 53,000 | 443 |
| サーバ → クライアント | 443 | 53,000 |
応答では送信元と宛先が入れ替わる。実際の一時ポートの範囲はOSや設定によって異なるため、条件に示された範囲を使う。また、サーバ側ポートを送信元に持つパケットでも、本当に要求への応答かどうかを静的なルールだけで保証できるわけではない。
ヘッダーで見分けられる範囲
パケットフィルタリングは、IPアドレス、ポート番号、プロトコルなどで通信を選別する。公開しないサービスへの接続を拒否する用途には適するが、許可したサービスのデータ内容が安全かどうかは、ヘッダーだけでは判断できない。
| 対象 | ヘッダーによる選別の限界 |
|---|---|
| 公開しないポートへの接続 | 拒否ルールで遮断できる |
| 許可したサービスの脆弱性への攻撃 | 正常な利用と同じポートを使える |
| メールの添付ファイル | 内容の検査が別途必要 |
| 許可したサービスへの大量要求 | 単純に全遮断すると、正常利用も止まる |
必要なサービスを維持するには、更新、内容検査、レート制御、上流での防御などを組み合わせる。通信の状態を追跡する方式でも、アプリケーションの全脆弱性を自動的に防ぐわけではない。
端末上で行う通信制限
パーソナルファイアウォールは、利用者のPCなどの端末上で、その端末へ出入りする通信を制限する機能である。ネットワーク境界の装置と配置場所が異なる。
アプリケーションごとの通信許可などに利用できるが、スイッチや無線LANアクセスポイントで利用者を認証してLANへの接続を許可する仕組みとは別である。端末の防御とネットワークへの参加資格を分けて設計する。