マンションの管理人が、玄関で「この人は通していい」「この人は通してはいけない」と1人ずつ判断するとしたら、どんな情報を見て判断するのが一番シンプルでしょうか? また、もっと細かく「この人は玄関は通れるけど、3階には行かせない」まで判断したいときは?
「誰が来たか」だけを見る方法と、「誰が」「どこへ」行こうとしているかまで見る方法、この2段階で考えてみてください。
通信の「関所」を作る
これまではログインや装置、L2の防御を見てきました。ここからは、ネットワークを流れる通信そのものを制御するACL(アクセスコントロールリスト)を学びます。ACLは、街道に置かれた関所のようなものです。関所の役人がルールブック(ACL)を持っていて、通行人(パケット)が来るたびに、そのルールに照らして「通してよいか」を1つずつ判断します。
標準ACLと拡張ACL
ACLには大きく分けて2種類あります。
- 標準ACL(番号1〜99、1300〜1999): 判断材料が送信元IPアドレスのみ。「どこから来たか」だけで通行の可否を決めます。
- 拡張ACL(番号100〜199、2000〜2699): 送信元IPアドレスに加え、宛先IPアドレス、プロトコル(TCP/UDP/ICMPなど)、ポート番号まで判断材料にできます。「どこから来て、どこへ行こうとしていて、何のための通信か」まで細かく判断できます。
管理人のたとえで言えば、標準ACLは「誰が来たか」だけを見て建物全体への出入りを制限する関所、拡張ACLは「誰が、どの部屋へ、何の用件で行こうとしているか」まで見て判断する、より賢い関所です。
配置場所の違い
標準ACLは送信元しか見ないため、ルーターの近くに置きすぎると、本来届くはずだった他の宛先への通信まで一緒にブロックしてしまいます。そのため、標準ACLは宛先に近い場所に配置するのが原則です。
一方、拡張ACLは送信元・宛先・ポートまで細かく指定できるため、不要な通信を早い段階で止められます。そのため、拡張ACLは送信元に近い場所に配置するのが原則です。無駄な通信をネットワークの奥まで通さず、入り口で弾いてしまう、という考え方です。
暗黙のdeny
ACLを理解するうえで最も重要なルールが、暗黙のdeny(implicit deny)です。ACLの末尾には、目には見えませんが「その他すべてを拒否する(deny any)」という行が常に存在します。つまり、ACLに1行も許可(permit)ルールを書かなければ、そのACLを適用したインターフェースはすべての通信を拒否することになります。関所のルールブックに「Aさんは通してよい」としか書かれていなければ、それ以外の全員は自動的に「通行禁止」として扱われる、というイメージです。ACLを設定するときは、必要な通信を許可する permit 行を書き忘れないことが何より重要です。
ワイルドカードマスク
ACLでは、対象とするIPアドレスの範囲を指定するために、サブネットマスクではなくワイルドカードマスクを使います。ワイルドカードマスクは、サブネットマスクとは考え方が逆です。
- サブネットマスクの
1は「一致させる部分」 - ワイルドカードマスクの
0は「一致させる部分」、1は「無視してよい部分」
例えば、255.255.255.0 というサブネットマスクに対応するワイルドカードマスクは、各オクテットを255から引いた 0.0.0.255 です。192.168.1.0 0.0.0.255 と書けば、「192.168.1.0〜192.168.1.255の範囲すべて」を意味します。1台のホストだけを指定したい場合は、ワイルドカードマスク 0.0.0.0 を使うか、host キーワードで host 192.168.1.10 のように書きます。
named ACL
番号だけでなく、名前でACLを識別するnamed ACL(名前付きACL)もあります。access-list 100 permit ... のように番号で管理する代わりに、ip access-list extended BLOCK-HTTP のように意味のある名前を付けられるため、規模が大きくなるほど管理がしやすくなります。動作原理は番号ACLと同じです。
標準ACLと拡張ACLの最も大きな違いは何でしょうか?
答えを見る
標準ACLは送信元IPアドレスのみを判断材料にするのに対し、拡張ACLは送信元・宛先IPアドレス、プロトコル、ポート番号まで判断材料にできる点です。この違いにより、標準ACLは宛先近く、拡張ACLは送信元近くに配置するのが原則になります。
試験でのポイント
CCNA試験では、ワイルドカードマスクの計算問題(サブネットマスクとの変換)が頻出です。「255引く各オクテット」という計算方法を確実に身につけておきましょう。また、暗黙のdenyの存在を忘れて「permit文を1つも書かなかったため、意図せず全通信がブロックされた」という状況を選ばせる問題も定番です。標準ACLと拡張ACLの番号範囲(1〜99/100〜199が基本)、配置場所の原則(標準は宛先近く、拡張は送信元近く)もセットで覚えておきましょう。
ACLに permit 文を1行も書かず、deny の設定だけを書いてインターフェースに適用しました。このACLを通過しようとする通信はどうなるでしょうか?
答えを見る
すべて拒否されます。 ACLの末尾には目に見えない「暗黙のdeny(deny any)」が常に存在するため、明示的にpermitしていない通信は、たとえdeny文が1つもなくても、あるいはdeny文の内容にかかわらず、最終的にすべて拒否されます。
標準ACL(送信元のみ)と拡張ACL(送信元・宛先・ポートまで)、配置場所の原則、暗黙のdeny、ワイルドカードマスク——ACLを理解する土台がそろったよ。関所のたとえ、しっくりきたかな。次は、実際にIOSでACLを設定して、インターフェースに適用するところまでやっていくよ。