Cisco IOS ACL VLAN間通信制限 L3スイッチ セキュリティ

VLAN間ルーティングを有効化すると、すべてのVLAN間で通信が可能になります。しかし、セキュリティやポリシー上の理由から特定VLAN間の通信を制限したいケースは多くあります。たとえば「業務用VLANからゲストVLANへのアクセスは禁止」「開発環境から本番環境への通信は遮断」といった要件です。

その際に活用できるのがACL(アクセス制御リスト)です。本記事では、ACLの種類・VLAN間制限の設定例・適用方向の考え方・確認方法・運用変更時の安全な手順まで、現場目線で解説します。

👷 現場での体験談

ゲスト用Wi-FiのVLANを新設した際、「ゲスト端末から社内業務サーバにアクセスできてはいけない」という要件がありました。VLAN間ルーティングはすでに有効な環境だったので、そのままでは完全に疎通が取れる状態でした。

拡張ACLをゲスト用VLANのSVIにin方向で適用したところ、ゲスト端末はインターネットにはアクセスできるが社内サーバには届かない状態を実現できました。ACLのルール順序を1つ間違えて全通信が止まるミスもしましたが、no ip access-groupでACLを一時的に外して復旧できました。ACL変更は業務時間外に実施することの大切さを実感した案件です。

ACL VLAN間通信制限構成図
ACL構成図:Extended ACLをSVIに適用してVLAN10(営業部)とVLAN20(開発部)間の通信を制限

ACLの種類と使い分け

Cisco IOSのACLには大きく2種類があります。VLAN間制御では拡張ACLを使います。

標準ACL(Standard ACL)
  • 番号:1〜99、1300〜1999
  • 送信元IPアドレスのみで制御
  • 設定が簡単な反面、条件が粗い
  • 宛先やポートを指定できないため、VLAN間制御には不向き
例:access-list 10 deny 192.168.10.0 0.0.0.255
拡張ACL(Extended ACL)
  • 番号:100〜199、2000〜2699
  • 送信元IP・宛先IP・プロトコル・ポート番号で制御
  • VLAN間制御・特定サービス制限に最適
  • 名前付きACLも使用可能(推奨)
例:deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
ℹ 名前付きACLを推奨する理由 番号付きACL(101など)より名前付きACLの方が、設定の意図がわかりやすく、後から特定のルールを挿入・削除しやすいです。本番環境では名前付きACLを使うことを推奨します。また、名前付きACLはsequence番号(行番号)を使って特定の行だけ削除・追加できます。
図1:VLAN間ACLで制限されるトラフィックの種類(現場経験ベース)

設定例:VLAN 10からVLAN 20への通信を拒否

構成

VLANネットワークゲートウェイ(SVI)用途
VLAN 10192.168.10.0/24192.168.10.1業務端末(制限元)
VLAN 20192.168.20.0/24192.168.20.1サーバ(アクセス禁止先)

ACL作成と適用コマンド

Switch# configure terminal

! 名前付き拡張ACLを作成
Switch(config)# ip access-list extended VLAN10_TO_VLAN20_DENY

! VLAN 10 → VLAN 20 の全通信を拒否(sequence 10)
Switch(config-ext-nacl)# 10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255

! その他の通信はすべて許可(sequence 20)
Switch(config-ext-nacl)# 20 permit ip any any
Switch(config-ext-nacl)# exit

! VLAN 10のSVIにACLを適用(in方向:VLAN 10から来るトラフィックに適用)
Switch(config)# interface Vlan10
Switch(config-if)# ip access-group VLAN10_TO_VLAN20_DENY in
Switch(config-if)# exit

Switch(config)# end
Switch# copy running-config startup-config
⚠ permit ip any anyを忘れると全通信が止まる CiscoのACLは末尾に暗黙のdeny any(implicit deny)があります。permit ip any anyを書き忘れると、拒否したいVLAN 20以外へのすべての通信(インターネット含む)も遮断されます。必ずdenyルールの後にpermit ip any anyを追記してください。

特定ポートのみ拒否する例(応用)

拡張ACLを使えばポートレベルの細かい制御も可能です。「RDP(3389番)のみ拒否」「HTTPSは許可してHTTPは拒否」などの設定ができます。

! 例:VLAN 10からVLAN 20へのRDP(TCP 3389)のみ拒否、その他は許可
ip access-list extended VLAN10_RESTRICT
 10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 3389
 20 permit ip any any

! 例:VLAN 10からVLAN 20へのHTTP(TCP 80)を拒否、HTTPS(443)は許可
ip access-list extended VLAN10_HTTP_DENY
 10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 80
 20 permit ip any any

ACL適用の方向(in/out)

ACLをSVIに適用する際、inoutかの選択は重要です。

in(推奨)
  • そのインターフェースに入ってくるトラフィックに適用
  • 送信元VLANのSVIに設定することで、そのVLANからのトラフィックだけを制御
  • 影響範囲が明確で管理しやすい
  • VLAN間制限では基本的にinを使う
out
  • そのインターフェースから出ていくトラフィックに適用
  • 宛先VLANのSVIに設定することで、そのVLANに向かうトラフィックを制御
  • 複数の送信元VLANをまとめて制御したい場合に有効
  • inとoutの両方を同時に適用することも可能(1方向に1ACLまで)
図2:ACLのin/out方向の概念図
VLAN 10 192.168.10.x L3スイッチ(SVI) in ACL out ACL Vlan10 SVI VLAN 20 192.168.20.x inで制御 outで制御
VLAN 10側SVI:in ACLで「VLAN10から来るトラフィック」を制御 / out ACLで「VLAN10へ向かうトラフィック」を制御

確認コマンド

! ACLの内容とヒットカウントの確認
Switch# show access-lists VLAN10_TO_VLAN20_DENY

! SVIへのACL適用状況の確認
Switch# show ip interface Vlan10

! 全ACLの確認
Switch# show ip access-lists
(show access-listsの出力例)
Extended IP access list VLAN10_TO_VLAN20_DENY
    10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 (15 matches)
    20 permit ip any any (238 matches)

! 「matches」の数でトラフィックがヒットしているか確認できる
! 拒否ルールのmatchesが増えていれば、ACLが正しく機能している証拠
確認コマンド確認できること
show access-lists [ACL名]ACLのルール内容・ヒットカウント(matchesの数)
show ip interface Vlan10そのSVIにin/outどのACLが適用されているか
show running-config | section access-list設定済みのACL一覧を確認

動作検証

ACL設定後は以下の手順で正しく機能しているか確認します。

テスト内容期待される結果確認方法
VLAN 10 → VLAN 20へping通らない(拒否)pingが全パケットロス。show access-listsのdenyのhit数が増加
VLAN 10 → インターネット(8.8.8.8)へping通る(許可)permit ip any anyが機能。pingが成功する
VLAN 10 → VLAN 30(他VLAN)へping通る(許可)VLAN 20以外はpermit ip any anyで許可される
VLAN 20 → VLAN 10へping通る(許可)ACLはVlan10のin方向のみ。逆方向(VLAN 20→10)は制限されない
ℹ 双方向を制限したい場合 VLAN 10→VLAN 20だけでなく、VLAN 20→VLAN 10も制限したい場合は、VLAN 20のSVIにも別のACLをin方向で適用します。1つのACLで双方向を制御することはできません。

ACL変更時の安全な手順

適用中のACLを変更する際は、設定ミスによる通信断リスクを最小化する手順が重要です。

方法1:インターフェースからACLを外して変更する(推奨)

! ① インターフェースからACLを解除(この間は全通信が通る状態になる)
Switch(config)# interface Vlan10
Switch(config-if)# no ip access-group VLAN10_TO_VLAN20_DENY in
Switch(config-if)# exit

! ② ACLを修正
Switch(config)# ip access-list extended VLAN10_TO_VLAN20_DENY
Switch(config-ext-nacl)# no 10                            ← 既存のsequence 10を削除
Switch(config-ext-nacl)# 10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 80
Switch(config-ext-nacl)# exit

! ③ 修正したACLを再適用
Switch(config)# interface Vlan10
Switch(config-if)# ip access-group VLAN10_TO_VLAN20_DENY in

方法2:sequence番号を使って特定ルールだけ変更する

名前付きACLではsequence番号を使って特定の行だけ削除・追加できます。インターフェースからACLを外さずに変更できるため、影響を最小化できます。

! 現在のACL(sequence 10のdenyルールを変更したい)
Switch# show access-lists VLAN10_TO_VLAN20_DENY
Extended IP access list VLAN10_TO_VLAN20_DENY
    10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
    20 permit ip any any

! sequence 10を削除して新しいルールを挿入
Switch(config)# ip access-list extended VLAN10_TO_VLAN20_DENY
Switch(config-ext-nacl)# no 10
Switch(config-ext-nacl)# 10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 3389
Switch(config-ext-nacl)# exit
🚨 ACL変更は業務時間外に実施する ACLの変更・適用中に設定ミスがあると瞬時に通信が止まります。インターフェースからACLを外す間は通信制限が解除されるため、セキュリティ的にも慎重な操作が必要です。影響を最小化するために業務時間外・メンテナンス時間に実施し、変更後はすぐに疎通確認を行ってください。

運用上の注意点まとめ

注意点内容
ルールの順序が重要ACLは上から順に評価される。許可したい通信はdenyルールより上に記述する
1方向に適用できるACLは1つまで同じインターフェースの同じ方向(in or out)に適用できるACLは1つのみ
暗黙のdenyを意識するACLの末尾にはpermit ip any anyを必ず書く。書き忘れると全通信が止まる
ACL削除はIF解除が先インターフェースに適用中のACLをそのまま削除しようとしてもエラーになる場合がある。no ip access-groupで解除してから削除する
変更は業務時間外にACL変更中の設定ミスは即座に通信断につながる。メンテナンス時間帯に実施し、変更後すぐに疎通確認を行う

まとめ

ACLを使えば、VLAN間ルーティングを有効にしつつも不要な通信を柔軟に遮断できます。

  • VLAN間制御には拡張ACL(Extended ACL)を使う。名前付きで作ると管理しやすい
  • ACLの末尾には必ずpermit ip any anyを入れる。忘れると全通信が止まる
  • 基本は送信元VLANのSVIにin方向で適用。双方向制限は各SVIにACLを設定する
  • 同一方向に適用できるACLは1つのみ
  • 変更時はno ip access-groupでいったん外してから変更するか、sequence番号で特定行を変更する
  • show access-listsのhit数とpingテストで動作を確認する

適用方向とルール順序を意識した設計で、安全なVLAN間アクセス制御を実現しましょう。