ステートフルファイアウォール(Stateful Firewall)は、単独のパケットだけを見て判断するのではなく、通信の流れ全体を追跡しながら制御を行う仕組みを持っています。
シンプルに言うと、
「いまどの通信が進行中か」を把握したうえで、その続きとして正しいパケットのみを通す装置
です。
ステートレス型との違い
ステートレスファイアウォール
ステートレス型は、以下の情報をもとに判断します。
- 送信元IP
- 宛先IP
- ポート番号
- プロトコル(TCP/UDP)
- フラグメント情報
判断材料はあくまで「パケット単体の情報」。
通信の前後関係は考慮しません。
ステートフルファイアウォール
ステートフル型は、セッション単位の情報をステートテーブルに記録し、通信の流れに沿った判断が可能です。
特徴としては
- 通信開始(SYN)
- 接続確立(ESTABLISHED)
- セッション終了(FIN)
といった状態遷移を把握し、セッションに関係しないパケットや矛盾したパケットを破棄できます。
ステートテーブルが保持する情報
ステートフルファイアウォールは「通信の文脈」を理解するために、以下のような情報を記録します。
- 送信元IP / 宛先IP
- 送信元ポート / 宛先ポート
- プロトコル(TCP/UDP など)
- TCPフラグ(SYN / ACK / FIN など)
- セッション状態(ESTABLISHED など)
- 最終通信時刻(タイムアウト管理用)
これにより、どのパケットがどのセッションに属しているかを把握できます。
TCPの状態管理とステートフルFWの関係
TCP通信は必ず以下の流れで進行します。
- SYN
- SYN/ACK
- ACK(接続確立)
- データ通信
- FIN(接続終了)
ステートフルFWはこの状態遷移を認識し、矛盾した状態のパケットや、セッションに属さないパケットを除外します。
例
内部のPCがWebサーバーに接続した直後、
外部から返ってくるレスポンスは「確立済みセッションの応答」として自動的に許可されます。
これはステートレスFWでは難しい動作です。
ステートフルファイアウォールが防げるもの・防げないもの
防げる(または防ぎやすくなる)もの
- セッションと無関係なパケット
- 不自然なタイミングで挿入されたパケット
- 未確立セッションへの応答パケット
- 確立済みセッションを装わない単純な不正パケット
また、無関係な通信を処理しないため、ポートスキャンなどで得られる情報が減るという副次的効果もあります。
防げない(もしくはファイアウォール単体では不十分)もの
- TCPセッションハイジャックの高度な手法
→ 状態管理で異常を検出しやすくなるが、完全防御ではない
- SQLインジェクション
- XSS
- CSRF
- HTTPリクエスト内の攻撃(アプリケーション層の脅威)
- アプリケーションの脆弱性を突く攻撃
ステートフルFWは基本的に OSI参照モデルの L3/L4 を扱うため、L7(アプリケーション層)の攻撃は別途専用対策が必要です。
メリット
- 通信の流れを理解して判断できるため、ステートレスより精度が高い
- 確立済みセッションの応答を自動で許可できるため、ルールが簡潔で済む
- セッション状態に合わない異常パケットを排除しやすい
- 不要な外部からの通信を自然に抑制できる
デメリット
- 状態管理が必要なため、理論上ステートレスより処理負荷は高い
- 通常規模のネットワークでは問題になりにくいが、
大規模トラフィック(大規模DC・ISP級)では注意が必要
- TCPは管理しやすいが、
UDPのようなコネクションレス通信では状態判定が難しい場合がある
まとめ
- ステートフルFWは 通信の状態を追跡して安全性を高める仕組み
- ステートレスと違い、セッション単位でパケットを判断できる
- 不自然なパケットを排除しやすく、安全性と運用性が向上
- ただしアプリケーション層攻撃には別の対策が必要
以上、ステートフルファイアウォールについてでした。
最後までお読みいただき、ありがとうございました。