ACLのリストが空、または定義されていない状態でインターフェースに適用した場合、通信はどうなるのでしょうか。

「ACLには暗黙のdenyがあるのだから、すべて拒否されるのでは」と考えたくなりますが、Cisco機器(IOS / IOS XE)の仕様として正しいのは「確認するリストがない=何も確認しない」となり、すべて透過されるという動作です。

問題集や解説サイトによっては「すべて拒否」と誤って記載されているケースも見られるため、本記事ではその根拠と、なぜ解釈が分かれるのかを整理します。

Cisco公式ガイドにおける定義

Ciscoの構成ガイドでは、未定義のACLをインターフェースに適用した場合、デバイスはそのACLが適用されていないかのように動作し、すべてのパケットを許可すると明記されています。あわせて、セキュリティ目的で未定義のACLを使う場合はこの挙動に注意するよう促されています。

つまり、中身が空(ACEが未登録)のACLや、存在しない名前・番号のACLを適用したインターフェースでは、フィルタリングが一切かからず、すべてのトラフィックがそのまま透過します。

なぜ「暗黙のdeny」が効かないのか

「ACLには必ず末尾に暗黙のdenyがあるのだから、空でも全て拒否されるのでは」という疑問は自然なものですが、ここには明確な仕組みの違いがあります。

① ACE(エントリ)が1つ以上ある場合

作成したACLの中にpermitやdenyのルール(ACE)が1行でも書き込まれている場合、初めてリストの末尾に暗黙のdeny(deny ip any any / deny ipv6 any any)が有効になります。このとき、登録したどのルールにもマッチしなかったパケットは、最終的にこの暗黙のdenyによって破棄されます。

② ACEが0(空)、またはACL自体が存在しない場合

IOSは、適用されたACL名の中に「比較すべきターゲットエントリが一切存在しない」と判断すると、ACLによる検査プロセス自体をスキップします。結果として、ACLが適用されていない状態(デフォルトの全透過)と同じ動作になります。

暗黙のdenyは「リストの最後に置かれるもの」であり、そもそもリストとして機能していなければ発動しない、と捉えると理解しやすいでしょう。

なぜ解説によって回答がばらつくのか

理論上の原則と実機の実装の乖離

「ACL=末尾に暗黙のdenyがあるもの」という原則的な知識だけで考えると、「空でも暗黙のdenyが効くはず」という誤った結論に達しがちです。実際の実装は、この原則の適用条件がACEの有無に依存しています。

安全対策としてのメーカー仕様

もし「空のACLを適用しただけで全通信が拒否される」仕様であれば、運用中にACLを誤って削除したり設定手順を間違えたりした瞬間に、遠隔管理していたスイッチやルータへの通信が即座に切断され、復旧できなくなるリスクがあります。

Ciscoを含む主要なネットワーク機器では、こうした運用上の致命的な事故を防ぐセーフティネットとして、「空・未定義のACLは全許可(透過)」という実用的な実装が採用されています。

まとめ

  • 中身が完全に空、または未定義のACLを適用しても通信は遮断されず、すべて透過(permit)される
  • 暗黙のdenyが有効になるのは、ACEが1つ以上登録されている場合のみ
  • この仕様は、設定ミスによる遠隔管理の切断を防ぐための実装上のセーフティネット

裏を返せば、ACLを適用したこと自体を「フィルタリングが有効になった」と見なすのは危険ということでもあります。適用後はshow ip access-listsなどでエントリが正しく登録されているかを必ず確認しましょう。