FortiGateのセッションテーブル確認とトラブルシューティング実践ガイド

👷 現場での体験談

ある日、「特定のサーバーへの通信が突然できなくなった」と連絡が入りました。FortiGateのログを見ても明確なドロップ記録はなく、設定も変更していない。そこでセッションテーブルを確認すると、古いセッションが残り続けており、新規接続を妨げていることが判明しました。

セッションテーブルの確認技術は、ネットワークトラブルシューティングの最重要スキルの一つです。適切なコマンドを使えば、問題の原因を数分で特定できます。

セッションテーブルとは?FortiGateにおける役割

セッションテーブルは、ファイアウォールが現在処理している通信状態を管理する内部データベースです。FortiGateでは、すべての通信(TCP、UDP、ICMP等)がセッションとして記録され、パケットの送受信状態や関連ポリシー情報が保持されます。

ステートフルインスペクション型ファイアウォールであるFortiGateは、このセッションテーブルを参照して、戻りパケットが正当な通信の一部かを判断します。そのため、セッションテーブルを正しく理解することが、トラブルシューティングの鍵となります。

セッションテーブルに記録される主な情報

セッションテーブルの構成要素を以下にまとめます。

項目内容
送信元IP/ポート通信を開始したクライアントのIPアドレスとポート番号
宛先IP/ポート接続先サーバーのIPアドレスとサービスポート
プロトコルTCP/UDP/ICMPなどの通信プロトコル
セッション状態ESTABLISHED、SYN_SENT、CLOSEDなどのTCP状態
適用ポリシーIDこの通信を許可したファイアウォールポリシー番号
タイムアウト値セッションが自動削除されるまでの残り時間
diagnose sys session listコマンドの実践

FortiGateでセッションテーブルを確認する基本コマンドが「diagnose sys session list」です。このコマンドはCLIから実行し、現在アクティブなすべてのセッション情報を表示します。

基本的な実行例と出力の読み方
FG200D # diagnose sys session list

session info: proto=6 proto_state=01 duration=123 expire=3597 timeout=3600
src=192.168.1.100:52341 dst=203.0.113.50:443 vd=root policy_id=10
total session 1542

この出力から読み取れる重要情報は以下の通りです。

図1: セッション情報の構成要素

接続時間
85%
ポリシー情報
75%
送受信アドレス
90%
プロトコル状態
70%
⚠ 注意

proto=6はTCP、proto=17はUDPを意味します。proto_stateは内部状態コードで、01はESTABLISHED状態を示します。この数値は機種やバージョンで変わる場合があるため、状態確認には注意が必要です。

セッションのフィルタリングテクニック

実運用環境では数千から数万のセッションが存在するため、全セッションを表示すると画面が流れてしまいます。diagnose sys sessionコマンドには強力なフィルタリングオプションがあり、目的のセッションだけを抽出できます。

実務で頻用するフィルタコマンド
1
送信元IPで絞り込み
diagnose sys session filter src 192.168.1.100
diagnose sys session list
2
宛先ポートで絞り込み
diagnose sys session filter dport 443
diagnose sys session list
3
ポリシーIDで絞り込み
diagnose sys session filter policy 10
diagnose sys session list
4
フィルタのクリア
diagnose sys session filter clear

複数条件を組み合わせることも可能です。例えば、特定の送信元から特定の宛先ポートへの通信だけを表示したい場合は、フィルタを連続して設定します。

diagnose sys session filter src 192.168.1.100
diagnose sys session filter dport 443
diagnose sys session list
セッション数管理とリソース枯渇対策

FortiGateには機種ごとに最大セッション数の上限があり、この制限に達すると新規接続が拒否されます。セッション数を監視し、異常な増加を検知することは、安定運用の重要ポイントです。

現在のセッション数確認方法
FG200D # get sys performance status

CPU states: 8% user 3% system 0% nice 89% idle
Memory: 2048MB total, 1024MB used (50%)
Average network usage: 150 / 250 kbps in 1 minute
Sessions: 8542 active (21354 max)

この例では、最大21354セッションのうち8542が使用中で、まだ余裕がある状態です。セッション使用率が80%を超えると警戒が必要です。

図2: セッション枯渇の主な原因

DDoS攻撃
88%
アプリ不具合
65%
タイムアウト設定
52%
NAT制限
38%

セッション枯渇時の対処法をまとめます。

対処法実施内容効果
異常セッション特定送信元IP別にセッション数を集計攻撃元の特定
タイムアウト調整TCPタイムアウト値を短縮古いセッション削除促進
セッションクリア特定条件でセッション強制削除即座にリソース解放
ポリシー最適化不要ポリシーの削除・統合処理効率向上
通信障害時のセッション確認フロー

「通信ができない」という障害報告を受けた際、セッションテーブルを確認することで、問題がFortiGate内部にあるのか、それとも外部要因かを切り分けられます。以下、実践的なトラブルシューティング手順を解説します。

トラブルシューティングの実践ステップ
1
セッションの存在確認

送信元IPと宛先IP/ポートでフィルタし、セッションが作成されているか確認。セッションがなければポリシー設定を疑う。

2
セッション状態の確認

proto_stateが01(ESTABLISHED)でなく、SYN_SENTのまま残っている場合、サーバー側に到達していない可能性が高い。

3
適用ポリシーIDの確認

policy_idから実際に適用されたポリシーを特定し、セキュリティプロファイル設定を確認。意図しないポリシーが適用されていないかチェック。

4
パケットキャプチャ併用

セッションは存在するが通信が不安定な場合、diagnose sniffer packetでパケット詳細を解析し、ドロップやリトライの有無を確認。

FG200D # diagnose sys session filter src 192.168.1.100
FG200D # diagnose sys session filter dst 203.0.113.50
FG200D # diagnose sys session list

→セッションが表示されない場合
  ポリシー設定やルーティングに問題がある可能性大

→セッションがSYN_SENTのままの場合
  宛先サーバーが応答していない可能性大
セッションクリアコマンドの正しい使い方

古いセッションや異常なセッションを強制的に削除する場合、diagnose sys session clearコマンドを使用します。ただし、このコマンドは既存の通信を切断するため、慎重に実行する必要があります。

セッションクリアの実行例
特定IPのセッションのみクリア
FG200D # diagnose sys session filter src 192.168.1.100
FG200D # diagnose sys session clear

特定ポリシーのセッションをクリア
FG200D # diagnose sys session filter policy 15
FG200D # diagnose sys session clear

全セッションクリア(緊急時のみ)
FG200D # diagnose sys session clear
⚠ 注意

全セッションクリアは全ユーザーの通信が一時的に切断されます。実行前に必ず影響範囲を確認し、メンテナンス時間内に実施してください。フィルタを設定すれば影響を最小限にできます。

セッションクリアが必要な典型的シナリオを整理します。

シナリオ理由と効果
ポリシー変更後古いポリシーで確立したセッションには新設定が反映されないため、クリアして再接続させる
NAT設定変更後既存セッションは古いNATエントリを保持しているため、通信異常が発生する可能性
セッション枯渇異常なセッションを削除してリソースを即座に解放し、正常な通信を復旧
ルーティング変更後既存セッションは古いルート情報を参照しており、戻りパケットが正しく処理されない
まとめ

FortiGateのセッションテーブル確認は、ネットワークトラブルシューティングの基本中の基本です。diagnose sys sessionコマンドを使いこなすことで、障害の原因特定時間を大幅に短縮できます。特にフィルタ機能を活用すれば、数万セッションの中から問題のある通信だけをピンポイントで抽出可能です。

  • セッションテーブルにはすべての通信状態が記録され、ポリシーIDや接続時間などの詳細情報を含む
  • diagnose sys session filterで送信元、宛先、ポート、ポリシーIDなど多様な条件でフィルタリング可能
  • セッション枯渇時は異常なIPを特定してクリアし、タイムアウト値の見直しも検討する