2.31. アクセスリストの設定

2.31.1. IPv4/IPv6アクセスリスト

アクセスリストは、トラフィックをさまざまな条件で識別する機能です。フィルタやQoS、ポリシールーティングなど多数の機能で利用し、トラフィック種別ごとに異なる条件でパケットを転送することができます。アクセスリストは設定を登録順(show running-configの表示順)に評価し、一致した条件の結果を返します。permitなら許可、denyなら拒否となります。

2.31.1.1. 基本設定

アクセスリストは、次のコマンドで設定します。

項目

説明

ip access-list

IPv4アクセスリストの設定

ipv6 access-list

IPv6アクセスリストの設定

show ip access-list

IPv4アクセスリストの表示

show ipv6 access-list

IPv6アクセスリストの表示

show ip access-list cache

IPv4アクセスリストのキャッシュ表示

show ipv6 access-list cache

IPv6アクセスリストのキャッシュ表示

現在、アクセスリストで判定可能な項目は以下のようになります。

  • プロトコル

  • 送信元/送信先アドレス(プレフィックス指定 / マスク指定)

  • 送信元/送信先ポート

  • TCPヘッダ制御フラグ

  • TOS / TRAFFIC-CLASSフィールド(PRECEDENCE / DSCP / TOS)

  • ICMP / ICMPv6メッセージ

  • フラグメント

2.31.1.2. TOS / TRAFFIC-CLASSフィールドの評価

TOS / TRAFFIC-CLASSフィールドをprecedenceおよびTOS、またはDSCPの値で参照することができます。それぞれの設定は以下のとおりです。

  • RFC791 / RFC1349で定義されているTOS(Type of Service)フィールド

    Precedence 3bits

    D

    T

    R

    M

    0

    precedence(=優先度)

    111 = Network Control
    110 = Internetwork Control
    101 = CRITIC/ECP
    100 = Flash Override
    011 = Flash
    010 = Immediate
    001 = Priority
    000 = Routine

    D(Delay=遅延)

    0 = Normal Delay
    1 = Low Delay

    T(Throughput=スループット)

    0 = Normal Throughput
    1 = High Throughput

    R(Reliability=信頼度)

    0 = Normal Reliability
    1 = High Reliability

    M(Money=コスト)

    0 = Normal money cost
    1 = Minimum money cost
  • RFC2474でDiffserv用に定義されているTOS(Type of Service)フィールド

    DSCP(Diffserv codepoint) 6bits

    未使用

    DSCP

    Default PHB
    0(000000)

    ベストエフォート(優先制御なし)

    EF(Expedited Forwarding PHB)
    46(101110)
    cf. RFC3246
    パケットを最優先で転送
    仮想専用線(低損失 低遅延 低ジッタ)
    AF(Assured Forwarding PHB)
    12種類
    cf. RFC2597
    輻輳時に確率的にパケット廃棄
    輻輳時の最低帯域を保証可能

2.31.1.3. ワイルドカードビット指定

アドレスはワイルドカードビット指定(マスク指定)でも設定可能です。ワイルドカードのビットが“1”の時は、そのビットは判定しません。

リスト 2.31.1 設定例:10.10.10.0 - 10.10.10.255を許可
ip access-list list1 permit ip src 10.10.10.10 0.0.0.255 dest any

2.31.1.4. フラグメントパケットの評価

IPv4のフラグメントパケットは、2番目以降のフラグメントパケットがポート番号を含まないため、ポート番号を指定したアクセスリストにマッチしません。フラグメントパケットの2番目以降にのみマッチする条件を記述できるため、フラグメントパケットを受信する環境でも、指定したポートの通信だけを許可できます。

注釈

ここではフラグメントの2番目以降のパケットのみをフラグメントパケットと呼びます。

リスト 2.31.2 設定例:フラグメントオプションを利用しない場合の動作
ip access-list list1 permit tcp src any dest 192.168.0.10/32 dport eq 80
ip access-list list1 deny ip src any dest any
  • 上記の設定例では、送信先が192.168.0.10のポート80の通信がpermitになりますが、ポート番号が取得できないフラグメントパケットは、元がポート80の通信でも1行目にはマッチできないため、2行目でdenyとなります。

リスト 2.31.3 設定例:フラグメントオプションを利用する場合の動作
ip access-list list2 permit tcp src any dest 192.168.0.10/32 dport eq 80
ip access-list list2 permit tcp src any dest 192.168.0.10/32 fragments
ip access-list list2 deny ip src any dest any
  • 上記の設定例では、送信先が192.168.0.10のポート80の通信はフラグメントかどうかによらず、必ずpermitになります。

  • ただし、送信先が192.168.0.10のポート80以外の通信がフラグメントされていても先頭パケット以外は2行目にマッチしてpermitになるので注意が必要です(フィルタで利用の場合、先頭はポート80以外がdenyなので、ポート80以外の通信が成立することはありません)。

fragmentsを設定するアクセスリストは、プロトコル、IPアドレスのみ記述してください。ポート番号等のレイヤ4情報を設定しても無視されます。

なお、アクセスリストをフィルタで使用する場合は、フラグメントパケットを正確に判定するために、フィルタの「ip filter forced-reassembly」の機能を利用して、リアセンブルしてから判定処理を行うことも可能です。ただし、リアセンブルを行うのでルータの負荷は高くなる可能性があります。

TCPの通信についてはmss調整機能でフラグメントの発生を抑制できます。TCPが分割される環境では極力mss調整機能を利用してください。

2.31.1.5. アクセスリストの高速化

内部データベースを最適化し、アクセスリストの検索を高速化することができます。アクセスリストごとに以下のコマンドで設定可能です。

項目

説明

ip access-list NAME option optimize

IPv4アクセスリストの高速化

ipv6 access-list NAME option optimize

IPv6アクセスリストの高速化

1つのアクセスリストに多数のエントリがある場合の検索を高速化します。

高速に処理するために、アクセスリストは以下の条件を満たす必要があります。

  • 送信元、送信先アドレスに、ワイルドカードビット指定やドメイン指定を利用しない。

  • permitやdenyの行がなるべく連続するように記述する。

    • 上からpermitまたはdenyのブロック4つ目までが高速化対象

    リスト 2.31.4 設定例
    ip access-list list1 option optimize
    ip access-list list1 permit ip src 192.168.0.0/24 dest 10.0.0.0/24        ↑
    ip access-list list1 permit ip src 192.168.1.0/24 dest 10.0.1.0/24        ブロック(1)
                                   :                                          |
    ip access-list list1 permit ip src 192.168.9.0/24 dest 10.0.9.0/24        ↓
    ip access-list list1 deny ip src 192.168.10.0/24 dest any                   ↑
                                   :                                            ブロック(2)
    ip access-list list1 deny ip src 192.168.19.0/24 dest any                   ↓
    ip access-list list1 permit ip src 192.168.20.1/32 dest 10.0.20.1/32      ↑
                                   :                                          ブロック(3)
    ip access-list list1 permit ip src 192.168.29.1/32 dest 10.0.29.1/32      ↓
    ip access-list list1 deny ip src 192.168.30.0/24 dest 10.0.30.0/24          ↑
                                   :                                            ブロック(4)
    ip access-list list1 deny ip src 192.168.39.0/24 dest 10.0.39.0/24          ↓
    ip access-list list1 permit ip src 192.168.40.0/24 dest 10.0.40.0/24      以下の行は
                                   :                                          高速化されない
    ip access-list list1 permit ip src 192.168.255.0/24 dest 10.0.255.0/24
    ip access-list list1 deny ip src any dest any
    

なお、最適化によってアクセスリストの評価結果が変わることはありません。最適化の都合上permitやdenyのブロックの中での評価順序が変更になる場合はあります。

2.31.1.6. アクセスリストのシーケンス番号指定

既存のアクセスリスト登録方式に加え、アクセスリストの各行にシーケンス番号を加えたコンフィグができます。デフォルトではシーケンス番号なしのアクセスリスト設定となっています。

項目

説明

ip access-list NAME sequence-mode

IPv4アクセスリストのシーケンス番号指定

ipv6 access-list NAME sequence-mode

IPv6アクセスリストのシーケンス番号指定

access-list NAME sequence-mode

MACアクセスリストのシーケンス番号指定

注釈

  • ダイナミックアクセスリストではシーケンス番号指定はできません。

  • 従来のシーケンス番号なしのアクセスリストを「通常モード」のアクセスリスト、シーケンス番号ありのアクセスリストを「シーケンス番号指定モード」のアクセスリストとここでは呼びます。

アクセスリスト名単位で、通常モードとシーケンス番号指定モードのアクセスリストを混在させることができます。

リスト 2.31.5 設定例
ip access-list name1 permit ip src 192.168.0.0/24 dest 10.0.0.0/24
ip access-list name1 permit ip src 192.168.1.0/24 dest 10.0.1.0/24
ip access-list name1 permit ip src 192.168.9.0/24 dest 10.0.9.0/24
ip access-list name1 deny ip src 192.168.10.0/24 dest any
ip access-list name1 deny ip src 192.168.11.0/24 dest any
ip access-list name1 deny ip src 192.168.19.0/24 dest any
ip access-list name1 permit ip src any dest any
!
ip access-list name2 sequence-mode 100
ip access-list name2 100 permit ip src 192.168.20.1/32 dest 10.0.20.1/32
ip access-list name2 200 permit ip src 192.168.21.1/32 dest 10.0.21.1/32
ip access-list name2 300 permit ip src 192.168.29.1/32 dest 10.0.29.1/32
ip access-list name2 400 deny ip src 192.168.30.0/24 dest 10.0.30.0/24
ip access-list name2 500 deny ip src 192.168.31.0/24 dest 10.0.31.0/24
ip access-list name2 600 deny ip src 192.168.39.0/24 dest 10.0.39.0/24
ip access-list name2 700 permit ip src any dest any

通常モードのコンフィグに対し、シーケンス番号指定オプションを設定すると、シーケンス番号の自動付与間隔にしたがってシーケンス番号が自動的に付与されます。

注釈

アクセスリスト高速化設定時は、高速化のブロック単位でシーケンス番号が自動的に付与されます(シーケンス番号指定で追加されたコンフィグによりブロックが変更になった場合に自動的に番号が振りなおされるものではありません)。

  • ブロック(1):0~

  • ブロック(2):1000000~

  • ブロック(3):2000000~

  • ブロック(4):3000000~

  • 最適化対象外:4000000~

2.31.1.7. アクセスリストキャッシュの無効化

アクセスリストごとにキャッシュの生成・参照を無効化できます。

項目

説明

ip access-list NAME option nocache

IPv4アクセスリストキャッシュの無効化

ipv6 access-list NAME option nocache

IPv6アクセスリストキャッシュの無効化

2.31.1.8. アクセスリストキャッシュのタイムアウト指定

アクセスリストキャッシュのタイムアウト時間を変更可能です。

項目

説明

ip access-list cache timeout

キャッシュのタイムアウト時間変更

ipv6 access-list cache timeout

キャッシュのタイムアウト時間変更

タイムアウト時間を短く変更することで、アクセスリストキャッシュのオーバーフロー発生頻度を抑制できる場合があります。あまり短く設定すると、キャッシュ生成回数が増えて負荷が上昇する可能性もあります。

2.31.2. ダイナミックアクセスリスト

ダイナミックアクセスリストは、ダイナミックフィルタ機能で利用されます。ダイナミックフィルタの詳細についてはパケットフィルタの章を参照してください。

2.31.3. MACアクセスリスト

MACアクセスリストは、レイヤ2情報により許可/拒否の判定を行います。判定条件が異なる以外は通常のアクセスリストと同様な動作となります。

現在、MACアクセスリストを利用する機能には以下のようなものがあります。機能毎のアクセスリストの利用方法については、各機能の項目を参照してください。

  • MACフィルタ

  • QoS(ブリッジ)

アクセスリストは、次のコマンドで設定します。

項目

説明

access-list

MACアクセスリストの設定

show access-list

MACアクセスリストの表示

show access-list cache

MACアクセスリストのキャッシュ表示

現在アクセスリストで判定可能な項目は以下のようになります。

  • 送信元/送信先 MACアドレス指定

  • EthernetヘッダのTypeフィールド指定

  • VLANタグのCOSフィールド指定

  • VLANタグのCFIフィールド指定

  • VLANタグのVLAN-ID指定

  • 任意の位置(オフセット)指定

2.31.3.1. ワイルドカードビット指定

MACアドレスの指定には、ワイルドカードビット指定を行うことができます。”1”のビットの位置が任意の値となります。

下記の設定例では、00:11:22:33:44:00 – 00:11:22:33:44:ffが許可されます。

リスト 2.31.6 設定例
access-list list1 permit src 00:11:22:33:44:00 00:00:00:00:00:ff dest any

2.31.3.2. オフセット指定

オフセット指定を使用することにより、任意の位置の値を条件とすることができます。MACアクセスリストでは通常はIPアドレスを条件とすることはできませんが、オフセット指定でIPアドレスの位置を指定することにより、IPアドレスを条件とすることが可能です。オフセットはゼロオリジンなので、パケットの先頭を指定する場合のオフセットは0になります。

下記の設定例では、先頭から26byteの位置(VLANタグなしの場合送信元アドレス)からの値が0x0a000001(10.0.0.1)のパケットが許可されます。

リスト 2.31.7 設定例
access-list list1 permit src any dest any offset 26 4 0a000001