説明
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 プラグインのドキュメントにあります。