Cisco Systems社認定資格であるCCNA(Cisco Certified Network Associate)出題範囲における技術について、定期的にご紹介します。
CCNA資格は【ICND1】【ICND2】の2つの試験に合格することで取得できます。
今回はICND1の出題範囲であるアクセスコントロールリスト(ACL)について説明します。
アクセスコントロールリストとは?
ルータが受信または送信するパケットの「送信元」や「宛先」、あるいはパケットの中身などから条件に合うパケットを特定し、そのパケットに対して必要な処理を行う場合に使用されるのが、アクセスコントロールリスト(Access Contorol List:ACL)です。
アクセスコントロールリストをパケットフィルタリングとして使用する場合は、次の2つのステップによって設定します。
◆Step1 アクセスコントロールリストの作成
ルータを通過するパケットに対して、許可または拒否の条件設定をリストとして作成する。
◆Step2 インターフェースへの適用
作成したアクセスコントロールリストを、インターフェースに適用することで、フィルタリングが行われる。
上図の例では、RT-Aでパケットフィルタリング処理が行われており、アクセスコントロールリストによってフィルタリングするパケットを特定しています。
アクセスコントロールリストには、送信元IPアドレスが192.168.1.1、宛先IPアドレスが10.x.x.1のパケットを拒否、送信元IPアドレスが192.168.1.2、宛先IPアドレスが10.x.x.1のパケットは許可するように記述されています。
これにより、Host-Aからのパケットは破棄され、Host-Bからのパケットは転送されるようになります。
アクセスコントロールリストの種類
Cisco IOSで使用されるアクセスコントロールリストには、複数の種類があります。
IPに関するアクセスコントロールリストは4種類あり、どのアクセスコントロールリストを使用するかによって、指定できる条件が異なります。
標準アクセスコントロールリスト、名前付き標準アクセスコントロールリストで指定できる条件は、送信元IPアドレスのみです。
一方、拡張アクセスコントロールリスト、名前付き拡張アクセスコントロールリストで指定できる条件は、送信元IPアドレス、宛先IPアドレス、プロトコルと細かく設定をすることが可能です。
リスト番号は、アクセスコントロールリストの設定の際に必要なパラメータで、標準、拡張アクセスコントロールリストでそれぞれ指定された値の中から、任意の番号を指定して使用します。
使用できる番号は、プロトコルおよびアクセスコントロールリストの種類によって異なり、TCP/IPプロトコルの場合は、ACL番号として1~2699の範囲が利用できます。 それ以外の番号は別のプロトコルで使用されます。
名前付きアクセスコントロールリストでは、その番号の代わりに任意の名前を付けることができます。 また、リストの編集も一部可能になっています。
ACL番号 |
ACLの種類 |
1~99 |
標準IPアクセスコントロールリスト |
1300~1999 |
|
100~199 |
拡張IPアクセスコントロールリスト |
2000~2699 |
アクセスコントロールリスト適用の向き
アクセスリストをインターフェースに適用する際には、どちらの向きでフィルタリングを行うのかを決定しなければなりません。
ルータがインタフェースで受信するトラフィックを「インバウンド(inbound)」、送信するトラフィックを「アウトバウンド(outbound)」と呼びます。
適用の向き |
動 作 |
inbound(内向き) |
パケット受信時に、指定したACLとの比較を行う。 |
outbound(外向き) |
パケットを受信しルーティング処理後、出力インターフェースから送信する前に指定したACLとの比較を行う。 |
指定したアクセスコントロールリストによって許可されたパケットは送受信され、拒否されたパケットは破棄されます。
◆注意点
同一のアクセスコントロールリストを、複数のインタフェースに対して設定することも可能です。
しかし、1つのインタフェースに設定できるアクセスコントロールリストは、インバウンドおよびアウトバウンドに対して、それぞれ1つのみとなります。
もしも、1つのインタフェースの同一方向に対して、異なるアクセスコントロールリストを2つ設定した場合は、後から設定したものが有効となり、先に設定したものは上書きされて消えてしまいます。
アクセスコントロールリストの記述
アクセスコントロールリストは、複数の「ステートメント(文)」から成る「リスト」です。
ステートメントは「条件」と「処理」から成り、「条件」に一致した場合にどのように「処理」するのかを記述していきます。
このステートメントを必要に応じて複数記述することで「リスト」を作成します。
アクセスコントロールリストとの比較
パケットの情報とアクセスリストの条件を比較する際は、リストの1行目、2行目と上から順番に比較されていきます。
この比較は一致するステートメントが見つかるまで行われ、条件に一致するステートメントが見つかった場合は、その処理に従ってパケットを転送するか、破棄します。
また、条件に一致したステートメント以降に関しては、比較は行われません。
したがって、ステートメントを記述する順番に十分注意してリストを作成する必要があります。
パケットフィルタリングでアクセスコントロールリストを使用する場合は、リストのステートメントが何十行にもなることも珍しくありません。 その際、記述する順番が誤っていると、予期せぬ通信の許可などによるセキュリティ上の問題を招いてしまうこともありますので、十分な検討と検証が必要となります。
暗黙のdeny
Cisco IOSでは、アクセスコントロールリストの最終行に「暗黙のdeny」と呼ばれるものが入ります。
「暗黙のdeny」はshowコマンドを実行した場合にも表示されることがないため、このように呼ばれています。
これはリストを上から順に確認していったところ、最終的にどのステートメントにも一致しなかった場合に、受信したパケットを拒否することを意味します。
そのため、アクセスコントロールリストを作成する際には、最低でも許可文を1行は設定しておく必要があります。
許可文が存在しない場合は、全ての通信が破棄されてしまうため注意が必要です。
ワイルドカードマスク
ワイルドカードマスクは、指定したIPアドレスのどのビットを比較対象とするかを定義するために、アクセスコントロールリストで使用される値です。
IPアドレスと同じ32ビットの値であり、記述する際もIPアドレスと同じオクテットで区切った10進数で表記します。
ワイルドカードマスクでは、同じ位置のIPアドレスのビットに対し、ビット「0」が比較対象ビットであることを表し、ビット「1」は非比較対象ビットであることを表します。
つまり、ワイルドカードマスクのビットが1の位置のIPアドレスのビットは任意(0でも1でもどちらでもよい)という意味になります。
なお、ワイルドカードマスクはアクセスコントロールリストを記述する際に、比較対象のIPアドレスの後ろに記述します。
1つのネットワーク内の全端末を指定する場合
上図のように、1つのネットワーク内の全ての端末を比較対象として指定する場合は、ネットワーク内の端末のIPアドレスが先頭から何ビット目まで共通で使われているかを考えます。
ここでは192.168.1.0/24ネットワーク内の全端末を指定しています。
まず2進数のビットに注目し、先頭から何ビット目までが共通で使用されているかを確認すると、24ビット目までであることがわかります。
つまり、このビットを比較対象とすることで192.168.1.0/24ネットワーク内のホストであることが判断できます。
ワイルドカードマスクでは、比較対象のビットを「0」で表現しますから、先頭から24ビットまでを「0」とします。
残りの8ビットは比較対象にはならないので「1」とし、これを10進数で表現すると「0.0.0.255」となります。
ネットワーク内の一部端末のみを指定する場合
上図のようにネットワーク内の一部の端末を指定する場合でも、考え方は全く同じです。
ここでは192.168.1.0/24ネットワーク内の192.168.1.32~47/24の端末を指定する場合を例にとって解説します。
2進数に注目すると、先頭から28ビット目までは共通で使用されていることがわかります。 このことから、28ビットまで比較対象とすれば192.168.1.32~47/24の範囲に含まれる端末であることがわかります。
したがって、比較対象のビットを「0」とし、残りのビットを非比較対象の「1」とすると10進数表記では「0.0.0.15」となります。
端末指定
PC、サーバなど特定のホストを指定する際のワイルドカードマスクは、全てのビットを比較対象とすることで指定することができます。 ここでは、192.168.1.1のホストを指定する場合を例に解説します。
特定のホストを指定する際は、全てのビットを比較対象とするため「0」を32ビット並べます。 これを10進数で表現すると「0.0.0.0」となります。
全IPアドレス指定
全IPアドレスを指定する場合には、IPアドレス「0.0.0.0」(全てのIPアドレスを表す)に対して、ワイルドカードマスクとしては、全てのビットを比較対象にしないと指定します。
全IPアドレスを指定する際は、全てのビットを比較対象としないため、「1」を32ビット並べます。 これを10進数で表現すると「255.255.255.255」となります。
キーワード
アクセスコントロールリストを記述する際に、特別なキーワードを使用することがあります。
◆host
hostキーワードは、ワイルドカードマスク「0.0.0.0」の代わりとして使われます。
例えば、IPアドレスが192.168.1.1、ワイルドカードマスクが「0.0.0.0」であれば、比較対象のIPアドレスは192.168.1.1のみとなります。
通常は「IPアドレス ワイルドカードマスク」の順で記述するところを、hostキーワードを使って「host IPアドレス」を記述することができます。 上記の場合であれば、「host 192.168.1.1」となります。
◆any
anyキーワードはIPアドレス「0.0.0.0」、ワイルドカードマスク「255.255.255.255」の代わりとして使用されます。
これは、IPアドレスが「0.0.0.0~255.255.255.255」の全範囲を指定することとなります。
この場合、IPアドレスに何を記述しても、ワイルドカードマスクが「255.255.255.255」となっているため同じ意味となりますが、一般的に「0.0.0.0」を使用します。
通常は「IPアドレス ワイルドカードマスク」の順で記述するところを、anyキーワードを使って「any」のみで記述できます。
◆ポート番号
アクセスコントロールリストでは、比較条件としてトランスポート層のポート番号を使用することができます。 この場合、一般的にはWell-Knownポート番号を記述することが多くなります。
例えば、HTTPなら「80」を指定して記述します。
また、一部のWell-Knownポート番号については、ポート番号の代わりにプロトコル名を記述することもできます。
ポート番号 |
プロトコル |
キーワード |
20 |
FTP(データ) |
ftp-data |
21 |
FTP(コントロール) |
ftp |
23 |
TELNET |
telnet |
25 |
SMTP |
smtp |
53 |
DNS |
domain |
67/68 |
DHCP |
bootpc、bootps |
69 |
TFTP |
tftp |
80 |
HTTP |
www |
110 |
POP3 |
pop3 |
161 |
SNMP |
snmp |
標準アクセスコントロールリスト
標準アクセスコントロールリストの作成は、以下の順に行います。
① リスト番号の指定:
標準IPアクセスコントロールリストのACL番号は、1~99と1300~1999の範囲を使用します。 一般的には1~99の範囲を利用することが多いです。
② 処理の指定:
permit(許可)または、deny(拒否)を指定します。
③ 条件の指定:
送信元IPアドレスとワイルドカードマスクを指定します。 ワイルドカードマスクを省略した場合は、「0.0.0.0」を指定したとみなされます。
上記の例は、次のような指定を行っています。
○A: 192.168.1.0ネットワーク内の端末からの通信を拒否
○B: ホスト172.16.0.1からの通信を許可(「host 172.16.0.1」の代わりに「172.16.0.1 0.0.0.0」でもよい)
どちらのコマンドもリスト番号を「1」としていますが、リスト番号を揃えて入力することで、1行目、2行目と追加されていきます。
アクセスコントロールリストの適用では、次の指定をします。
① 適用させるリスト番号を入力
② in(内向き)、out(外向き)を選択
この設定により、アクセスコントロールリスト1番の条件に基づいて、F0/0インタフェースから送信するパケットに対して比較が行われます。
拡張アクセスコントロールリスト
拡張アクセスコントロールリストの作成は、以下の順に行います。
① リスト番号の指定:
拡張アクセスコントロールリストのACL番号は、100~199と2000~2699の範囲を使用します。 一般的には100~199の範囲を利用することが多いです。
② 処理の指定:
permit(許可)または、deny(拒否)を指定します。
③ プロトコルの指定:
対象とするプロトコルを指定します。(tcp、udp、icmp、ipなどネットワーク層およびトランスポート層プロトコル)
④ 送信元アドレス:
送信元IPアドレスとワイルドカードマスクを指定します。
⑤ 宛先アドレス:
宛先IPアドレスとワイルドカードマスクを指定します。
⑥ ポート番号:
宛先ポート番号を指定します。(任意)
上記の例は、次のような指定を行っています。
○A: 192.168.1.0ネットワーク内の端末からホスト192.168.2.254に対するtelnetを拒否
(「access-list 100 deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.254 eq telnet」としても可)
○B: IP通信は全て許可(すべての通信を許可)
(「access-list 100 permit ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255」としても可)
アクセスコントロールリストの適用では、標準の時と同様に次の指定をします。
① 適用させるリスト番号を入力
② in(内向き)、out(外向き)を選択
この設定により、アクセスコントロールリスト100番の条件に基づいて、F0/0インタフェースで受信するパケットに対して比較が行われます。
また、プロトコルとしてtcpまたはudpを指定する場合、「比較演算子 ポート番号(数字またはキーワード)」の順に記述します。
比較演算子には、下記の4つがあります。
◆比較演算子
記号 |
意味 |
eq(equal) |
等しい |
neq(not equal) |
等しくない |
gt(greater than) |
より大きい |
lt(less than) |
より小さい |
名前付きアクセスコントロールリスト
名前付きアクセスコントロールリストは、ACL番号の代わりに任意の文字列をリストの識別に使用するものです。 作成の際に、標準アクセスコントロールリストなのか、拡張アクセスコントロールリストなのかを指定するようになります。
名前付きアクセスコントロールリストでは、応用IPアクセスコントロールリストコンフィグレーションモードを使用してステートメントを記述していきます。
このとき「access-list」コマンドではなく、「ip access-list」コマンドを使用することに注意してください。
標準と拡張の指定には、standard(標準)とextended(拡張)のいずれかを使用します。
「アクセスリスト名」は任意のアクセスコントロールリストの名前です。
拡張アクセスコントロールリストで使用した例を、名前付きアクセスコントロールリストとして記述した場合は、以下のようになります。
(config)# ip access-list extended sampleacl (config-ext-nacl)# permit tcp 192.168.1.0 0.0.0.255 host 192.168.2.254 eq 23 (config-ext-nacl)# permit ip any any |
名前付きIPアクセスコントロールリストでは、標準・拡張アクセスコントロールリストではできなかった、ステートメント単位での削除が可能となっています。
削除したい場合は、対象のステートメントの先頭に「no」を付けて記述します。
また、リスト全体を削除する場合は、以下のようにします。
(config)# no ip access-list [ standard | extended ] アクセスリスト名 |
access-class
ルータの管理目的のために、TELNETやSSHを利用したリモートアクセス接続をすることがあります。 この場合、ルータは仮想回線(vty)で接続を受け付けます。
リモートアクセス接続を制限したい場合、フィルタリング機能を使用して特定の条件を満たす機器のみがリモート接続できるように設定します。
このとき、インタフェースにアクセスコントロールリストを設定し、フィルタリングを行うこともできます。しかし、接続可能なインタフェース全てに対して設定する必要があります。
他のアクセスコントロールリストを使用している場合、リモートアクセス接続用のアクセスコントロールリストを設定できません。 インタフェースに適用しているフィルタリングに、リモートアクセス接続用のフィルタリングを追加することでも対応は可能ですが、設定によってはルータ以外に対するリモートアクセス接続そのものを制限してしまう可能性もあります。 また、インタフェースが多い場合、設定作業が煩雑になる可能性があります。
そのため、ルータへのリモートアクセス接続だけに対応するフィルタリング、すなわち仮想回線(vty)に対するフィルタリングを設定する必要があります。
仮想回線(vty)に対するアクセスコントロールリストは、通常送信元IPアドレスにより対象機器を特定することが多いため、標準アクセスコントロールリストを使用します。
仮想回線(vty)にアクセスコントロールリストを設定するには、ラインコンフィグレーションモードでaccess-classコマンドを使用します。
ACL番号または名前で、設定するアクセスコントロールリストを指定し、inまたはoutで方向を指定します。
通常リモートアクセス接続はインバウンドですから、inを指定します。 outを指定した場合、仮想回線(vty)から他の機器へのリモートアクセス接続をフィルタリングするようになります。
上記の例は、次のような指定を行っています。
① ホスト192.168.1.1からの通信を許可
② 仮想回線を指定
③ access-classコマンドにて、作成したACL1を適用
アクセスコントロールリストの確認
作成したアクセスコントロールリストの内容を確認するには、「show ip access-lists」コマンドを使用します。
また、show ip access-listsコマンドでは、リスト番号を指定することで、特定のリスト番号のみを確認することができます。
show ip access-listsの出力結果例は以下のようになります。
リストごとに、種類(標準・拡張)と、ACL番号・名前が表示されます。 ステートメントには先頭にシーケンス番号、次に処理と条件が表示されます。
設定したフィルタリングの確認を行うためには、「show ip interface」コマンドを使用します。
show ip interfaceの出力結果例は以下のようになります。
枠線内の「Outgoing access list」がアウトバウンドに設定されているアクセスコントロールリストで、「Inbound access list」がインバウンドに設定されているアクセスコントロールリストを示しています。
設定がない場合は、「not set」と表示されます。