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...]
}
  • 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 请求计数器。

serverzone 标签在度量插件文档中进行了解释。