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 Control110 = Internetwork Control101 = CRITIC/ECP100 = Flash Override011 = Flash010 = Immediate001 = Priority000 = RoutineD(Delay=遅延)
0 = Normal Delay1 = Low DelayT(Throughput=スループット)
0 = Normal Throughput1 = High ThroughputR(Reliability=信頼度)
0 = Normal Reliability1 = High ReliabilityM(Money=コスト)
0 = Normal money cost1 = Minimum money costRFC2474でDiffserv用に定義されているTOS(Type of Service)フィールド
DSCP(Diffserv codepoint) 6bits
未使用
DSCP
Default PHB0(000000)ベストエフォート(優先制御なし)
EF(Expedited Forwarding PHB)46(101110)cf. RFC3246パケットを最優先で転送仮想専用線(低損失 低遅延 低ジッタ)AF(Assured Forwarding PHB)12種類cf. RFC2597輻輳時に確率的にパケット廃棄輻輳時の最低帯域を保証可能
2.31.1.3. ワイルドカードビット指定
アドレスはワイルドカードビット指定(マスク指定)でも設定可能です。ワイルドカードのビットが“1”の時は、そのビットは判定しません。
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番目以降のパケットのみをフラグメントパケットと呼びます。
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となります。
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つ目までが高速化対象
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アクセスリストのシーケンス番号指定
注釈
ダイナミックアクセスリストではシーケンス番号指定はできません。
従来のシーケンス番号なしのアクセスリストを「通常モード」のアクセスリスト、シーケンス番号ありのアクセスリストを「シーケンス番号指定モード」のアクセスリストとここでは呼びます。
アクセスリスト名単位で、通常モードとシーケンス番号指定モードのアクセスリストを混在させることができます。
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が許可されます。
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)のパケットが許可されます。
access-list list1 permit src any dest any offset 26 4 0a000001