說明
啟用 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 應為其授權的區域。如果為空,則使用組態區塊中的區域。
- ACTION(allow、block、filter 或 drop)定義處理符合此規則的 DNS 查詢的方式。預設動作為 allow,表示任何不符合任何規則的 DNS 查詢都將允許遞迴。block 和 filter 之間的區別在於 block 會傳回 REFUSED 的狀態碼,而 filter 會傳回空的集合 NOERROR。但是,drop 不會傳回任何回應給用戶端。
- QTYPE 是要允許或封鎖的請求所要符合的查詢類型。支援常見的資源記錄類型。
*
代表所有記錄類型。省略type QTYPE...
的預設行為是比對所有類型的 DNS 查詢(與type *
相同)。 - SOURCE 是要允許或封鎖的請求所要符合的來源 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 請求計數器。
metrics 外掛程式文件中說明了 server
和 zone
標籤。