拡張IPアクセスリストは、パケットの通過を許可するか/拒否するか (拒否したパケットは破棄される) の判断を、送信元/宛先IPアドレス、送信元/宛先ポート番号、プロトコルを使用することができます。そのため、telnet だけを拒否するとか、HTTP だけを禁止するとか、のようにアプリケーション単位で許可/拒否の制御が可能です。
名前付きIPアクセスリストは IOS11.2 以降でサポートされたため、通常、拡張IPアクセスリストと言えば番号付き拡張IPアクセスリストのことを指します。標準IPアクセスリスト同様に、番号付き拡張IPアクセスリストの設定方法には、旧来の方法と、新しい方法 (名前付きIPアクセスリストがサポートされてからの方法) があります。
1) 番号付き拡張IPアクセスリストの作成 (旧来の方法)
(config)# access-list [アクセスリスト番号] [許可/拒否] [プロトコル] [送信元アドレス] [送信元ポート] [宛先アドレス] [宛先ポート]
アクセスリスト番号 | 100~199/2000~2699 |
許可/拒否 | permit/deny |
プロトコル | tcp/udp/ip/icmp |
送信元アドレス | 送信元アドレス ワイルドカードマスク |
送信元ポート | eq/neq/gt/lt/range ポート番号/アプリケーション名 |
宛先アドレス | 宛先アドレス ワイルドカードマスク |
宛先ポート | eq/neq/gt/lt/range ポート番号/アプリケーション名 |
※特殊な場合を除いて、一般的に送信元ポートは使用しません。
2) 番号付き拡張IPアクセスリストの作成 (新しい方法)
(config)# ip access-list extended [アクセスリスト番号]
(config-ext-nacl)# <シーケンス番号> [許可/拒否] [プロトコル] [送信元アドレス] [送信元ポート] [宛先アドレス] [宛先ポート]
アクセスリスト番号 | 1~99/1300~1999 |
シーケンス番号 | 条件文の行番号 (省略可) |
プロトコル | tcp/udp/ip/icmp |
送信元アドレス | 送信元アドレス ワイルドカードマスク |
送信元ポート | eq/neq/gt/lt/range ポート番号/アプリケーション名 |
宛先アドレス | 宛先アドレス ワイルドカードマスク |
宛先ポート | eq/neq/gt/lt/range ポート番号/アプリケーション名 |
※特殊な場合を除いて、一般的に送信元ポートは使用しません。
拡張IPアクセスリストの場合の送信元アドレス/宛先アドレスの書き方は次のようになります。
(1) 1つのIPアドレス (192.168.0.1) を指定する場合
1) host 192.168.0.1
2) 192.168.0.1 0.0.0.0
(2) ネットワーク (192.168.0.0/24) を指定する場合
1) 192.168.0.0 0.0.0.255
(3) アドレスブロック (192.168.0.0/24 ~ 192.168.3.0/24) を指定する場合
1) 192.168.0.0 0.0.3.255
(4) 全アドレスを指定する場合
1) 0.0.0.0 255.255.255.255
2) any
3) 作成したIPアクセスリストの適用
アクセスリストのインターフェイスへの適用は、標準、拡張、番号付き、名前付き、どれも同じコマンドです。
(config-if)# ip access-group [アクセスリスト番号/名前] [in/out]
想定するネットワーク構成図
ラボ・シナリオで使用するネットワーク構成図
・物理 PC の VirtualBox 上に、PC-A、PC-B、PC-C の3つの仮想 PC を構成する。
・PC-A、PC-B は物理 PC に標準搭載している LAN ポートを使用するように VirtualBox を設定する。
・物理 PC に USB-LAN 変換ケーブルを1つ接続し、PC-C がそれを使用するように VirtualBox を設定する。
- RT-A、RT-B をネットワーク構成図に示す通り設定し、シングルエリア OSPF を構成しなさい。
< RT-A >
Router# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# host RT-A
RT-A(config)# int f0/0
RT-A(config-if)# ip add 192.168.1.1 255.255.255.0
RT-A(config-if)# no shut
RT-A(config-if)# int f0/1
RT-A(config-if)# ip add 192.168.2.1 255.255.255.0
RT-A(config-if)# no shut
RT-A(config-if)# router ospf 1
RT-A(config-router)# net 192.168.0.0 0.0.255.255 area 0
RT-A(config-router)# ^Z
RT-A#
< RT-B >
Router# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# host RT-B
RT-B(config)# int f0/0
RT-B(config-if)# ip add 192.168.2.2 255.255.255.0
RT-B(config-if)# no shut
RT-B(config-if)# int f0/1
RT-B(config-if)# ip add 192.168.3.2 255.255.255.0
RT-B(config-if)# no shut
RT-B(config-if)# router ospf 1
RT-B(config-router)# net 192.168.0.0 0.0.255.255 area 0
RT-B(config-router)# ^Z
RT-B#
- PC-A、PC-B、PC-C をネットワーク構成図に示す通り設定しなさい。
< PC-A >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.10 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.10
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-B >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.11 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.11
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-C >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.3.10 255.255.255.0 192.168.3.2
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.3.10
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.3.2
C:\>
- PC-A から RT-B の F0/0 と F0/1 へ ping を実行しなさい。
< PC-A >
C:\> ping 192.168.2.2 ← RT-B F0/0 のIPアドレス
192.168.2.2 に ping を送信しています 32 バイトのデータ:
192.168.2.2 からの応答: バイト数 =32 時間 =2ms TTL=254
192.168.2.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.2.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.2.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.2.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 1ms、最大 = 2ms、平均 = 1ms
C:\>
< PC-A >
C:\> ping 192.168.3.2 ← RT-B F0/1 のIPアドレス
192.168.3.2 に ping を送信しています 32 バイトのデータ:
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 1ms、最大 = 1ms、平均 = 1ms
C:\>
RT-B へのIPアクセスを禁止するには、この2つのIPアドレス宛てのパケットを拒否する必要があります。PC-A (192.168.1.10) からこの2つのIPアドレス宛てのパケットを拒否し、その他のパケットを許可するには次のアクセスリストを使用します。
access-list 100 deny ip host 192.168.1.10 host 192.168.2.2 ← 192.168.1.10 から 192.168.2.2 宛てのパケットを拒否する
access-list 100 deny ip host 192.168.1.10 host 192.168.3.2 ← 192.168.1.10 から 192.168.3.2 宛てのパケットを拒否する
access-list 100 permit ip any any
PC-A (192.168.1.10) 発 RT-B 宛 (PC-A → RT-B) のパケットを拒否するためには、このパケットが流れる方向にアクセスリストを適用します。具体的には、「RT-A の F0/0 in」または「RT-A F0/1 out」または「RT-B F0/0 in」です。
「RT-B F0/1 out」は RT-B を通過した出口なので、ここに設定しても意味がありません。
ただし、拡張IPアクセスリストはできるだけ送信元に近いところに設定すべきですので、「RT-A の F0/0 in 」に設定するのが最適です。
- RT-A を、上記内容を基に設定しなさい。
< RT-A >
RT-A# conf t
Enter configuration commands, one per line. End with CNTL/Z.
RT-A(config)# access-list 100 deny ip host 192.168.1.10 host 192.168.2.2
RT-A(config)# access-list 100 deny ip host 192.168.1.10 host 192.168.3.2
RT-A(config)# access-list 100 permit ip any any
RT-A(config)# int f0/0
RT-A(config-if)# ip access-group 100 in
RT-A(config-if)# ^Z
RT-A#
- sh access-lists コマンドで設定したアクセスリストを確認しなさい。
< RT-A >
RT-B# sh access-lists
Extended IP access list 100
10 deny ip host 192.168.1.10 host 192.168.2.2
20 deny ip host 192.168.1.10 host 192.168.3.2
30 permit ip any any
RT-A#
アクセスリストの前についている「10」「20」「30」はシーケンス番号です。
シーケンス番号については後からやりますが、初期値が「10」で、「+10」単位で増えていきます。
- PC-A から RT-B の F0/0 と F0/1 へ ping を実行しなさい。
< PC-A >
C:\> ping 192.168.2.2 ← RT-B F0/0 のIPアドレス
192.168.2.2 に ping を送信しています 32 バイトのデータ:
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.2.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
C:\>
< PC-A >
C:\> ping 192.168.3.2 ← RT-B F0/1 のIPアドレス
192.168.3.2 に ping を送信しています 32 バイトのデータ:
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.1.1 からの応答: 宛先ネットワークに到達できません。
192.168.3.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
C:\>
- PC-B から RT-B の F0/0 と F0/1 へ ping を実行しなさい。
< PC-B >
C:\> ping 192.168.2.2 ← RT-B F0/0 のIPアドレス
192.168.2.2 に ping を送信しています 32 バイトのデータ:
192.168.2.2 からの応答: バイト数 =32 時間 =2ms TTL=254
192.168.2.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.2.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.2.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.2.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 1ms、最大 = 2ms、平均 = 1ms
C:\>
< PC-B >
C:\> ping 192.168.3.2 ← RT-B F0/1 のIPアドレス
192.168.3.2 に ping を送信しています 32 バイトのデータ:
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 からの応答: バイト数 =32 時間 =1ms TTL=254
192.168.3.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 1ms、最大 = 1ms、平均 = 1ms
C:\>
192.168.1.10 (PC-A) から RT-B への ping は失敗し、192.168.1.11 (PC-B) からの ping は成功しています。
- RT-A を、次の通り設定し、sh access-lists コマンドを実行しなさい。
< RT-A >
RT-A(config)# ip access-list extended 101
RT-A(config-ext-nacl)# deny ip host 192.168.1.10 host 192.168.2.2
RT-A(config-ext-nacl)# deny ip host 192.168.1.10 host 192.168.3.2
RT-A(config-ext-nacl)# permit ip any any
RT-A(config-ext-nacl)# ^Z
RT-A# sh access-lists
Extended IP access list 100
10 deny ip host 192.168.1.10 host 192.168.2.2 (5 matches)
20 deny ip host 192.168.1.10 host 192.168.3.2 (5 matches)
30 permit ip any any (57 matches)
Extended IP access list 101
10 deny ip host 192.168.1.10 host 192.168.2.2
20 deny ip host 192.168.1.10 host 192.168.3.2
30 permit ip any any
RT-A#
番号付き拡張IPアクセスリストの新しい作成方法です。
- 設定したアクセスリストを running-config で確認しなさい。
< RT-A >
RT-A# sh run | section access-list
access-list 100 deny ip host 192.168.1.10 host 192.168.2.2
access-list 100 deny ip host 192.168.1.10 host 192.168.3.2
access-list 100 permit ip any any
access-list 101 deny ip host 192.168.1.10 host 192.168.2.2
access-list 101 deny ip host 192.168.1.10 host 192.168.3.2
access-list 101 permit ip any any
RT-A#
旧来の作成方法も新しい作成方法も、sh run では同じです。
後のシナリオでやりますが、名前付きアクセスリストは表示が異なります。
RT-B には F0/0 と F0/1 の2つのインターフェイスがあり、それぞれに次図のとおりIPアドレスが設定されています。