FortiGateのファイアウォールポリシーは、設定する順番が通信の可否やパフォーマンスに直結する重要な要素です。ポリシーの評価順序を理解せずに設定すると、意図しない通信遮断やパフォーマンス低下が発生します。この記事では、ポリシー評価の仕組みから実務で役立つ最適化のコツまでを詳しく解説します。

👷 現場での体験談

新規FortiGateを導入した案件で、ポリシーを追加していったところ、突然特定のサーバへの通信ができなくなったことがありました。調査すると、広範囲なdenyポリシーを上位に配置してしまい、後で追加したallowポリシーが評価されていなかったのです。

ポリシーの順番を入れ替えただけで即座に解決しましたが、この経験からポリシー順序の重要性を痛感しました。運用中のファイアウォールでは、定期的なポリシー見直しが不可欠です。

FortiGateのポリシー評価の仕組み

FortiGateのファイアウォールポリシーは、上から順に評価され、最初にマッチしたルールが適用されるという明確なルールがあります。これは「First Match」方式と呼ばれ、一度マッチしたら以降のポリシーは評価されません。

例えば、ポリシーID 1でallowされたトラフィックは、たとえポリシーID 10でdenyルールがあっても既に許可済みとして通過します。逆に、ポリシーID 5でdenyされた通信は、ポリシーID 15にallowルールがあっても遮断されます。

ポリシー評価の流れ
1
パケット到着

送信元IP、宛先IP、ポート番号などの情報を持つパケットがFortiGateに到着します。

2
ポリシーID順に評価

ポリシーリストの最上位(最小ID)から順番に、パケットの情報と照合していきます。

3
最初のマッチで決定

条件に合致した最初のポリシーのアクション(Allow/Deny)が適用され、以降の評価は行われません。

4
マッチなしの場合

すべてのポリシーに合致しない場合、デフォルトでdeny(暗黙的拒否)として処理されます。

ポリシーの並び順が与える影響

ポリシーの並び順は、セキュリティとパフォーマンスの両面に大きな影響を及ぼします。適切に配置すれば効率的な通信処理が可能ですが、誤った順序では意図しない結果を招きます。

図1: ポリシー配置による影響度

通信遮断リスク
85%
パフォーマンス低下
72%
運用工数増加
68%
セキュリティホール
55%
パフォーマンスへの影響

FortiGateは受信したパケットごとにポリシーテーブルを上から順に検索します。頻繁に使用されるルールが下位にあると、毎回多数のポリシー評価を行う必要があり、CPU負荷とレイテンシが増加します。

特に、1秒間に数万パケットを処理する環境では、ポリシー評価のコストが積み重なり、全体のスループットに影響します。トラフィック量の多いルールを上位に配置することで、評価回数を最小化できます。

ポリシー評価回数の比較例

トラフィック量最適配置時非最適配置時
ポリシー10本中平均2〜3回評価平均7〜8回評価
CPU負荷10〜15%25〜35%
レイテンシ0.5ms未満1.5〜2.0ms
よくある配置ミスとトラブル事例

実務では、ポリシーの追加や変更を繰り返すうちに、意図しない順序になってしまうケースが多発します。特に複数の管理者が関わる環境では注意が必要です。

典型的なミス1: 広範囲denyポリシーの上位配置

セキュリティを意識するあまり、「特定のネットワーク全体を拒否」するポリシーを上位に配置してしまい、その後に追加した個別許可ルールが機能しなくなるケースです。

# 問題のある配置例
Policy ID 5: Deny 10.0.0.0/8 → any (広範囲拒否)
Policy ID 10: Allow 10.1.1.100 → WebServer (個別許可) ← 評価されない!
Policy ID 15: Allow 10.2.2.0/24 → DBServer (個別許可) ← 評価されない!

この場合、10.1.1.100からWebServerへの通信は、Policy ID 5で先にdenyされるため、Policy ID 10は永久に評価されません。

⚠ 注意

広範囲なdenyルールは必ず具体的なallowルールより下位に配置してください。「より具体的なルールを上位に」が鉄則です。

典型的なミス2: “any-any-allow”ポリシーの上位配置

テスト時やトラブルシューティング時に一時的に作成した「すべて許可」のポリシーを削除し忘れ、上位に残してしまうケースです。これがあると、以降のすべてのポリシーが無効化されます。

# 危険な配置例
Policy ID 3: Allow any → any (すべて許可) ← セキュリティホール!
Policy ID 8: Deny 10.10.10.0/24 → Internet (拒否したいルール) ← 評価されない
Policy ID 12: Allow Internal → WebServer with IPS (詳細制御) ← 評価されない
ポリシー最適化のベストプラクティス

効率的で安全なポリシー配置を実現するための実践的なルールを紹介します。これらは大規模環境でも有効な手法です。

図2: ポリシー最適化の効果

処理速度向上
78%
トラブル減少
82%
管理性向上
70%
CPU負荷削減
65%
ベストプラクティス5原則

推奨されるポリシー配置順序

優先度ポリシータイプ具体例
1位特定IPの明示的拒否攻撃元IPのブロック、禁止ホスト
2位高頻度・具体的な許可業務サーバへのアクセス、VPN通信
3位低頻度・具体的な許可管理用アクセス、バックアップ通信
4位範囲指定の許可セグメント間通信、部門別ルール
5位広範囲の拒否内部→外部拒否、ネットワーク全体拒否

この順序を守ることで、セキュリティを担保しながら最適なパフォーマンスを実現できます。重要なのは、具体的なルールほど上位に配置し、抽象的なルールは下位に配置するという原則です。

ポリシー順序の変更方法

FortiGateでは、GUI(Web画面)とCLI(コマンドライン)の両方でポリシー順序を変更できます。それぞれの方法を実例とともに紹介します。

GUIでの変更方法

Web管理画面からの変更は直感的で、変更結果をすぐに視覚的に確認できます。

1
ポリシー画面を開く

Policy & Objects → Firewall Policy に移動します。

2
ポリシーを選択

移動したいポリシーの行を右クリックし「Move」を選択します。

3
移動先を指定

「Before」または「After」で基準となるポリシーIDを選択し、OKをクリックします。

CLIでの変更方法

CLIでは、より精密な制御と複数ポリシーの一括移動が可能です。スクリプト化にも適しています。

# ポリシーID 15を、ポリシーID 3の前に移動
config firewall policy
    move 15 before 3
end

# ポリシーID 20を、ポリシーID 10の後に移動
config firewall policy
    move 20 after 10
end

# 現在のポリシー順序を確認
show firewall policy | grep "edit"

CLIでの変更後は、必ず順序が正しく変更されたことを確認してください。GUIで視覚的に確認するのが確実です。

⚠ 運用時の注意点

本番環境でポリシー順序を変更する際は、必ずメンテナンスウィンドウを設定し、変更前のconfigをバックアップしてください。順序変更により意図しない通信遮断が発生する可能性があります。

ポリシーヒット数の確認

最適化の効果を測定するため、各ポリシーのヒット数(マッチ回数)を定期的に確認することが重要です。

# すべてのポリシーのヒット数を表示
diagnose firewall iprope list 100000

# 特定ポリシーの詳細統計
get firewall policy statistics

# セッション数の確認
diagnose sys session stat

ヒット数が多いポリシーを上位に移動することで、全体の処理効率が向上します。月次で統計を取り、ポリシー配置を見直すことをお勧めします。

まとめ

FortiGateのファイアウォールポリシーは上から順に評価され、最初にマッチしたルールが適用される仕組みです。この特性を理解し、適切な順序で配置することがセキュリティとパフォーマンスの両立に不可欠です。

  • 具体的なルールを上位に、抽象的なルールを下位に配置する
  • 高頻度のトラフィックに対応するポリシーは上位に移動する
  • 広範囲denyポリシーは個別allowポリシーより必ず下位に配置
  • 定期的にヒット数統計を確認し、ポリシー順序を最適化する
  • 本番環境での変更は必ずバックアップとメンテナンスウィンドウを確保する