# 2.46. アクセスリストの設定

## 2.46.1. IPv4/IPv6アクセスリスト

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

### 2.46.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.46.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.46.1.3. ワイルドカードビット指定

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

> リスト 2.46.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.46.1.4. フラグメントパケットの評価

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

注釈

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

> リスト 2.46.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.46.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.46.1.5. アクセスリストの高速化

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

> 項目 | 説明
> --- | ---
> ip access-list NAME option optimize | IPv4アクセスリストの高速化
> ipv6 access-list NAME option optimize | IPv6アクセスリストの高速化

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

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

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

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

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

  リスト 2.46.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.46.1.6. アクセスリストのシーケンス番号指定

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

> 項目 | 説明
> --- | ---
> ip access-list NAME sequence-mode | IPv4アクセスリストのシーケンス番号指定
> ipv6 access-list NAME sequence-mode | IPv6アクセスリストのシーケンス番号指定
> access-list NAME sequence-mode | MACアクセスリストのシーケンス番号指定

注釈

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

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

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

> リスト 2.46.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.46.1.7. アクセスリストキャッシュの無効化

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

> 項目 | 説明
> --- | ---
> ip access-list NAME option nocache | IPv4アクセスリストキャッシュの無効化
> ipv6 access-list NAME option nocache | IPv6アクセスリストキャッシュの無効化

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

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

> 項目 | 説明
> --- | ---
> ip access-list cache timeout | キャッシュのタイムアウト時間変更
> ipv6 access-list cache timeout | キャッシュのタイムアウト時間変更

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

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

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

## 2.46.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.46.3.1. ワイルドカードビット指定

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

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

> リスト 2.46.6 設定例

>     access-list list1 permit src 00:11:22:33:44:00 00:00:00:00:00:ff dest any

### 2.46.3.2. オフセット指定

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

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

> リスト 2.46.7 設定例

>     access-list list1 permit src any dest any offset 26 4 0a000001