An ACL (access control list) is a security control that permits or denies access to resources based on defined match criteria such as source IP address, evaluated rule-by-rule from top to bottom with the first match determining the outcome. In DNS servers, ACLs restrict queries, zone transfers, and dynamic updates by controlling who can perform these actions, but their effectiveness depends on proper rule ordering, documentation, and supplementation with authentication methods like TSIG to defend against address spoofing. Managing ACLs at scale presents operational challenges as rules accumulate, stale entries create unintended access, and misconfigured lists cause either security exposure or legitimate client blocking, making consistent review and clear documentation essential for reliable DNS security.
ACLの仕組み
ACLとは、各エントリが一致条件と「許可」または「拒否」のアクションを組み合わせたリストのことです。このリストを適用するシステムは、リクエストをエントリと比較し、最初に一致したエントリの結果を適用します。
- リクエストの到着:クライアントやデバイスが、DNSクエリの送信、ゾーン転送の要求、ルーターを経由したパケットの転送などのアクションを試みます。
- 抽出された基準:適用システムは、リストが照合に使用する属性(通常は送信元IPアドレス、ネットワーク機器の場合は宛先、プロトコル、またはポートも)を読み取ります。DNSサーバーは、暗号鍵に基づいて照合を行うこともあります。
- エントリの評価順序:システムはエントリを上から下へと順にチェックします。ほとんどの実装では、最初に一致したエントリで処理を停止し、そのアクションを適用します。
- 適用されるアクション:「許可(permit)」エントリはリクエストを許可します。「拒否(deny)」エントリはリクエストを拒否または破棄します。多くのシステムでは、リストの最後に暗黙の拒否(implicit deny)が設定されているため、どのエントリにも一致しないリクエストは拒否されます。
順序が重要であるため、広範囲な許可ルールを狭範囲な拒否ルールの前に配置すると、その拒否ルールが機能しなくなる可能性があります。 DNSサーバーでは、クエリ、再帰、転送、更新といった異なる機能を管理するために、通常、個別のリストが使用されるため、各機能ごとに独自の対象範囲を設定できます。アドレスに基づく照合は偽装される可能性があるため、動的更新のような機密性の高い操作については、TSIGなどの認証も併せて要求することで、より強固に保護することが推奨されます。
ACLに関するよくある問題
特定の「拒否」ルールの上に広範な「許可」ルールを配置すると、「拒否」ルールが一致しなくなるため、ブロックされるべきトラフィックが通過してしまいます。エンジニアは通常、拒否エントリのヒットカウンターがゼロのまま変わらないことで、この問題に気づきます。
多くの実装では、リストの末尾に暗黙の「拒否」が設定されているため、それまで空だったリストに最初のエントリを追加すると、突然それ以外のすべての通信がブロックされてしまうことがあります。これにより、わずかな変更を行った直後にサービス停止が発生することがよくあります。
廃止されたホスト名を指定するエントリは、アドレスが再割り当てされた後もそのまま残ります。その結果、新しいホストは、誰も与えるつもりのなかったゾーン転送の許可などのアクセス権を継承することになります。
送信元IPアドレスのみに依存するACLは、特にUDPでは、偽造パケットによって迂回される可能性があります。キーベースの認証やネットワークエッジでのフィルタリングと組み合わせることで、このリスクを軽減できます。
再帰サーバーで任意のアドレスからのクエリを許可すると、増幅攻撃に悪用される可能性があります。任意のアドレスへの転送を許可すると、ゾーンの内容がすべて公開されてしまいます。