前回学んだ「関所のルールブック」を、実際にルーターへ書き込むには、どんな順番でコマンドを打てばよいでしょうか?
ルールブック(ACLの中身)を作る作業と、その関所をどの道に設置するか(インターフェースへの適用)は、別々の作業になりそうです。2段階に分けて考えてみてください。
ルールを「作る」と「置く」は別作業
前回、ACLは関所のルールブックだと学びました。実際の設定も、ちょうど2段階に分かれています。まずルールブックの中身を作る(ACLの定義)、次にその関所をどこに設置するか決める(インターフェースへの適用)。この2段階を separate に理解することが、ACL設定の最大のコツです。
標準ACLの設定
標準ACLは、番号1〜99(拡張範囲では1300〜1999)を使います。
Router(config)# access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)# access-list 10 deny any
access-list 10 permit 192.168.1.0 0.0.0.255 で、192.168.1.0/24からの通信を許可します。2行目の deny any は、前回学んだ暗黙のdenyと同じ効果ですが、あえて明示することでログに残せる、意図が読み手に伝わるといったメリットがあります(実際には省略しても同じ動作になります)。
作ったACLをインターフェースに適用するコマンドが ip access-group です。
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip access-group 10 out
ip access-group 10 out は、「ACL番号10を、このインターフェースから出ていく方向の通信に適用する」という意味です。方向は in(入ってくる通信)と out(出ていく通信)のどちらかを必ず指定します。標準ACLは送信元しか見られないため、前回学んだ原則どおり、宛先ネットワークに近いインターフェースの out 方向に適用するのが典型的な使い方です。
拡張ACLの設定
拡張ACLは、番号100〜199(拡張範囲では2000〜2699)を使い、プロトコルや宛先、ポート番号まで指定できます。
Router(config)# access-list 110 deny tcp any host 192.168.1.100 eq 23
Router(config)# access-list 110 permit ip any any
access-list 110 deny tcp any host 192.168.1.100 eq 23 は、「送信元は任意(any)、宛先は192.168.1.100というホスト、プロトコルはTCP、宛先ポートは23番(Telnet)の通信を拒否する」という意味です。書式は次の順序が基本です。
access-list 番号 permit|deny プロトコル 送信元 [送信元ポート] 宛先 [宛先ポート]
2行目の permit ip any any を忘れると、暗黙のdenyによってTelnet以外の通信もすべて拒否されてしまいます。「特定の通信だけ拒否して、残りは全部許可したい」場合は、最後に明示的な permit を書き忘れないことが重要です。拡張ACLは前回の原則どおり、送信元ネットワークに近いインターフェースの in 方向に適用するのが典型的です。
Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip access-group 110 in
named ACLの設定
名前付きACLは、次のように専用のモードに入ってから行を追加していきます。
Router(config)# ip access-list extended BLOCK-TELNET
Router(config-ext-nacl)# deny tcp any host 192.168.1.100 eq 23
Router(config-ext-nacl)# permit ip any any
ip access-list extended BLOCK-TELNET で、名前付きの拡張ACL専用モード((config-ext-nacl)#)に入り、以降は番号なしで permit/deny の行を追加します。標準の named ACLを作る場合は ip access-list standard 名前 を使います。インターフェースへの適用は番号ACLと同じく ip access-group BLOCK-TELNET in のように、番号の代わりに名前を指定します。
設定の確認
適用したACLの内容と、一致(マッチ)した件数を確認するコマンドが show access-lists です。
Router# show access-lists
各行の末尾に表示される「matches」の件数から、どのルールがどれだけ実際に通信をフィルタしているかを確認できます。設定した後は、想定どおりの通信が通り、想定どおりの通信が拒否されているかを必ずこのコマンドで検証しましょう。
ip access-group 110 in を設定する際の「in」とは何を意味するでしょうか?
答えを見る
そのインターフェースに入ってくる方向の通信にACLを適用する、という意味です。反対に「out」は、そのインターフェースから出ていく方向の通信に適用することを意味します。
試験でのポイント
CCNA試験では、拡張ACLの書式(access-list 番号 permit/deny プロトコル 送信元 宛先 演算子 ポート)の語順を問う問題や、設定例を読んで「この通信は通過できるか」を判定させる問題が頻出です。特に、暗黙のdenyがあるために最後のpermit ip any anyを書き忘れると意図しない通信まで拒否されるという落とし穴、ip access-group の in/out の向きの取り違えは定番の出題です。ACLは設定しただけでは効果がなく、ip access-group でインターフェースに適用して初めて機能する、という2段階構造も必ず押さえておきましょう。
ACLを作成したのに、インターフェースへの通信フィルタリングが一切効いていません。設定を見直すとき、まず確認すべきコマンドは何でしょうか?
答えを見る
そのインターフェースに ip access-group コマンドでACLが適用されているかを確認します。ACLは番号や名前で中身を定義しただけでは効果がなく、ip access-group 番号(または名前) in/out でインターフェースに適用して初めて機能します。
標準ACL・拡張ACLの設定コマンド、named ACL、そしてip access-groupでの適用——「作る」と「置く」の2段階、しっかりイメージできたかな。show access-listsでの検証もセットで覚えておいてね。次はいよいよ、ワイルドカード計算やACL評価順序を試験形式で解いていく演習ドリルだよ。