ネットワークを構築したら、次に考えなければならないのが「誰に、何を、通していいのか」というセキュリティポリシーです。
VLANを設定してネットワークを分割しても、VLAN間ルーティングを有効にしているかぎり、すべてのVLAN間通信が許可されます。
VLAN設定やVLAN間ルーティングと聞いてピンとこなかった場合は以下記事をご連いただければと思います。


「営業部からサーバーへの通信は許可するが、開発部からの直接アクセスは拒否したい」。そういった細かい制御を実現するのがACL(Access Control List:アクセスコントロールリスト)です。
このシリーズ最終回となる今回は、ACLの基礎から実際の設定コマンドまでを、Cisco公式ドキュメントに基づいて正確に解説します。
動作環境
- 機器:Cisco Catalyst 9606R
- OS:Cisco IOS XE 17.6.x(Bengaluru)
- 前提:初期設定⑤(SVI・VLAN間ルーティング)が完了していること
- 参照元:Cisco公式セキュリティコンフィギュレーションガイド(IOS XE Bengaluru 17.6.x)
ACLとは何か
公式ドキュメントでは次のように定義されています。「ACLはpermit条件とdeny条件の順序付きコレクションです。デバイスはアクセスリストの条件に対してパケットを1つずつテストします。最初に一致した条件が、デバイスがパケットを受け入れるか拒否するかを決定します」。
重要なポイントが2つあります。
- 順序が重要:最初に一致した条件でパケットの許可・拒否が決まります
- 暗黙のdeny all:公式ドキュメントに明記されているとおり、「ACLの末尾には、一致しなかったすべてのパケットに対する暗黙のdenyステートメントが含まれます」
つまり、ACLに何も一致しなければすべて拒否されます。設定時に「必要なものを許可し、最後に残りを拒否する」という意識が大切です。
ACLの種類
公式ドキュメントによると、Catalyst 9606RはIPv4に対して以下のACLタイプをサポートしています。
| 種類 | 番号範囲 | マッチング条件 | 用途 |
|---|---|---|---|
| 標準ACL | 1〜99、1300〜1999 | 送信元IPアドレスのみ | シンプルなフィルタリング |
| 拡張ACL | 100〜199、2000〜2699 | 送信元・宛先IP、プロトコル、ポート番号など | 細かい制御 |
| 名前付きACL | 任意の文字列 | 標準または拡張と同様 | 管理しやすい・個別エントリの削除が可能 |
実務では名前付き拡張ACLが最もよく使われます。理由は「何のACLか名前でわかる」「個別エントリを削除・追加できる」の2点です。番号付きACLは一度設定したエントリを個別に削除できないため、管理が難しくなります。
ACLの適用場所と優先順位
公式ドキュメントによると、ACLは以下の3つの場所に適用でき、優先順位があります。
| 種類 | 適用場所 | 方向 |
|---|---|---|
| Port ACL | L2インターフェイス | インバウンドのみ |
| Router ACL | L3インターフェイス(SVI含む) | インバウンド・アウトバウンド |
| VLAN Map | VLAN全体 | 方向なし |
優先順位(高い順):Port ACL > VLAN Map > Router ACL
今回のシリーズ構成(SVIを使ったVLAN間ルーティング)では、**Router ACL(SVIへの適用)**を使います。
今回設定するシナリオ
前回まで設定した以下のネットワーク構成を使います。
| VLAN | VLAN名 | ネットワーク |
|---|---|---|
| VLAN 10 | SALES | 192.168.10.0/24 |
| VLAN 20 | DEVELOP | 192.168.20.0/24 |
| VLAN 99 | MGMT | 192.168.99.0/24 |
今回設定するACLポリシー:
- SALES(VLAN10)は外部(インターネット想定)へのHTTP/HTTPSを許可
- DEVELOP(VLAN20)はSALESへのアクセスを拒否
- MGMT(VLAN99)からはすべてのVLANへのアクセスを許可(管理用)
- それ以外はすべて拒否(暗黙のdeny)
ACLの設定手順
ステップ1:名前付き拡張ACLの作成
各VLANのポリシーに合わせてACLを作成します。
SALES用ACL(VLAN10の通信を制御)
C9606R-Core01# configure terminal
! SALES用ACL(VLAN10)
C9606R-Core01(config)# ip access-list extended ACL_SALES_OUT
C9606R-Core01(config-ext-nacl)# remark SALES VLAN outbound policy
C9606R-Core01(config-ext-nacl)# 10 permit tcp 192.168.10.0 0.0.0.255 any eq 80
C9606R-Core01(config-ext-nacl)# 20 permit tcp 192.168.10.0 0.0.0.255 any eq 443
C9606R-Core01(config-ext-nacl)# 30 permit icmp 192.168.10.0 0.0.0.255 any
C9606R-Core01(config-ext-nacl)# 40 deny ip any any log
C9606R-Core01(config-ext-nacl)# exit
DEVELOP用ACL(VLAN20の通信を制御)
! DEVELOP用ACL(VLAN20)
C9606R-Core01(config)# ip access-list extended ACL_DEVELOP_OUT
C9606R-Core01(config-ext-nacl)# remark DEVELOP VLAN outbound policy
C9606R-Core01(config-ext-nacl)# 10 deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 log
C9606R-Core01(config-ext-nacl)# 20 permit ip 192.168.20.0 0.0.0.255 any
C9606R-Core01(config-ext-nacl)# exit
C9606R-Core01(config)# end
コマンド解説:
| コマンド | 説明 |
|---|---|
ip access-list extended [名前] | 名前付き拡張ACLを作成してACLモードに入る |
remark [コメント] | ACLにコメントを追加する(設定には影響しない) |
[シーケンス番号] permit/deny [プロトコル] [送信元] [宛先] | ACEを追加する |
any | 任意のIPアドレス(0.0.0.0 255.255.255.255の省略形) |
eq [ポート番号] | 特定のポート番号に一致させる |
log | 一致したパケットをsyslogに記録する |
ワイルドカードマスクとは:
ACLでは、サブネットマスクの代わりにワイルドカードマスクを使います。ワイルドカードマスクはサブネットマスクのビットを反転させたものです。
| ネットワーク | サブネットマスク | ワイルドカードマスク |
|---|---|---|
| 192.168.10.0/24 | 255.255.255.0 | 0.0.0.255 |
| 192.168.10.0/25 | 255.255.255.128 | 0.0.0.127 |
| 特定ホスト(/32) | 255.255.255.255 | 0.0.0.0(またはhostキーワード) |
ステップ2:ACLをSVIに適用する
作成したACLを各VLANのSVIに適用します。
C9606R-Core01# configure terminal
! VLAN10のSVIにACL_SALES_OUTをアウトバウンドに適用
C9606R-Core01(config)# interface vlan 10
C9606R-Core01(config-if)# ip access-group ACL_SALES_OUT out
C9606R-Core01(config-if)# exit
! VLAN20のSVIにACL_DEVELOP_OUTをアウトバウンドに適用
C9606R-Core01(config)# interface vlan 20
C9606R-Core01(config-if)# ip access-group ACL_DEVELOP_OUT out
C9606R-Core01(config-if)# exit
C9606R-Core01(config)# end
コマンド解説:
| コマンド | 説明 |
|---|---|
ip access-group [ACL名] in | インバウンド方向にACLを適用する |
ip access-group [ACL名] out | アウトバウンド方向にACLを適用する |
インバウンドとアウトバウンドの考え方:
[VLAN10内のPC] → [SVI10のin] → ルーティング → [SVI20のout] → [VLAN20内のPC]
- インバウンド(in):そのVLANから入ってくるトラフィックを制御
- アウトバウンド(out):そのVLANへ出ていくトラフィックを制御
VLAN間ルーティングで「VLAN20からVLAN10へのアクセスを拒否」する場合、SVI10のin(VLAN20からVLAN10への入り口)またはSVI20のout(VLAN20からの出口)のどちらかに設定できます。一般的にはインバウンド(in)で制御するほうがトラフィックを早い段階でフィルタリングできて効率的です。
ステップ3:ACLの確認
設定したACLの内容を確認します。
C9606R-Core01# show ip access-lists
出力例:
Extended IP access list ACL_SALES_OUT
10 permit tcp 192.168.10.0 0.0.0.255 any eq www
20 permit tcp 192.168.10.0 0.0.0.255 any eq 443
30 permit icmp 192.168.10.0 0.0.0.255 any
40 deny ip any any log (5 matches)
Extended IP access list ACL_DEVELOP_OUT
10 deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 log (0 matches)
20 permit ip 192.168.20.0 0.0.0.255 any (12 matches)
括弧内の(5 matches)はそのACEに一致したパケット数です。denyのACEにmatchesが増えている場合、実際にトラフィックがブロックされていることが確認できます。
特定のインターフェイスに適用されているACLを確認するには:
C9606R-Core01# show ip interface vlan 10
出力例(抜粋):
Vlan10 is up, line protocol is up
Internet address is 192.168.10.1/24
...
Outgoing access list is ACL_SALES_OUT
Inbound access list is not set
Outgoing access list is ACL_SALES_OUTと表示されていれば、正しくACLが適用されています。
ステップ4:ACLエントリの追加・削除(名前付きACLの利点)
名前付きACLでは、シーケンス番号を指定して特定のエントリを削除・追加できます。
エントリの追加(既存のシーケンス番号の間に挿入)
C9606R-Core01# configure terminal
C9606R-Core01(config)# ip access-list extended ACL_SALES_OUT
! シーケンス番号25を追加(10と20の間)
C9606R-Core01(config-ext-nacl)# 25 permit tcp 192.168.10.0 0.0.0.255 192.168.99.0 0.0.0.255 eq 22
C9606R-Core01(config-ext-nacl)# exit
エントリの削除
C9606R-Core01(config)# ip access-list extended ACL_SALES_OUT
! シーケンス番号30を削除
C9606R-Core01(config-ext-nacl)# no 30
C9606R-Core01(config-ext-nacl)# exit
C9606R-Core01(config)# end
これが名前付きACLの大きなメリットです。番号付きACLでは特定のエントリだけを削除することはできず、ACL全体を削除して作り直す必要があります。
ステップ5:設定の保存
C9606R-Core01# write memory
Building configuration...
[OK]
設定コマンドのまとめ
! SALES用ACLの作成
ip access-list extended ACL_SALES_OUT
remark SALES VLAN outbound policy
10 permit tcp 192.168.10.0 0.0.0.255 any eq 80
20 permit tcp 192.168.10.0 0.0.0.255 any eq 443
30 permit icmp 192.168.10.0 0.0.0.255 any
40 deny ip any any log
! DEVELOP用ACLの作成
ip access-list extended ACL_DEVELOP_OUT
remark DEVELOP VLAN outbound policy
10 deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 log
20 permit ip 192.168.20.0 0.0.0.255 any
! SVIへの適用
interface vlan 10
ip access-group ACL_SALES_OUT out
interface vlan 20
ip access-group ACL_DEVELOP_OUT out
! 設定の保存
end
write memory
よくあるトラブルと対処法
ACLを適用したら意図しない通信もブロックされた
ACLの末尾には暗黙のdeny allがあります。必要な通信をpermitで明示的に許可していないと、すべてブロックされます。show ip access-listsでmatch数を確認し、どのACEに引っかかっているかを特定してください。
pingは通るのにTCP通信がブロックされる
ICMPをpermitしていてもTCPをpermitしていない場合に起きます。拡張ACLではプロトコルを明示的に指定する必要があります。permit ip(すべてのIPプロトコルを許可)を使うか、必要なプロトコル(tcp、udp、icmpなど)を個別に許可してください。
ACLのmatch数が増えない
ACLがインターフェイスに正しく適用されているか、show ip interface [インターフェイス名]で確認してください。また、トラフィックが実際に発生しているかも確認しましょう。
まとめ
今回のポイントをまとめます。
- ACLはpermit・denyの順序付きリストで、最初に一致した条件でパケットの処理が決まる
- ACLの末尾には暗黙のdeny allがある(設定し忘れに注意)
- 標準ACLは送信元のみ、拡張ACLは送信元・宛先・プロトコルでフィルタリングできる
- 名前付きACLを使うと、個別エントリの追加・削除が可能で管理しやすい
- Router ACLはSVIに
ip access-group [名前] in/outで適用する show ip access-listsでmatch数を確認して動作を検証するshow ip interface [インターフェイス名]でACLの適用状況を確認する
これでCisco Catalyst 9606R初期設定シリーズ①〜⑦が完成しました。「ホスト名・バナー・タイムゾーン → SSH → VLAN → トランクポート → SVIルーティング → NTP → ACL」という実務で必要な設定の一連の流れをすべてカバーできました。
これから仕事でネットワークを構築する方、CCNAの受験を控えている方の参考になれば幸いです。


コメント