ACL(種類)

目次

①標準ACLとは

標準ACL(Access Control List)とは、パケットを「送信元IPアドレス」だけを基準にして通すか止めるかを判断する仕組みです。つまり、通信の中身や宛先は見ずに「どこから来たパケットか」だけでフィルタリングを行います。

標準ACLには「番号付きACL」と「名前付きACL」がありますが、ここではより基本的で試験でも出題頻度が高い番号付き標準ACLについて説明していきます。

番号付き標準ACLの作成方法

標準ACLを作るときは、グローバルコンフィグモードで次のコマンドを入力します。

(config)# access-list 番号 [ permit | deny ] 送信元アドレス ワイルドカード

ここで指定する内容は次の通りです。

引数説明
numberACL番号を指定します。範囲は1~99、または1300~1999。通常は1~99を使用し、ほとんどのケースでは1300以降は使いません。
permit / denyパケットを許可する場合はpermit、拒否する場合はdenyを指定します。
sourceフィルタ対象となる送信元のIPアドレスを入力します。
wildcardワイルドカードマスクを指定します。省略すると「0.0.0.0」が適用されます。

ワイルドカードマスクはサブネットマスクの逆のようなもので、指定した範囲を「どこまで許可/拒否するか」を表すポイントになります。試験でもよく計算問題として問われるので必ず練習しておきましょう。

インターフェースへの適用

作成したACLは、それだけでは動作しません。必ずルータやスイッチのインターフェースに適用して初めて有効になります。適用コマンドは次の通りです。

(config-if)# ip access-group 番号 [ in | out ]
引数説明
number適用するACLの番号を指定します。
inそのインターフェースに入ってくる(受信する)パケットを対象にします。
outそのインターフェースから出ていく(送信する)パケットを対象にします。

例えば、自宅の玄関にセキュリティゲートを置くときに「入るときだけチェックするのか」「出るときもチェックするのか」を決めるイメージです。

条件文の例

番号付き標準ACLは条件を一行ずつ追加して作成していきます。次の例を見るとイメージがつかみやすいでしょう。

要件ACL設定例
特定のホストを許可access-list 1 permit host 192.168.0.1
特定のホストを拒否access-list 1 deny host 192.168.0.2
サブネット全体を許可access-list 1 permit 192.168.0.0 0.0.0.255
サブネット全体を拒否access-list 1 deny 192.168.1.0 0.0.0.255
特定の小さな範囲を許可access-list 1 permit 192.168.0.0 0.0.0.63
特定の小さな範囲を拒否access-list 1 deny 192.168.1.4 0.0.0.3
全ての送信元を許可access-list 1 permit any
全ての送信元を拒否access-list 1 deny any(最後に暗黙的に自動追加される)

ここで重要なのは、ACLには「暗黙のdeny any(全拒否)」が必ず最後に存在するということです。つまり、条件に当てはまらなかったパケットはすべて捨てられるので、明示的にpermit anyを入れておかないと、全ての通信が止まってしまうことがあります。これは試験で頻出するポイントです。

ACL削除時の注意点

番号付きACLを削除するときは、次の点に注意が必要です。

(config)# no access-list 1

このようにすると、ACL「1」に含まれる全ての条件文が一度に削除されます。例えば、以下のように複数行を設定している場合、

access-list 1 permit host 192.168.0.1
access-list 1 permit host 192.168.0.2
access-list 1 permit host 192.168.0.3

もし「2行目だけ削除したい」と思って no access-list 1 permit host 192.168.0.2 と入力しても、ACL 1 全体が削除されてしまいます。

このため、特定の行だけを消したいときは「シーケンス番号」を利用して編集する方法を使います。このやり方は次のステップで学習するので、ここでは「番号付きACLを丸ごと消してしまう危険がある」と覚えておきましょう。

②拡張ACLとは

拡張ACL(Extended ACL)は、標準ACLよりも細かい条件でパケットを制御できるアクセスリストです。標準ACLは「送信元IPアドレス」のみを基準にしましたが、拡張ACLでは次のような複数の条件を組み合わせてフィルタリングが可能です。

  • 送信元IPアドレス
  • 宛先IPアドレス
  • 使用するプロトコル(IP / ICMP / TCP / UDP など)
  • 送信元ポート番号
  • 宛先ポート番号

そのため、例えば「特定のユーザーからのHTTP通信だけを許可する」といった柔軟な設定ができるのが特徴です。実際のネットワーク運用では標準ACLよりも拡張ACLの方がよく使われます。

番号付き拡張ACLの作成方法

拡張ACLを作成するには、グローバルコンフィグモードで次の形式のコマンドを使います。

(config)# access-list 番号 [ permit | deny ] プロトコル 送信元 ワイルドカード ポート 宛先 ワイルドカード ポート [ established | log | log-input ]

ここで指定できる要素を整理すると次の通りです。

引数説明
numberACL番号。範囲は100~199、または2000~2699。通常は100~199を使用し、2000以降はあまり使われません。
permit / denyパケットを通すならpermit、遮断するならdenyを指定します。
protocolプロトコルを指定します。例:ip(すべてのIPパケット)、icmptcpudp など。
source送信元IPアドレスを指定します。
wildcardワイルドカードマスクを指定します。
portTCPやUDPを対象にするとき、ポート番号を条件に加えられます。よく使う演算子は次の通りです。・eq(equal、等しい)・neq(not equal、等しくない)・gt(greater than、より大きい)・lt(less than、より小さい)・range(範囲指定)
dest宛先IPアドレスを指定します。
wildcard宛先のワイルドカードマスクを指定します。
establishedTCPでACKまたはRSTビットが立っている通信のみを許可します。つまり「既に確立済みのセッション」だけを対象にできます。
log該当する通信を検知した際にログを出力します。トラブルシューティングや監視に便利ですが、設定しすぎると機器の負荷が高くなる点に注意が必要です。
log-inputlogに加えて、入力インターフェースや送信元MACアドレスの情報も含めてログを出力します。

インターフェースへの適用

作成した拡張ACLは、必ずルータやスイッチのインターフェースに適用して初めて有効になります。コマンドは標準ACLと同じです。

(config-if)# ip access-group 番号 [ in | out ]
  • in … そのインターフェースに入ってくる通信に対して適用
  • out … そのインターフェースから出ていく通信に対して適用

拡張ACLは「できるだけ宛先に近い場所に配置する」のが基本ルールです。不要な通信を早めに落とすため、効率よくネットワークを利用できるからです。これは試験でよく問われるポイントなので必ず覚えておきましょう。

条件文の例

具体例をいくつか示すと次のようになります。

要件ACL設定例
特定のホスト同士の通信を許可access-list 100 permit ip host 192.168.1.1 host 10.1.1.1
サブネット間の通信を許可access-list 100 permit ip 192.168.1.0 0.0.0.255 10.1.1.0 0.0.0.255
特定宛先への通信を拒否access-list 100 deny ip 192.168.1.0 0.0.0.255 host 10.1.1.1
サブネットから全宛先への通信を拒否access-list 100 deny ip 192.168.1.0 0.0.0.255 any
HTTP通信を許可access-list 100 permit tcp any host 10.1.1.1 eq 80
TFTP通信を拒否access-list 100 deny udp 192.168.0.0 0.0.0.255 host 10.1.1.1 eq 69
Telnet通信を拒否access-list 100 deny tcp 192.168.1.0 0.0.0.255 host 10.1.1.1 eq 23
ICMP通信をすべて許可access-list 100 permit icmp any any
特定ホストからのICMP通信を許可access-list 100 permit icmp host 192.168.1.1 10.1.1.0 0.0.0.255
すべてのIP通信を許可access-list 100 permit ip any any
すべてのIP通信を拒否access-list 100 deny ip any any(最後に暗黙的に追加される)

ここでも「暗黙のdeny any」が自動的に付与される点に注意が必要です。明示的にpermit any anyを入れないと、思ったより通信が遮断されることがあります。

③名前付きACLとは

ACL(アクセスリスト)は大きく分けて「標準ACL」と「拡張ACL」がありますが、それぞれを識別する方法として「番号」で指定する方法と「名前」で指定する方法の2種類があります。

ACLの種類識別方法チェック対象
標準ACL番号付き標準ACL送信元IPアドレス
名前付き標準ACL送信元IPアドレス
拡張ACL番号付き拡張ACL送信元・宛先IPアドレス、プロトコル、ポート番号など
名前付き拡張ACL送信元・宛先IPアドレス、プロトコル、ポート番号など

番号で管理する方法も昔から使われていますが、番号だけでは「このACLは何のためか?」が分かりづらいという欠点があります。そこで、より直感的に管理できる「名前付きACL」が広く利用されるようになりました。ACLの動作そのものは番号付きと同じですが、設定方法に少し違いがあります。

名前付き標準ACLの作成

標準ACLを名前付きで作る場合は、次のように設定します。

(config)# ip access-list standard 名前
(config-std-nacl)# シーケンス番号 [ permit | deny ] 送信元 ワイルドカード
引数説明
nameACLを識別するための名前。管理者が理解しやすい名前を自由に設定できる。
number条件文のシーケンス番号。省略可能。省略すると自動的に「10」「20」といったように10刻みで番号が付与される。
permit / deny通すならpermit、遮断するならdenyを指定。
source送信元のIPアドレス。
wildcardワイルドカードマスク。省略すると「0.0.0.0」が適用される。

名前付きACLの大きな利点は、このシーケンス番号を使って後から個別に条件を追加・削除できる点です。番号付きACLのように「全部消して再設定」という作業が不要になるため、運用面でとても便利です。

名前付き拡張ACLの作成

拡張ACLを名前付きで作成するときは次のコマンドを使用します。

(config)# ip access-list extended 名前
(config-ext-nacl)# シーケンス番号 [ permit | deny ] プロトコル 送信元 ワイルドカード ポート 宛先 ワイルドカード ポート [ established | log | log-input ]
引数説明
nameACLの名前。役割が分かるように自由に指定できる。
number条件文のシーケンス番号。省略すると「10」「20」と自動で番号が割り当てられる。
permit / denyパケットを許可するか拒否するかを指定。
protocolプロトコルを指定。例:iptcpudpicmpなど。
source送信元IPアドレス。
wildcard送信元に対するワイルドカードマスク。
portTCP/UDPの場合に利用。eq(等しい)、neq(等しくない)、gt(より大きい)、lt(より小さい)、range(範囲指定)が使用できる。
dest宛先IPアドレス。
wildcard宛先に対するワイルドカードマスク。
establishedTCPでセッション確立済みの通信(ACKまたはRSTがあるパケット)のみを許可対象とする。
log条件に合致したパケットをログ出力する。監視やトラブルシューティングで使用。
log-inputlogに加えて、入力インターフェースや送信元MACアドレスも記録する。

インターフェースへの適用

作成した名前付きACLは、番号付きと同じようにインターフェースに適用して初めて有効になります。

(config-if)# ip access-group 名前 [ in | out ]
  • in … インターフェースに入ってくるパケットを対象とする
  • out … インターフェースから出ていくパケットを対象とする

名前付きACLは特に大規模ネットワークで役立ちます。ACLの役割を一目で把握でき、後からシーケンス番号を使って部分的に編集できるため、試験だけでなく実務でも必須の知識となります。

◆まとめスライド

目次