ACL(基礎)

目次

アクセスコントロールリスト(ACL)とは

ネットワークの世界では、誰の通信を通すのか、誰の通信を止めるのかを決める「門番」の役割が必要です。その役割を担うのがアクセスコントロールリスト(ACL)です。ルータに設定することで、どのパケットを通して良いか、どのパケットを拒否するかを決めることができます。

ACLは複数行のルールで構成され、パケットが届いたときに上から順番に照合されます。最初に条件が一致したルールがそのパケットに適用され、それ以降のルールは無視されます。つまり、ACLでは「ルールをどんな順番で並べるか」がとても重要になります。

さらに、ACLの最後には必ず「暗黙のdeny any(全て拒否)」が自動的に存在します。これは設定画面には表示されませんが、リストの最後に「全てのパケットを拒否」という隠れたルールがあると考えてください。そのため、明示的に許可しない限り通信は通らない、というのがACLの基本動作になります。試験でもこの「暗黙のdeny」は頻出ポイントなので必ず覚えておきましょう。

例として、あるルータのインターフェースにACLを適用した場合を考えてみましょう。
1行目で「192.168.0.1」からの通信を拒否、2行目で「192.168.0.2」からの通信を許可と設定したとします。
このとき、192.168.0.3から届いた通信は1行目にも2行目にも一致しないため、最後の暗黙のdenyによって拒否されてしまいます。

標準ACLと拡張ACL

ACLには大きく分けて標準ACLと拡張ACLの2種類があります。

標準ACLは送信元IPアドレスだけを基準に判定するシンプルなACLです。「誰から来た通信か」を見て通すか拒否するかを決めます。

一方、拡張ACLはより柔軟で、送信元IPアドレスだけでなく、宛先IPアドレス、プロトコル番号(例えばTCPやICMPなど)、さらにはポート番号まで細かく指定できます。「誰から、誰に、どのサービスに対する通信か」まで細かくコントロールできるのが特徴で、実際のネットワーク運用では拡張ACLのほうが多く使われます。

例えば、標準ACLでは「192.168.0.1からの通信を拒否」といった設定しかできませんが、拡張ACLなら「192.168.0.1から10.1.1.1へのWebアクセスだけを拒否」といった非常に細かい指定が可能です。試験問題では「標準ACL=送信元だけを判定」「拡張ACL=送信元+宛先+プロトコルやポートも判定」という対比でよく問われるので整理して覚えましょう。

標準ACLの設定例

標準ACLでできることは主に以下のようになります。
送信元アドレス「192.168.0.1」からの通信を許可または拒否したり、送信元ネットワーク「192.168.0.0/24」全体を対象にすることもできます。さらに、送信元を「any(すべて)」と指定することで、全通信を許可または拒否することも可能です。

拡張ACLの設定例

拡張ACLでは次のように細かく指定することができます。
例えば「192.168.0.1から10.1.1.1への通信のみ許可」「192.168.0.0/24から10.1.1.0/24への通信を拒否」といった設定です。
さらに、「192.168.0.1から10.1.1.1へのWebアクセス(TCPポート80)だけを許可」「ICMP通信(プロトコル番号1)だけを拒否」など、特定のアプリケーションやプロトコル単位で制御できます。

試験では「ポート番号とプロトコル番号を使って制御できるのは拡張ACLだけ」という点を強調して問われやすいので注意してください。

ACLの適用方向(インバウンドとアウトバウンド)

ACLはルータのインターフェースに設定しますが、その際に「どちら向きの通信に対して適用するか」を指定する必要があります。これがインバウンド(IN)とアウトバウンド(OUT)です。

インバウンドに設定すると、そのインターフェースに入ってくるパケットに対してACLがチェックされます。許可されたパケットはルーティングされますが、拒否されたものは即座に破棄されます。このとき、送信元には「宛先ネットワークに到達できません」というICMPメッセージが返されます。

一方、アウトバウンドに設定すると、いったんルーティングテーブルで転送先が決定された後、インターフェースから出ていく段階でACLが適用されます。つまり、同じACLでもインバウンドに適用するのかアウトバウンドに適用するのかで動作が変わってくるので、問題文の条件をよく読み取ることが大切です。

試験では「ACLはどの方向で適用されているか」「どのルールに一致するか」を問うシナリオ問題が頻出なので、インバウンドとアウトバウンドの違いを具体的なイメージで覚えておくと解きやすくなります。

ACLの注意事項 1:ルールの処理順序

ACLに書かれたルール(ステートメント)は、必ず1行目から順番に評価されます。そして条件に一致した時点で、そのパケットは「許可」または「拒否」と判断され、残りのルールは確認されません。

たとえば「192.168.0.5だけ拒否し、それ以外の192.168.0.0/24の通信は許可したい」という場合、最初に限定的な条件を書いて、その後に広い範囲の許可ルールを書く必要があります。もし逆に広い範囲の許可ルールを先に書いてしまうと、特定の拒否条件にたどり着く前に「すべて許可」と判断され、意図通りに動作しなくなります。

ここから分かるように、ACLでは「狭い条件(具体的なIPやホスト指定)」を先に、「広い条件(ネットワークやany指定)」を後に書くのが鉄則です。試験でもよく出るポイントなので整理して覚えておきましょう。

ACLの注意事項 2:暗黙のdeny any

ACLの最後には必ず「暗黙のdeny any(全て拒否)」が自動的に追加されます。これは設定上は見えませんが、実際には動作しています。

そのため、ACLに「許可する」ルールを1つも書かなければ、全ての通信が拒否されてしまいます。例えば「192.168.0.5は拒否」とだけ設定して終わった場合、それ以外のIPアドレスからの通信も全て拒否されることになります。正しく意図を反映させるためには「拒否」ルールの後に「その他は許可」と明示する必要があります。

ACLの注意事項 3:適用できる数

1つのインターフェースには、インバウンド(IN)で1つ、アウトバウンド(OUT)で1つ、合計2つのACLを適用できます。例えばインターフェースが2つあるルータなら、最大で4つのACLを設定できることになります。

注意点として、1つのインターフェースのINに標準ACLと拡張ACLを両方適用することはできません。ルータが「どのACLを見ればいいのか」判断できなくなるからです。ただし、対象となるプロトコルが異なる場合は例外で、IPv4のACLとIPXのACLを同じインターフェースに適用することは可能です。

ACLの注意事項 4:適用する場所の選び方

ACLはルータ上で作成しただけでは機能しません。必ずインターフェースにINまたはOUTとして適用する必要があります。そしてどこに適用するかで結果が変わるため、設計の段階でよく考える必要があります。

一般的な推奨ルールとしては、標準ACLは宛先に近い場所に、拡張ACLは送信元に近い場所に適用するのが望ましいとされています。

標準ACLは送信元IPアドレスしかチェックできないため、宛先に近い場所に配置しないと誤って広い範囲の通信を止めてしまう危険があります。一方、拡張ACLは送信元・宛先・プロトコルなど細かい条件を指定できるため、送信元に近い場所で制御すれば不要なトラフィックをネットワーク全体に流さずに済みます。

ただし、最終的には「通信要件を満たせるかどうか」が最優先です。試験問題では「標準ACL=宛先に近く」「拡張ACL=送信元に近く」という原則がよく問われるので、必ず押さえておきましょう。

ACLの注意事項 5:アウトバウンドでの対象トラフィック

ACLはルータを通過するトラフィックを対象とします。そのため、ルータ自身が生成するパケットにはアウトバウンドのACLは適用されません。

例えば、ルータが送信するルーティングプロトコルのアップデート(RIPのルート更新やOSPFのHelloパケットなど)は、アウトバウンドACLを設定していてもフィルタリングされずにそのまま送信されます。

この点を誤解すると「ルータからのパケットが止められないのはなぜ?」という疑問につながるので、試験対策としてもきちんと整理しておきましょう。

ワイルドカードマスクとは

ACLを設定するときには、特定のネットワークやホストを指定する必要があります。その際に使うのが「ワイルドカードマスク」です。これはサブネットマスクと似ていますが、意味が逆になっている点が大きな特徴です。

ワイルドカードマスクは32ビットで構成され、通常はドットで区切った10進数(例:0.0.0.255)の形で表記します。基本ルールは次の2つです。

1つ目のルールは「ワイルドカードマスクが0なら、そのビットを厳密にチェックする」ということ。
2つ目のルールは「ワイルドカードマスクが1なら、そのビットはチェックしない」ということです。

言い換えると、0は「見る」、1は「見ない」という意味になります。

例えば「172.16.1.0/24」を指定する場合、ACLでは「172.16.1.0 0.0.0.255」と入力します。ここでは最初の3オクテット(172.16.1)は正確に見たいので0に、最後のオクテットは気にしないので255にしています。

同じように「172.16.0.0/16」を指定する場合は「172.16.0.0 0.0.255.255」となり、範囲は「172.16.0.0 ~ 172.16.255.255」となります。

このようにサブネットマスクとワイルドカードマスクは「1と0が逆」の関係です。実際には「255.255.255.255 – サブネットマスク」で計算すればワイルドカードマスクが求められます。

特定のホストを指定する場合

特定の1台のホストを指定したいときは、全てのビットをチェックするようにします。例えば「172.16.1.1」を指定する場合は「172.16.1.1 0.0.0.0」と入力します。

このとき、省略形として「host 172.16.1.1」と書くことも可能です。試験問題でもこの省略形が出題されることがあるので、両方の表記を覚えておきましょう。

全てのIPアドレスを指定する場合

逆に、全てのアドレスを対象にしたい場合は「全部のビットを見ない」ようにします。したがってワイルドカードマスクは「255.255.255.255」となり、ACLでは「0.0.0.0 255.255.255.255」と入力します。

この省略形は「any」です。つまり「permit any」と書けば「全ての通信を許可」という意味になります。

特定の範囲を指定する場合

ワイルドカードマスクは範囲指定も可能です。例えば「172.16.0.0/24」から「172.16.3.0/24」までの4つのサブネットをまとめて指定したいときは、「172.16.0.0 0.0.3.255」と書くことで実現できます。

ただし、現場ではこうした「まとめ書き」よりも、次のように1つ1つ書いた方が分かりやすい場合があります。

1行目 172.16.0.0 0.0.0.255
2行目 172.16.1.0 0.0.0.255
3行目 172.16.2.0 0.0.0.255
4行目 172.16.3.0 0.0.0.255

ネットワークエンジニアの実務では、短く書くことよりも「誰が見ても分かる設定」にすることが重視されます。試験対策としては両方の書き方を理解し、実務の現場では「可読性の高い書き方」を優先するという考え方を覚えておきましょう。

◆まとめスライド

目次