はじめに
Cisco ルータを「ただのパケット中継機」から「高機能なセキュリティゲートウェイ」へと変貌させる機能、それが Zone-Based Firewall(ZBFW)です。
従来、ルータでのアクセス制御といえば ACL(アクセスコントロールリスト) が一般的でした。しかし、ACL はパケットの中身や通信の状態を記憶しない「ステートレス」な仕組みであるため、「行き」の通信を許可しても、「戻り」の通信まで個別に許可設定を書く必要があり、設定が複雑化しやすいという課題がありました。
ZBFW は、これを解決するために 「ステートフル・インスペクション(状態監視)」 をルータ上で実現します。これにより、「内部から外部への通信を許可すれば、その戻り通信(Reply)は自動的に許可する」といった、専用のファイアウォール製品(ASA や Firepower 等)と同等のセキュリティ制御が可能になります。
▼ ステートフルインスペクションの仕組みについてはこちらも参照

- ZBFW の基本概念(ゾーンとポリシーの考え方)
- 設定の全体フロー(Class-map / Policy-map / Zone-pair の3階層)
- 具体的な設定コマンドと確認方法
ZBFW(Zone-Based Firewall)の基本概念
ZBFW を理解する上で最も重要なのが、機能名にもなっている 「ゾーン(Zone)」 という考え方です。

ゾーン (Zone) とは?
従来のファイアウォール(ACL)は「物理的なインターフェース(Gi0/0 など)」ごとにルールを決めていましたが、ZBFW ではインターフェースを論理的なグループである 「セキュリティゾーン」 に割り当てて管理します。
- INSIDE: 社内 LAN などの信頼できるネットワーク
- OUTSIDE: インターネットなどの信頼できないネットワーク
- DMZ: 公開サーバーなどを配置する緩衝地帯

インターフェースがどのゾーンに属するかを決めることで、「Gi0/0 から Gi0/1 へ」ではなく、「INSIDE から OUTSIDE へ」といった、より直感的で管理しやすいポリシー適用が可能になります。
デフォルトの動作(重要)
ここが ZBFW の最大の特徴であり、初心者が最もハマりやすいポイントです。 ゾーンを作成し、インターフェースを割り当てた瞬間、ゾーン間の通信はデフォルトですべて「遮断(Drop)」されます。
- 同一ゾーン内の通信: デフォルトで 許可(例: INSIDE の PC 同士)
- 異なるゾーン間の通信: デフォルトで 拒否(例: INSIDE から OUTSIDE)



つまり、「通信させたいペア(ゾーンペア)」に対して明示的に「許可」の設定を入れない限り、一切通信ができなくなります。 これにより、意図しない通信漏れを防ぐ「ホワイトリスト形式」の強固なセキュリティが実現します。
ステートフルインスペクション
ZBFW で通信を許可する場合、単に pass(通過)させるのではなく、通常は inspect(検査) というアクションを指定します。
これを行うことで、ルータは通信の状態(セッション)を記憶し、「戻りの通信(Reply)」を自動的に許可 します。 ACL のように「行き」と「帰り」の両方を書く必要はありません。これにより設定行数が大幅に削減され、ミスも減ります。
設定の全体像(3つの構成要素)
ZBFW の設定は、CPL(Class, Policy, Zone-pair)と呼ばれる 3階層構造 になっています。 いきなりコマンドを打ち始めるのではなく、まずこの「3つの箱」の役割と関係性を理解することが成功への近道です。


- 役割: 「誰を」(通信の識別)
- 内容: 「どのトラフィックを対象にするか」を定義します。
- 設定: ACL(IPアドレスで指定)や、プロトコル(HTTPなど)を指定して、通信を分類・抽出します。



イメージは「赤い服を着た人」を選別するフィルターです。
- 役割: 「どうするか」(アクションの定義)
- 内容: Class-map で識別した通信に対して、どのような処理を行うかを定義します。
- 主なアクション:
- Inspect: ステートフルインスペクションを行う(基本はこれ)戻り通信を許可し、ログを取得する。
- Drop: 通信を遮断する(ログを残すことも可能)
- Pass: 検査せず、そのまま素通しする(ステートレス)



イメージは「赤い服の人」を「検査して通す」というルールブックです。
- 役割: 「どこからどこへ」(適用の方向)
- 内容: 作成した Policy-map を、具体的な「ゾーン間の移動」に適用します。
- 設定: 「Source(送信元)ゾーン」と「Destination(宛先)ゾーン」の組み合わせを指定し、そこにポリシーを紐付けます。



イメージは「INSIDE から OUTSIDE へ向かうゲート」にルールブックを設置です。
実践設定例(Inside から Outside への通信許可)
ここからは、実際にルータに設定を投入する手順をステップバイステップで解説します。
【シナリオ】
- INSIDE (Gi0/0): 社内ネットワーク (192.168.1.0/24)
- OUTSIDE (Gi0/1): インターネット側
- 要件: 社内からインターネットへの通信(Web 閲覧など)は許可し、戻りの通信も通す。それ以外の通信(インターネット側からの開始など)は拒否する。
まずは「箱(ゾーン)」を作り、インターフェースをその箱に入れます。
! 1. セキュリティゾーンの定義
conf t
zone security INSIDE
zone security OUTSIDE
! 2. インターフェースへの割り当て
interface GigabitEthernet0/0
zone-member security INSIDE
!
interface GigabitEthernet0/1
zone-member security OUTSIDE


ポイント: zone-member security コマンドを入れた瞬間から、そのインターフェースは ZBFW の管理下に入り、ポリシー未設定の状態では通信が遮断されます(一時的な通信断が発生するため、リモート作業時は注意してください)
次に、「どの通信を制御するか」を定義します。 通常は ACL(アクセスコントロールリスト)を作成し、それを class-map に読み込ませる方法が一般的です。
! 1. 通信対象を特定する ACL の作成
ip access-list extended ACL-INSIDE-TO-OUTSIDE
permit ip 192.168.1.0 0.0.0.255 any
! 2. クラスマップの作成(ACLを紐付け)
class-map type inspect match-all CM-INSIDE-TO-OUTSIDE
match access-group name ACL-INSIDE-TO-OUTSIDEtype inspect: ZBFW 用のクラスマップであることを宣言します。match-all: 条件にすべて一致した場合(ここでは ACL のみ)にヒットします。
Step 2 で定義した通信に対して、「どうするか(アクション)」を決定します。 ここで最も重要なのが inspect アクションです。
policy-map type inspect PM-INSIDE-TO-OUTSIDE
! 定義したクラスに対してアクションを指定
class type inspect CM-INSIDE-TO-OUTSIDE
inspect
!
! それ以外の通信(デフォルト)は破棄
class class-default
drop


inspect の重要性: 単なる許可(Pass)ではなく inspect を指定することで、ルータは「戻りの通信(Reply)」を動的に許可するためのテーブルを作成します。これにより、ステートフルなファイアウォールとして動作します。
最後に、作成したポリシーを「どのゾーンから、どのゾーンへ向かう通信に適用するか」を定義します。これが「橋」を架ける作業です。
! ゾーンペアの作成
zone-pair security ZP-IN-TO-OUT source INSIDE destination OUTSIDE
! 作成したポリシーマップを適用
service-policy type inspect PM-INSIDE-TO-OUTSIDEsource/destination: 通信の「開始方向」を指定します。



結果: これで「INSIDE から始まり OUTSIDE へ向かう通信」は検査(Inspect)され、許可されます。逆に「OUTSIDE から始まり INSIDE へ向かう通信」は、対応するゾーンペアがないため、デフォルトの動作(Drop)により遮断されます。
動作確認コマンド
設定が完了したら、実際に通信を行い、ZBFW が正しく機能しているか(ステートフルインスペクションが働いているか)を確認しましょう。
セッション情報の確認
最も役に立つのが、「現在確立されているセッション」 を表示する以下のコマンドです。 社内の PC からインターネットへ Ping や Web アクセスを行いながら、ルータで実行してみてください。
show policy-map type inspect zone-pair sessions▼ 出力例
Router# show policy-map type inspect zone-pair sessions
policy exists on zp INSIDE-TO-OUTSIDE
Zone-pair: ZP-IN-TO-OUT
Service-policy inspect : PM-INSIDE-TO-OUTSIDE
Class-map: CM-INSIDE-TO-OUTSIDE (match-all)
Match: access-group name ACL-INSIDE-TO-OUTSIDE
Inspect
Number of Established Sessions = 1
Established Sessions
Session 81E48480 (192.168.1.10:54321)=>(8.8.8.8:53) icmp SIS_OPEN▼ 見るべきポイント
Established Sessions: ここにセッションが表示されていれば、「行き」の通信が検査され、「戻り」の通信枠が確保されている証拠です。



もしここが 0 のままで通信が通らない場合は、ACL の設定やゾーンの割り当て(zone-member)が間違っている可能性があります。
まとめ
本記事では、Cisco ルータを強力なセキュリティデバイスに変える Zone-Based Firewall(ZBFW)について解説しました。
- ACL との違い: ステートフルインスペクションにより、戻り通信の許可設定が不要。
- ゾーンの概念: インターフェース単位ではなく、セキュリティレベル(Inside/Outside)で直感的に管理
- 3階層の設定:
Class-map(識別)→Policy-map(アクション)→Zone-pair(適用)の流れ。
以上、最後までお読みいただきありがとうございました。


