トラフィックのフィルタリングとして使用されるACLは,前回学習した標準ACLだけでなく,さらに詳細な条件を指定してより細かく制御できる拡張ACLがあります。今回はこの拡張ACLと,名前付きACL,さらにはACLの応用を学びましょう。

拡張IP-ACL:より細かな条件指定が可能

 標準IP-ACL(標準ACL)は「送信元IPアドレス」のみを条件として,「許可」「拒否」を決定するACLです。よりきめ細かく制御したい場合は,拡張IP-ACL(拡張ACL)を使用します。拡張IP-ACLでは前回の「IPアドレス編 第3回 標準ACLを使う」で説明した以下の条件をすべて使用できます。

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

 拡張IP-ACLのACL番号は100~199,2000~2699になります。拡張IP-ACLの設定は,オプションを使ってかなり詳細に条件を絞り込むことができます。

  • (config)# access-list [ACL番号] [permit | deny] [プロコトル] [送信元] {ポート} [あて先] {ポート} {オプション}
    • [ACL番号]
      • ACLの番号
    • [permit | deny]
      • 許可(permit)か拒否(deny)か
    • [プロトコル]
      • 使用するプロトコル
    • [送信元]
      • ACLの条件部分。送信元IPアドレスとワイルドカードマスク
    • [あて先]
      • ACLの条件部分。あて先IPアドレスとワイルドカードマスク
    • {ポート}
      • ACLの条件部分。ポート番号を指定する
    • {オプション}
      • TOS,ICMPタイプ,時間,フラグメント,TCPフラグなどを条件に追加できる

 詳細な設定が可能なため,拡張IP-ACLは煩雑になりがちです。基本的なポイントを覚えておきましょう。

  • [プロトコル] キーワード
    • 使用するプロトコルを記入する。ip,tcp,udp,icmpなど
    • tcpまたはudpを指定すると,ポート番号を条件として使用できる
    • ipを指定すると,tcp,udp,icmpのすべてのトラフィックを含む

 ipを指定した場合は,基本的なトラフィックをすべて含むと考えるとよいでしょう。「permit ip any any」や「deny ip any any」は「すべてのトラフィック許可」「すべてのトラフィック拒否」として使用します。

  • {ポート} キーワード
    • プロトコルキーワードでtcpやudpを使用した場合にのみ使用できる
    • 記述方法は「lt,gt,eq」+「番号」
      • 「lt 番号」は,そのポート番号より小さい
      • 「gt 番号」は,そのポート番号より大きい
      • 「eq 番号」は,そのポート番号と等しい

 例えば,「lt 1024」と記述すれば,「1024番より小さいポート番号のトラフィック」という意味になり,ウェルノウンポートを示します。「gt 1023」では「1023番より大きいポート番号のトラフィック」で一般的なクライアントアプリケーションが使うポートになります。「eq 80」と記述すればHTTP,「eq 25」と記述すればSMTPを指すことになります。

  • {オプション} キーワード
    • ACLで使用するオプションを示します
    • よく使われるものとしては次のものがあります
      • 「log」は,ACLに一致したもののログを表示します
      • 「established」は,スリーウェイハンドシェーク後のTCPコネクションが確立されたトラフィックを示します

 拡張IP-ACLの例としては以下のようになります(図1図2)。

図1●ACLの目的
図1●ACLの目的

図2●ACLの作成
図2●ACLの作成

名前付きACL:特定行だけ削除できる

 標準,拡張どちらのACLも一部の行だけを削除することはできません。削除する場合は,リスト全体を削除することになります。削除するコマンドは次の通りです。

  • (config)# no access-list [ACL番号] ・・・ ACL番号のすべての行を削除する

 ACLの行が多くなってくると,変更の度に全体を削除してから入力し直すのは大変な労力が必要になります。これに対し,名前付きACLならば特定の行だけを削除できます。ただし,追加する場合は最後の行に追加されます。

 名前付きACLの作成には,名前付きACL設定モードに入る必要があります。

  • (config)# ip access-list {standard | extended} [ACL名]
    • {standard | extended}
      • 作成するACLが標準(standard)か拡張(extended)か
    • [ACL名]
      • 一意になるACL名を指定する

 通常の標準・拡張ACLは「access-list」で始まりますが,名前付きACLは「ip access-list」になるところに注意が必要です。名前付きACL設定モードでは,プロンプトが(config-std-nacl)か,(config-ext-nacl)になります。

 名前付きACL設定モードに入った後は,通常のACLを作成するようにコマンドを入力します。例えば,先ほどの拡張IP-ACLで使った例を名前付きACLで入力すると,次のようになります(図3)。

図3●名前付きACL
図3●名前付きACL

 名前付きACLの特定行だけを削除したい場合は,その行と同じ内容に「no」を付けて入力します(図4)。

図4●名前付きACLでの削除
図4●名前付きACLでの削除

アクセスクラス:ACLをパケットフィルタ以外の目的に使う

 パケットフィルタにする場合なら,ACLを作成してip access-groupコマンドを使ってインタフェースにACLを適用します。すると,インタフェースに適用したACLは「ACLの行で許可/拒否されたから,廃棄または通過」というように動きます。ただし,CiscoルータではACLをパケットフィルタにだけ使用するわけではありません。少し違ったコマンドを使えばACLを適用したり,ACLを条件として使用することができます。つまり,「ACLの行で許可/拒否されたから,特定のアクションを起こす」という形で使えるわけです。パケットフィルタ以外のACLの代表的な使い方としては,NATやISDNのDDRがあります。

 パケットフィルタ以外のACLの使い方として,今回はアクセスクラスを説明します。アクセスクラスで「vtyポートへのtelnet接続が可能なホストを決定する」ことができます。ACLは,この「可能なホスト」を決める条件として使います。拡張IP-ACLを利用してルータへのtelnetを許可・拒否するという方法を使用すれば,ルータのvtyポートへの接続をするホストを特定することができますが,この方法ではルータが持つすべてのインタフェースにACLを設定する必要があります。アクセスクラスを利用すれば,どのインタフェースから着信したとしても1つのACLで制御できます。

 アクセスクラスは,まず標準IP-ACLを作成します(拡張・名前付きは使えません)。そのうえで,vtyラインモードでアクセスクラスを設定します。

  • (config)#line vty 0 4
  • (config-line)# access-class [ACL番号] in

 例えば,192.168.1.0/24と192.168.2.0/24のホストからのみvtyへのtelnet接続を許可する場合は,次のようになります(図5)。

図5●アクセスクラス
図5●アクセスクラス

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