acl

ソース

acl は送信元 IP に対してアクセス制御ポリシーを適用し、DNS サーバーへの不正アクセスを防ぎます。

説明

acl が有効になっていると、ユーザーは IP フィルタールールセットを設定して疑わしい DNS クエリをブロックまたはフィルタリングできます。つまり、許可されたクエリを許可するか、許可されていないクエリをブロックします。

ルールセットを評価するときに、acl は CoreDNS が受信した DNSクエリの TCP/UDP ヘッダーの送信元 IP を使用します。この送信元 IP は、要求の送信元 IP が移動中に変更された場合、要求を発信したクライアントの IP と異なります。たとえば

  • 要求が、CoreDNS に到達する前に中間転送 DNS サーバーまたは再帰 DNS サーバーを通過した場合
  • 要求が CoreDNS に到達する前に送信元 NAT を通過した場合

このプラグインはサーバーブロックごとに複数回使用できます。

構文

acl [ZONES...] {
    ACTION [type QTYPE...] [net SOURCE...]
}
  • ゾーン 権限を持つ必要があるゾーンです。空の場合は、構成ブロックのゾーンが使用されます。
  • アクション (許可ブロックフィルタ、または破棄) は、このルールによって一致した DNS クエリの処理方法を定義します。既定のアクションは許可です。つまり、どのルールにも一致しない DNS クエリは再帰処理できます。ブロックフィルタの違いは、ブロックはステータスコード拒否を返し、フィルタは空セットNOERRORを返すことです。ただし、破棄はクライアントに何も返信しません。
  • QTYPE は、許可またはブロックされる要求と一致させるクエリのタイプです。一般的なリソースレコードタイプがサポートされています。* はすべてのレコードタイプを表します。省略されたtype QTYPE...の既定の動作は、あらゆる種類の DNS クエリと一致することです (type * と同じ)。
  • ソース は、許可またはブロックされる要求と一致させる送信元 IP アドレスです。標準の CIDR 表記と単一の IP アドレスがサポートされています。* はすべての可能な送信元 IP アドレスを表します。

プラグイン acl の使用方法を示すために、ここでは一般的な例をいくつか示します。

192.168.0.0/16 からのすべてのレコードタイプ A の DNS クエリをブロックする:

. {
    acl {
        block type A net 192.168.0.0/16
    }
}

192.168.0.0/16 からのすべてのレコードタイプ A の DNS クエリをフィルタする:

. {
    acl {
        filter type A net 192.168.0.0/16
    }
}

192.168.1.0/24 を除く 192.168.0.0/16 からのすべての DNS クエリをブロックする

. {
    acl {
        allow net 192.168.1.0/24
        block net 192.168.0.0/16
    }
}

192.168.0.0/24 と 192.168.1.0/24 からの DNS クエリのみを許可する

. {
    acl {
        allow net 192.168.0.0/24 192.168.1.0/24
        block
    }
}

192.168.1.0/24 からの a.example.org へのすべての DNS クエリをブロックする

example.org {
    acl a.example.org {
        block net 192.168.1.0/24
    }
}

192.0.2.0/24 からのすべての DNS クエリを破棄する

. {
    acl {
        drop net 192.0.2.0/24
    }
}

メトリクス

モニタリングが有効になっている場合 (prometheus プラグイン経由)、次のメトリクスがエクスポートされます

  • coredns_acl_blocked_requests_total{server, zone, view} - ブロックされた DNS リクエストの数

  • coredns_acl_filtered_requests_total{server, zone, view} - フィルタされた DNS リクエストの数

  • coredns_acl_allowed_requests_total{server, view} - 許可された DNS リクエストの数

  • coredns_acl_dropped_requests_total{server, zone, view} - 破棄された DNS リクエストの数

server ラベルと zone ラベルの説明は、metrics プラグインのドキュメントにあります。