Ciscoルータが持つ機能の1つとして,トラフィックフィルタリング(パケットフィルタリング)があります。これにより柔軟なトラフィックのコントロールや,セキュリティの向上が見込めます。この機能であるACL(Access Control List)の設定を学びましょう。

ACLとは

 ACLはルータのインタフェースを通過する際に適用される条件のリストです。この条件として,例えば以下のようなものを使うことができます。

  • 送信元・あて先IPアドレス
  • IPヘッダの中身(ToS・フラグメント)
  • 使用プロトコル
  • 送信元・あて先ポート番号(TCP/UDP時)
  • ICMPタイプ(ICMP時)

 これらの条件に一致するトラフィックの通過を拒否,あるいは許可することにより,ルータがトラフィックをコントロールすることができ,発信する/着信するトラフィックにセキュリティをかけることが可能になります。

 ACLはインタフェースに設定します。ルータは着信→ルーティング→発信という動作を行うため,着信時のACL,発信時のACLという2つのACLを通過する形になります(図1)。

図1●インタフェースとACL

 ACLは複数の行(ステートメント)から成り立っているリストです。各行にはそれぞれ条件と,一致した場合「拒否」または「許可」することが記述されます。拒否した場合はパケットを廃棄します。この行の並びは大変重要です。リストを構成する行は,必ず先頭からチェックされ,もし途中で一致した場合,その時点で「拒否」「許可」が判断されます。それ以降の行はチェックされません。

 また,最後の行までチェックしても「拒否」「許可」が行われない場合,最終的に必ず「拒否」され,廃棄されます。つまり最終行のさらに後ろに「すべてを拒否」する行がある,と覚えておく必要があります。これを暗黙の拒否と呼びます(図2)。

図2●ACLの行のチェックの方式
図2●ACLの行のチェックの方式

ACLの作成

 ACLにはいくつかの種類があります。使用するプロトコルスイートや機能によって分けられています。また,ACLはACL番号という番号で識別されます。ACL番号が同じものは1つのリストとして扱われます。ACL番号はACLの種類によって使用できる番号が異なります。

ACL番号の範囲ACLの種類
1~99,1300~1999標準IP
100~199,2000~2699拡張IP
600-699AppleTalk
800-899標準IPX
900-999拡張IPX
1000-1099IPX-SAP
-名前付きIP

 CCNAの範囲として扱われるACLは,標準IPと拡張IP,そして番号ではなく一意の文字列でACLを識別する名前付きIPの3種類です。

 ACLは以下の手順によって作成され,適用されます。

  1. ACLの各行を設定する
  2. ACLをインタフェースのインバウンド/アウトバウンドに適用する

 標準IP-ACLの作成は,以下のコマンドで,行を作成することから始めます。

  • (config)# access-list [ACL番号] [permit | deny] [送信元IPアドレス] [ワイルドカードマスク]
    • [ACL番号]
      • ACLの番号
    • [permit | deny]
      • 許可(permit)か拒否(deny)か
    • [送信元IPアドレス] [ワイルドカードマスク]
      • ACLの条件部分

 ワイルドカードマスクは,IPアドレスとワイルドカードマスクのビットを比較し,ワイルドカードマスクのビットが0のところはそのIPアドレスのビットを,1のところはIPアドレスのビットは0もしくは1どちらの値でもよい,という意味になる数値です。これを使うことにより,IPアドレスの範囲を指定できます。(図3)。

図3●ワイルドカードマスク
図3●ワイルドカードマスク

 ワイルドカードマスクはサブネットマスクとちょうど逆の計算を行うものです。ですが,サブネットマスクが「ネットワークアドレスを算出し,所属ネットワークを明確にする」ものにたいし,ワイルドカードマスクは「IPアドレスの範囲を指定」するものです。計算方法が似ていますが,まったく別の役割であることは覚えておいてください。ワイルドカードマスクは,ACL以外にもルーティングプロトコル設定などで使用されます。

 このワイルドカードマスクによって示された範囲に含まれる送信元IPアドレスを持つパケットが,許可(permit)または拒否(deny)されます)。

 先ほどのaccess-listコマンドを利用して,標準IP-ACLの「行」を記述します。1つの行には条件を1つしか書くことができません。例えば,「とあるネットワークからのパケットを拒否する」という1つの条件とその結果を1行で記述します。条件が複数ある場合は,複数の行を記述して「リスト」とします。リストとして設定するため,ACL番号は同一の値にする必要があります(図4図5)。

図4●ACLの目的
図4●ACLの目的

図5●ACLの作成
図5●ACLの作成

 ACLの作成の際には,ACLの行を書く順番,「暗黙の拒否」に注意が必要です。もし新たな行を今あるリストの途中に差し込んだり,今ある行を消したりする場合は,一度リスト全体を削除して作成し直す必要があります。

 また,ワイルドカードマスクの0.0.0.0(そのアドレスのみ)と,255.255.255.255(すべてのアドレス)は,特殊な書き方が可能です(図6)。

図6●hostとany
図6●hostとany

 図6のように,0.0.0.0は「host」,255.255.255.255は「any」というキーワードで書くことも可能です。

ACLの適用と確認

 作成したACLをインタフェースに適用することで,実際に運用されます。インタフェースに適用できるのは,インバウンド,アウトバウンドでそれぞれ1つのプロトコルのACLだけになります。例えばインバウンドに標準IPの1番と標準IPの2番と2つのリストを適用したり,標準IPの1番と拡張IPの101番のように標準と拡張それぞれを適用することはできません。

 適用するには,適用したいインタフェースの設定モードで,以下のコマンドを実行します(図7)。

  • (config-if)# ip access-group [ACL番号] [in | out]
    • [ACL番号]
      • 適用したいACLの番号
    • [in | out]
      • インバウンド(in)かアウトバウンド(out)か

図7●ACLの適用
図7●ACLの適用

 一方,ACLの確認で使用するコマンドは主に以下の3種類になります。

  • # show access-lists
  • # show ip interface
  • # show running-config

 show access-listsコマンドは,作成したACLを確認するときに使います。このコマンドの出力結果では,インタフェースに適用されているかどうかとは無関係に,設定したACLすべての行を確認できます(図8)。

図8●show access-lists
図8●show access-lists

 show access-listsコマンドでは,どのインタフェースにACLが適用されているかどうかまではわかりません。インタフェースにACLが適用されているかどうかの確認は,show ip interfaceコマンドを使います(図9)。

図9●show ip interface
図9●show ip interface

 またACLと,インタフェースに適用されているACLを確認することは,show running-configコマンドでもできます(図10)。

図10●show running-config
図10●show running-config

(改定履歴)
・「セキュリティ編」にあった内容を「IPアドレス編」に移動しました。(2008/7/24)