🦆

標準ACLを理解する

に公開

はじめに

今回は、標準ACLを設定する流れをまとめてみました。

設定に入る前に

そもそも 標準ACL(Standard)拡張ACL(Extended) の違いは何でしょうか。

[標準ACL]

  • 送信元IPアドレスを制御します。
  • 特定のIPからの通信を許可・拒否するか決めます。
  • 設定は簡単ですが、宛先やアプリケーションを区別できません。

[標準ACL]

  • 送信元IPアドレス, 宛先IPアドレス, プロトコル, ポート番号などを制御します。
  • 特定のIPからの特定のトラフィックの通信を許可・拒否するか決めます。
  • 柔軟性があり、HTTPやSSHなど特定のトラフィックを制御可能です。

どこまで細かく設定できるかが二つの大きな違いになります。

標準ACL設定① 特定のPCからの通信を遮断


Packet Tracerを使用しこのような構成で設定を行っていきます。
PC1
IP: 192.168.1.10/24 GW: 192.168.1.254
PC2
IP: 192.168.1.11/24 GW: 192.168.1.254
PC3
IP: 192.168.2.10/24 GW: 192.168.2.254
RT1
[G0/0] IP: 192.168.1.1/24
[G0/1] IP: 192.168.1.1/24

現在は、PC1・PC2・PC3間で接続ができる状況です。
今回は、ルーターに標準ACLを設定しPC1からPC2に対してPingが通らなくなるようにします。
以下にホワイトリスト方式とブラックリスト方式がありますが、お好きなほうで進めていただいて結構です。

ホワイトリスト方式

この方法では、特定のIPアドレスからの通信を許可するルールを作成し、適応させます。

RT1
Router(config)#ip access-list standard test
Router(config-std-nacl)#permit host 192.168.1.11
Router(config-std-nacl)#exit
Router(config)#interface g0/0
Router(config-if)#ip access-group test in
Router(config-if)#exit
  • ip access-list standard testでは、testという標準ACLを作成しています。
  • permit host 192.168.1.11は、192.168.1.11からの通信を全て許可する設定です。
  • ip access-group test inでは、インターフェースG0/0に先ほど作成したACLを適応させています。最後のinに関しては、PC1からRT1へ通信を渡す際にACL(test)でチェックを行うという記述をしています。

設定終了後、PC1からPC3にPingを飛ばしてみると、

PC1
C:\>ping 192.168.2.10

Pinging 192.168.2.10 with 32 bytes of data:

Reply from 192.168.1.254: Destination host unreachable.

と出てきました。これでPingがPC2に飛ばなくなりました。
そして、PC2からPC3にPingで疎通確認をすると通ることが確認できます。
RT1でshow access-listsというコマンドを実行すると、

RT1
Router#show access-lists 
Standard IP access list test
    10 permit host 192.168.1.11 (4 match(es))

と出力されます。このように(4 match(es))のようなマッチ表記があれば、過去に192.168.1.11からの通信を許可した記録があるということです。

ブラックリスト方式

この方法では、特定のIPアドレスからの通信を拒否するルールを作成し、適応させます。

RT1
Router(config)#ip access-list standard test
Router(config-std-nacl)#deny host 192.168.1.10
Router(config-std-nacl)#permit any
Router(config)#exit
Router(config-if)#interface g0/0
Router(config-if)#ip access-group test in
  • ip access-list standard testでは、testという標準ACLを作成しています。
  • deny 192.168.1.10は、192.168.1.10からの通信を全て拒否する設定です。
  • permit anyを最後に入れないと、暗黙のdeny[1] が発動しPC2からPC3に対してPingが通らなくなってしまうため、どの送信元のIPアドレスからも許可するという設定を行っています。
    ip access-group test inでは、インターフェースG0/0に先ほど作成したACLを適応させています。最後のinに関しては、PC1からRT1へ通信を渡す際にACL(test)でチェックを行うという記述をしています。

設定終了後、PC1からPC3にPingを飛ばしてみると、

PC1
C:\>ping 192.168.2.10

Pinging 192.168.2.10 with 32 bytes of data:

Reply from 192.168.1.254: Destination host unreachable.

と出てきました。これでPingがPC2に飛ばなくなりました。
RT1でshow access-listsというコマンドを実行すると、

RT1
Standard IP access list test
    10 deny host 192.168.1.10 (9 match(es))
    20 permit any

と出力されます。このように(9 match(es))のようなマッチ表記があれば、過去に192.168.1.10からの通信を拒否した記録があるということです。

標準ACL設定② 特定のネットワークに所属するPCからの通信を遮断


Packet Tracerを使用しこのような構成で設定を行っていきます。
PC1
IP: 192.168.1.10/24 GW: 192.168.1.254
PC2
IP: 192.168.1.11/24 GW: 192.168.1.254
PC3
IP: 192.168.2.10/24 GW: 192.168.2.254
RT1
[G0/0] IP: 192.168.1.1/24
[G0/1] IP: 192.168.1.1/24

現在は、PC1・PC2・PC3間で接続ができる状況です。
今回は、ルーターに標準ACLを設定し192.168.1.0に所属するPC1とPC3がPC2に対してPingが通らなくなるようにします。

RT1
Router(config)#ip access-list standard test
Router(config-std-nacl)#deny 192.168.1.0 0.0.0.255
Router(config-std-nacl)#permit any
Router(config)#exit
Router(config-if)#interface g0/0
Router(config-if)#ip access-group test in
  • ip access-list standard testでは、testという標準ACLを作成しています。
  • deny 192.168.1.0 0.0.0.255は、192.168.1.0に所属するPCからの通信を全て拒否する設定です。ワイルドカードマスクを0.0.0.255にする理由は、今回の場合ネットワークに所属する全デバイスからの通信を監視したいからです。
  • permit anyを最後に入れないと、暗黙のdeny[1:1] が発動しPC2からPC3に対してPingが通らなくなってしまうため、どの送信元のIPアドレスからも許可するという設定を行っています。
    ip access-group test inでは、インターフェースG0/0に先ほど作成したACLを適応させています。最後のinに関しては、PC1からRT1へ通信を渡す際にACL(test)でチェックを行うという記述をしています。

設定終了後、PC1, PC2からPC3にPingを飛ばしてみると、

PC1
C:\>ping 192.168.2.10

Pinging 192.168.2.10 with 32 bytes of data:

Reply from 192.168.1.254: Destination host unreachable.

と出てきました。これでPingがPC2に飛ばなくなりました。
RT1でshow access-listsというコマンドを実行すると、

RT1
Standard IP access list test
    10 deny 192.168.1.0 0.0.0.255 (8 match(es))
    20 permit any

と出力されます。このように(8 match(es))のようなマッチ表記があれば、過去に192.168.1.0に所属するPC1, PC2からの通信を拒否した記録があるということです。

名前付きACLと番号付きACL

今回は、すべて名前付きACLを作成しましたが、番号付きACL(通常のACL)は使用しませんでした。
実はこれらにも名前が付けられる以外の違いが大きく2つあります。

[1つ目]

番号付きACLでは、access-list 10 permit 192.168.1.10のようなコマンドで設定をします。
10という記述がコマンド内にありますが、これはACLのIDのようなもので先ほどのACLで付けた名前「test」がこの番号と同じ役割をします。

ACLの種類 番号範囲
標準ACL 1–99, 1300~1999
拡張ACL 100–199, 2000–2699

また、ACLが標準か拡張かルータが判断するには、各ACLで決められている番号の範囲を守った番号決めを行う必要があります。

[2つ目]

名前付きACLでは、シーケンス番号(行番号)を指定してルールを追加・削除できます。
これにより、あとからACLの順序を調整できます。
ACLは、ルールの行番号が若い順で処理が行われるため、ACL設定後テスト時に問題が発生した時などに修正がしやすいです。

ip access-list standard test
 10 permit any
 20 deny host 192.168.1.10

例えばこのようなACLが存在するとします。このままだとpermit anyが最初に参照されるルールのため、送信元が192.168.1.10だったとしても全ての通信を通してしまうため、通信拒否したい192.168.1.10を参照させることができません。

ip access-list standard test
 no 20
 5 deny any

このように変更することで、permit anyが登録されている10よりも、前に登録されている5のdeny anyを参照できるようになりました。

さいごに

今回は、標準ACLを作成しルーターに適応させる流れを説明しました。
コマンドも短いため、かなり理解しやすいと思います。
拡張ACLのほうが圧倒的に難しく感じる分野なので、今度まとめてみようと思います。

脚注
  1. 暗黙のdeny: 「明示的に許可されていないものは、すべて拒否する」というルールです。 ↩︎ ↩︎

Discussion