说明
启用 acl
后,用户可以通过配置 IP 过滤器规则集来阻止或筛选可疑的 DNS 查询,即允许授权查询或阻止未授权查询。
在评估规则集时,acl 使用 CoreDNS 接收的 DNS 查询的 TCP/UDP 标头的源 IP。该源 IP 将与请求源客户端的 IP 不同,如果请求的源 IP 在传输途中发生改变。例如
- 如果请求在到达 CoreDNS 之前通过中间转发 DNS 服务器或递归 DNS 服务器
- 如果请求在到达 CoreDNS 之前穿过源 NAT
每个服务器块可以多次使用此插件。
语法
acl [ZONES...] {
ACTION [type QTYPE...] [net SOURCE...]
}
- ZONES 它应该是权威的。如果为空,则使用配置块中的区域。
- 操作(允许、阻止、筛选或丢弃)定义了处理此规则匹配的 DNS 查询的方式。默认操作为允许,这意味着任何规则不匹配的 DNS 查询都将被允许递归。阻止和筛选的区别在于,阻止返回状态代码拒绝,而筛选返回一个空集无错误。然而,丢弃不会向客户端返回任何响应。
- 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.0.0/16 的所有 DNS 查询,但 192.168.1.0/24 除外
. {
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
标签在度量插件文档中进行了解释。