ACL(設定と活用)

目次

ACLのステータス確認方法

ACL(アクセスコントロールリスト)の状態を確認する際に使う基本コマンドは show access-lists です。これを実行すると、ルータに設定されているすべてのACLの情報が一覧表示されます。もし特定のACLだけを確認したい場合には、番号または名前を指定して実行します。また、IPプロトコルに関するACLだけを確認する場合には show ip access-lists を用いることができます。

つまり、以下のように使い分けることができます。

  • 全てのACLを表示する場合は show access-lists
  • 特定のACL(番号や名前)を表示する場合は show access-lists 100 など
  • 特定プロトコルに限定して表示する場合は show ip access-lists

表示結果には、それぞれの条件文ごとに「シーケンス番号」と「一致したパケット数」が示されます。出力に含まれる「~ matches」という表示が、実際にその条件に一致したパケットの数を表しています。例えば「access-list 100 permit icmp host 192.168.1.10 host 192.168.1.254 (12 matches)」とあれば、12個のパケットがそのルールに該当したということです。

ここで重要なのは、ACLの最後には必ず 暗黙の deny any が存在するという点です。つまり、どの条件にも合致しないパケットは自動的に破棄されます。これは出力には表示されないため、試験問題でもよく「暗黙のdeny」が前提として問われるので必ず覚えておきましょう。

ACLがどのインターフェースに適用されているかを確認するには show running-config の他に show ip interface を使う方法があります。この出力から「どのインターフェースに、どの方向(inbound / outbound)でACLが適用されているか」を確認できます。試験でも設定の方向を誤解しないことが重要です。

シーケンス番号を使ったACLの編集(追加)

ACLに条件を追加する場合、通常は最後の行に自動で追加されます。番号はデフォルトで「10」から始まり、10ずつ増えていきます。つまり、最初に「10」「20」「30」と並んでいれば、次に追加する行は「40」になります。

しかし、「この条件をリストの先頭に入れたい」と思うこともあります。その場合はシーケンス番号を明示的に指定することで、任意の位置に条件を挿入できます。例えば「10」より小さい番号を指定すれば、その行を最初に持ってくることが可能です。

このとき必要になるのが 名前付きACLの構文 です。以下のように設定します。

(config)# ip access-list extended 100
(config-ext-nacl)# 5 permit ip host 192.168.0.1 host 20.1.1.1

このようにシーケンス番号「5」を指定することで、先頭に条件を追加することができます。なお、標準ACLの場合は機種によっては反映されにくいことがあるため注意が必要です。

シーケンス番号を使ったACLの編集(削除)

ACLの一部だけを削除したい場合にもシーケンス番号を活用します。たとえば、ACL101に4つの条件があり、そのうち最後の「permit tcp any any」だけを消したいとしましょう。

このとき単純に

no access-list 101 permit tcp any any

と入力すると、ACL101全体が削除されてしまいます。

部分的に削除するには以下の手順をとります。

  1. show access-lists で対象となる条件文のシーケンス番号を確認する。
  2. そのACLが「標準ACL」か「拡張ACL」かを判断する。
  3. それに応じて次のように入力する。

標準ACLの場合:

(config)# ip access-list standard 1
(config-std-nacl)# no 30

拡張ACLの場合:

(config)# ip access-list extended 101
(config-ext-nacl)# no 40

このようにシーケンス番号を使うと、不要な行だけをピンポイントで削除できるのです。

試験でも「特定のルールだけを消すにはどうすべきか」という問題が出やすいので、no access-list 文をそのまま打つと全部消えるという落とし穴に注意してください。

VTYへのアクセス制御とは

ACLは通常「ルータを通過するトラフィック」を制御する目的で使われますが、実はルータそのものへの管理アクセスを制御する用途にも利用されます。この管理アクセスは VTY(Virtual Teletype)ポート を経由して行われ、TelnetやSSHでルータへ接続する際に必ず通ります。

もし各インターフェースに拡張ACLを適用して管理アクセスを制御しようとすると、インターフェースの数だけACLを作らなければなりません。しかし、VTY回線に対して標準ACLを適用すれば、たった一つのACLでルータ全体への管理アクセスを制御できるため、設定がシンプルになります。試験でも「VTYへのACL適用」という観点はよく問われますので、必ず押さえておきましょう。

VTYへのアクセス制御の設定手順

まずは「どの送信元アドレスを許可するか(または拒否するか)」を決めるために標準ACLを作成します。標準ACLは番号形式でも名前形式でも問題ありません。

番号付き標準ACLの例:

(config)# access-list 10 permit 192.168.1.0 0.0.0.255

次に、作成したACLをVTY回線へ適用します。

(config)# line vty 0 15
(config-line)# access-class 10 in

この設定により、192.168.1.0/24 からのTelnetやSSHアクセスだけが許可され、それ以外の送信元からの接続は拒否されます。ここで「in」を指定しているのは、ルータへ入ってくる管理アクセスを制御するためです。

アウトバウンドでのVTYアクセス制御

多くの場合、VTYアクセス制御はインバウンドで設定します。つまり「どの端末がルータへ管理接続できるか」を制御する使い方です。

しかし、アウトバウンドに設定することも可能です。この場合は逆に、ルータ自身が他の機器へTelnetやSSHで接続する際の通信を制御します。ここで重要なのは、通常の標準ACLが「送信元アドレス」で判断するのに対して、アウトバウンドで使う場合は宛先アドレスで判断するという点です。

例えば以下のように設定すれば、ルータから 10.1.1.1 へのTelnet接続を禁止できます。

(config)# access-list 15 deny 10.1.1.1
(config)# access-list 15 permit any
(config)# line vty 0 15
(config-line)# access-class 15 out

この場合、ルータのコンソールから telnet 10.1.1.1 と入力しても接続できません。つまり制御対象は「ルータを通過するパケット」ではなく、「ルータ自身が生成した管理アクセスのトラフィック」なのです。

試験対策:
・VTYへのACLは標準ACLで設定するのが基本
・インバウンドは「ルータに入る管理アクセス」を制御する
・アウトバウンドは「ルータ自身が外へ出す管理アクセス」を制御する
・標準ACLがアウトバウンド適用時は「宛先アドレス」を基準に動作する点が重要

ここは試験でも混乱しやすい部分なので、「インバウンド=送信元アドレスの制御」「アウトバウンド=宛先アドレスの制御」という整理で覚えておくと安心です。

◆まとめスライド

目次