前の記事では、 NAT・NAPTを使ってIPアドレスやPort番号を変換する仕組み を学びました。
しかし、実際のネットワークでは 通信できる状態になっているからといって、 すべての通信を許可したいわけではありません。
たとえば、
「このPort番号への通信は拒否する」
といった制御はどうやって実現するのでしょうか?
そこで利用される代表的な仕組みが ACL(Access Control List) です。
ACLという用語を覚えるだけでなく、 「通信条件を上から順に評価し、 最初に一致したpermit / denyによって パケットを通すか止めるか判断する」 仕組みを理解することが目標です。
ACLとは?
ACLは Access Control List の略です。
ネットワーク機器に設定した条件と通信内容を比較し、 パケットを許可(permit)するか、拒否(deny)するか を判断します。
送信元IPアドレスや宛先IPアドレス、 Protocol、Port番号などを条件にして 通信を制御できます。
NATとACLの役割は違う
前の記事で学習したNATと、 今回のACLは役割が異なります。
IP AddressやPort番号を 変換・対応付けする。
条件に一致した通信を Permit / Denyする。
ACLでは何を条件にできる?
ACLの種類によって、 確認できる条件は異なります。
代表的には次のような情報を利用できます。
どこから来た通信か
どこへ向かう通信か
TCP / UDP / ICMPなど
80 / 443 / 22など
Standard ACLとExtended ACLの違い
Cisco ACLを学習すると、 代表的に Standard ACLと Extended ACL が登場します。
「どこから来た通信か」 を中心に制御します。
Protocol / Port
「どこから・どこへ・何の通信か」 まで指定できます。
| 条件 | Standard ACL | Extended ACL |
|---|---|---|
| 送信元IP | ○ | ○ |
| 宛先IP | - | ○ |
| Protocol | - | ○ |
| Port番号 | - | ○ |
Standard ACLのイメージ
たとえば、 192.168.10.0/24からの通信を許可する場合を考えます。
Standard ACLでは、 基本的に 送信元IPアドレス を見て判断します。
Extended ACLならPort番号まで指定できる
たとえば、
という制御を考えます。
Extended ACLでは、 これらを組み合わせて条件を指定できます。
ACLは上から順番に評価される
ACLで最も重要なポイントの1つが、 ルールの評価順序 です。
通信が来ると、 ルーターは上から順に条件を確認します。
一度permitまたはdenyのルールに一致すると、 その後ろにあるACLルールは基本的に評価されません。
ルールの順番を変えると結果も変わる
たとえば次のACLを考えます。
permit 192.168.10.10
deny 192.168.10.0/24
192.168.10.10だけ例外的に許可できる
deny 192.168.10.0/24
permit 192.168.10.10
最初のdenyに一致するため、 後ろのpermitまで到達しない
広い条件のdenyを先に配置すると、 後ろのpermitが使われなくなる場合があります。
Implicit Denyとは?
ACLでは非常に重要な概念として、 Implicit Deny(暗黙のdeny) があります。
ACLの最後には、 明示的に表示されなくても概念的に 次のルールが存在すると考えます。
たとえば、
この場合、 192.168.20.10など、 明示的なpermitに一致しない通信は 最後のImplicit Denyによって拒否 されます。
ACLを設定するときは、 必要な通信をPermitしているか確認することが重要です。
Cisco ACLで出てくるWildcard Maskとは?
Cisco ACLでは、 IPアドレス範囲を指定する際に Wildcard Mask を使う形式があります。
たとえば、 192.168.10.0/24を指定するとき、
という関係になります。
基本的には
0=一致させる、1=無視する
という考え方です。
初学者はまず、
/24 → 0.0.0.255
という代表例から慣れると理解しやすくなります。
CiscoルーターでACLを設定するイメージ
たとえば、 192.168.10.0/24からの通信を許可するStandard ACLなら、 次のような設定例があります。
Router(config)# access-list 10 permit 192.168.10.0 0.0.0.255
Extended ACLでは、 Protocolや宛先、Port番号まで指定できます。
Router(config)# access-list 100 permit tcp 192.168.10.0 0.0.0.255 host 192.168.100.10 eq 443
これは概念的に、
という意味になります。
ACLは作るだけではなく適用する必要がある
ACLルールを作成しただけでは、 通常まだ通信制御は開始されません。
対象となるInterfaceへ、 InboundまたはOutbound として適用します。
Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip access-group 100 in
この例では、 ACL 100をGi0/0の Inbound方向 へ適用しています。
ここで実際に試してみよう:ACL評価シミュレーター
ACLは上から順に評価されます。 通信を選択して、 どのルールに一致するか確認してみましょう。
ACL Rule Evaluator
TCP 192.168.10.0/24 → 192.168.100.10 :443
IP 192.168.10.0/24 → 192.168.100.10
IP ANY → ANY
通信を選択して評価してください
最初に条件へ一致したACLルールでPermit / Denyが決まります。
理解度チェック:ACLの順番で結果はどう変わる?
次の通信を考えます。
次の2つのルール順序のうち、 192.168.10.10だけを許可できるのはどちらでしょうか?
ACLは上から順番に評価されることを思い出しましょう。
ACLのトラブルシューティングでは何を見る?
広いdenyが先にあると、 後ろのpermitまで到達しない場合があります。
必要なPermit Ruleが不足していないか確認します。
Inbound / Outboundや 適用Interfaceを確認します。
ACLだけでネットワーク防御は十分?
ACLを使えば、 IPアドレスやProtocol、Port番号などを条件にして 通信を制御できます。
しかし、ACLだけでは 通信の状態やアプリケーションの内容まで高度に判断できるとは限りません。
IP / Protocol / Portなどの 条件を中心にPermit / Deny。
通信状態なども踏まえて より高度に通信を制御。
といった通信状態を考慮した制御はどう実現するのでしょうか?
そこで次に学習するのが ファイアウォール です。
確認問題:ACLの仕組みを理解できたか確認しよう
ACLの基本的な役割として正しいものはどれですか?
ACLは通信内容と設定ルールを比較し、 PermitまたはDenyを判断します。
ACLの評価方法として正しいものはどれですか?
ACLは上から順番に評価され、 最初に一致したPermit / Denyで処理が決まります。
ACLのImplicit Denyとは何ですか?
ACLの末尾には暗黙のDenyが存在するため、 明示的なPermitに一致しない通信は拒否されます。
3問に挑戦してみましょう。
まとめ
ACLは 条件に応じて通信をPermit / Denyする仕組み
Standard ACLは主に Source IPを条件として利用する
Extended ACLでは Source / Destination / Protocol / Port などを組み合わせて細かく制御できる
ACLは 上から順番に評価し、最初に一致したRuleで終了 する
ACL末尾には Implicit Deny が存在する
次は「ファイアウォールとは?ネットワークを守る仕組み」を学びましょう
ACLによって、 IP Address・Protocol・Port番号などを条件に 通信をPermit / Denyできることを学びました。
次はさらに一歩進んで、 通信がどちら側から開始されたのか、 その通信が既存セッションへの戻り通信なのか といった状態まで判断する ファイアウォールの仕組みを学習します。
ACLとFirewallの違いを理解すると、 実際の企業ネットワークで行われている セキュリティ設計が理解しやすくなります。
ファイアウォールとは?ネットワークを守る仕組み →
