跳转到内容
搜索文档

DNS 策略

最后更新 查看 MarkdownAgent 设置

DNS 策略允许您通过检查用户的 DNS 查询(将域名翻译为 IP 地址的查找)来控制他们可以访问哪些网站和服务。由于 DNS 策略在查找阶段起作用,因此它们适用于所有协议和应用程序,而不仅仅是网页浏览器。

当用户发起 DNS 请求时,Gateway 会将该请求与您为组织设置的 DNS 策略进行匹配。如果该域名不属于任何被阻止的类别,或者它匹配 **Allow(允许)**或 **Override(覆盖)**策略,用户的客户端将收到基于 Cloudflare 公共 DNS 解析器 (1.1.1.1) 的 DNS 解析地址。您还可以使用解析器策略将 DNS 请求重定向到自定义服务器。

一个 DNS 策略由一个 **Action(操作)**以及一个决定该操作范围的逻辑表达式组成。要构建表达式,您需要选择一个 **Selector(选择器)**和一个 Operator(运算符),并在 **Value(值)**字段中输入一个值或值范围。您可以使用 And(与)Or(或) 逻辑运算符来评估多个条件。

创建 DNS 策略时,您可以根据需要选择任意多个安全风险类别和内容类别,以全面保护您的网络。除非在策略中配置了更具体的选择器(例如 User Email(用户电子邮件)或 Source IP(源 IP)),否则该策略将针对来自您组织到达 Gateway 的所有 DNS 查询进行评估。

如果表达式中的条件结合了 query 属性(例如 Source IP)和响应属性(例如 Resolved IP),则该条件将在收到响应时进行评估。

操作

操作决定了当 DNS 查询匹配您的策略条件时 Gateway 采取什么措施。您可以为每个策略分配一个操作。

以下是您可以选择的操作类型:

Allow(允许)

API 值:allow

可用选择器

流量

身份

带有 Allow 操作的策略会明确允许 DNS 查询进行解析。Gateway 使用首次匹配原则,这意味着如果 Allow 策略以比 Block 策略更高的优先级匹配查询,则该查询将被允许解析。例如,以下配置允许 DNS 查询到达被归类为属于 Education 内容类别的域名:

选择器 运算符 操作
Content Categories(内容类别) in(属于) Education Allow(允许)

禁用 DNSSEC 验证

DNSSEC(域名系统安全扩展)通过检查附加到记录的加密签名来验证 DNS 响应未被篡改。当您选择 **Disable DNSSEC validation(禁用 DNSSEC 验证)**时,即使签名无法验证,Gateway 也会解析 DNS 查询。除非您知道验证失败是由于 DNSSEC 配置问题而不是恶意攻击引起的,否则我们不建议禁用 DNSSEC 验证。

Block(阻止)

API 值:block

可用选择器

流量

身份

带有 Block 操作的策略会阻止 DNS 查询为您在选择器和值字段中指定的目的地进行解析。例如,以下配置会阻止 DNS 查询到达被归类为属于 Adult Themes 内容类别的域名:

选择器 运算符 操作
Content Categories(内容类别) in(属于) Adult Themes Block(阻止)

自定义阻止页面

选择 Block 操作时,打开 Modify Gateway block behavior(修改 Gateway 拦截行为),以便对查询使用阻止页面进行响应,向访问被阻止网站的用户显示该页面。或者,您可以用特定 DNS 策略的 URL 重定向来覆盖全局阻止页面设置。欲了解更多信息,请参阅阻止页面

如果某个策略关闭了阻止页面,Gateway 将以 0.0.0.0A 记录 (IPv4) 或 ::AAAA 记录 (IPv6) 响应被阻止的查询。因为没有服务器在这些地址响应,浏览器将显示其默认的连接错误页面。

为了拦截对类型非 AAAAA 的 DNS 记录的查询解析,Gateway 将返回 REFUSED (RCODE:5) DNS 返回码。Gateway 会拦截该请求,但不会显示拦截页面。

Cloudflare One 客户端阻止通知

功能可用性

客户端模式 Zero Trust 计划
  • 流量和 DNS 模式
  • 仅流量模式
Enterprise
系统 可用性 最低客户端版本
Windows 2024.1.159.0
macOS 2024.1.160.0
Linux
iOS 1.7
Android 1.4
ChromeOS 1.4

开启 Display block notification for Cloudflare One Client 以显示 Gateway 拦截事件的通知。被拦截的用户将收到来自 Cloudflare One 客户端的操作系统通知,其中包含您设置的自定义消息。如果您没有设置自定义消息,Cloudflare One 客户端将显示默认消息。自定义消息长度必须在 100 个字符或以内。Cloudflare One 客户端每分钟只会显示一条通知。

选择该通知后,Cloudflare One 客户端将引导您的用户访问您配置的 Gateway 拦截页面。或者,您也可以将用户引导至自定义 URL,例如内部支持表单。

开启发送策略上下文时,Gateway 会将匹配请求的详细信息作为查询字符串附加到重定向的 URL 中。并非每个上下文字段都会被包含。可能包含的策略上下文字段包括:

策略上下文字段

字段 定义 示例
User email(用户电子邮件) 发起查询的用户的电子邮件。 &cf_user_email=user@example.com
Site URL 原始 HTTP 请求的完整 URL,或 DNS 查询中的域名。 &cf_site_uri=https%3A%2F%2Fmalware.testcategory.com%2F
URL category 要重定向的 URL 的域类别 &cf_request_categories=New%20Domains,Newly%20Seen%20Domains
Original HTTP referer 对于 HTTP 流量,则是 HTTP 请求的原始 HTTP referer 标头。 &cf_referer=https%3A%2F%2Fexample.com%2F
Rule ID 与请求匹配的 Gateway 策略的 ID。 &cf_rule_id=6d48997c-a1ec-4b16-b42e-d43ab4d071d1
Source IP 匹配策略的设备的源 IP 地址。 &cf_source_ip=203.0.113.5
Device ID 匹配策略的设备的 UUID。 &cf_device_id=6d48997c-a1ec-4b16-b42e-d43ab4d071d1
Application names 重定向的域所对应的应用程序名称(如果有)。 &cf_application_name=Salesforce
Filter 触发拦截的流量类型过滤器。 &cf_filter=http, &cf_filter=dns, &cf_filter=av, or &cf_filter=l4
Account ID 关联的 Zero Trust 账户的 Cloudflare 账户 ID &cf_account_id=d57c3de47a013c03ca7e237dd3e61d7d
Query ID 重定向对其生效的 DNS 查询的 ID。 &cf_query_id=f8dc6fd3-a7a5-44dd-8b77-08430bb4fac3
Connection ID 重定向对其生效的代理连接的 ID。 &cf_connection_id=f8dc6fd3-a7a5-44dd-8b77-08430bb4fac3
Request ID 重定向对其生效的 HTTP 请求的 ID。 &cf_request_id=f8dc6fd3-a7a5-44dd-8b77-08430bb4fac3

确保您的操作系统允许 Cloudflare One 客户端发送通知。如果启用了专注模式、勿扰模式或屏幕共享设置,您的设备可能不会显示通知。要在运行 DisplayLink 软件的 macOS 设备上启用客户端通知,您可能需要在镜像显示器时允许系统通知。有关更多信息,请参阅 macOS 文档

Override(覆盖)

API 值:override

可用选择器

Override 操作不能与在 DNS 解析期间或之后评估的选择器一起使用。

流量

身份

带有 Override 操作的策略会将真实的 DNS 应答替换为您指定的目的地。当用户查询与该策略匹配的域名时,Gateway 会返回您的自定义 IP 地址或主机名,而不是实际的 DNS 记录。例如,您可以使用以下策略为向 www.example.com 发起的所有查询提供自定义响应 IP 1.2.3.4

选择器 运算符 操作 覆盖主机名
Hostname(主机名) is(是) www.example.com Override(覆盖) 1.2.3.4

Safe Search(安全搜索)

API 值:safesearch

可用选择器

流量

身份

SafeSearch 是搜索引擎的一项功能,可帮助您过滤显式或冒犯性内容。当您启用 SafeSearch 时,搜索引擎会过滤显式或冒犯性内容,并返回适合儿童或在工作场所安全的搜索结果。

您可以使用 Cloudflare Gateway 在 Google、Bing、Yandex、YouTube 和 DuckDuckGo 等搜索引擎上启用 SafeSearch。例如,要为 Google 启用 SafeSearch,您可以创建以下策略:

选择器 运算符 操作
Domain(域名) is(是) google.com Safe Search(安全搜索)

YouTube Restricted Mode(YouTube 受限模式)

API 值:ytrestricted

可用选择器

流量

身份

同样,您可以通过选择 YouTube Restricted(YouTube 受限)操作来强制执行 YouTube 受限模式。YouTube 受限模式是 YouTube 内置的针对成人和冒犯性内容的自动过滤器。要启用 YouTube 受限模式,您可以设置如下策略:

选择器 运算符 操作
DNS Domain(DNS 域名) is(是) youtube.com YouTube Restricted(YouTube 受限)

此设置可确保用户无法使用 DNS 访问冒犯性网站。

选择器

Gateway 会将 DNS 查询与以下选择器(或标准)进行匹配。

每个选择器都在 DNS 解析过程的特定阶段进行评估:

  • DNS 解析前 —— Gateway 在查找应答前检查传入查询的属性(例如,域名或源 IP)。
  • DNS 解析中 —— Gateway 检查在解析查询时发现的信息(例如,权威名称服务器 IP)。
  • DNS 解析后 —— Gateway 在解析完成后检查 DNS 应答(例如,解析的 IP 或 CNAME 记录)。

Override 操作不能与在 DNS 解析期间或之后评估的选择器一起使用,因为必须在返回应答之前应用覆盖。有关评估阶段如何与优先级相互作用的更多信息,请参阅执行顺序

Application(应用程序)

您可以将 DNS 策略应用于不断增加的流行 Web 应用程序列表。有关详细信息,请参阅 应用程序和应用类型

UI 名称 API 示例 评估阶段
Application(应用程序) any(app.ids[*] in {505}) DNS 解析前

Authoritative Nameserver IP(权威名称服务器 IP)

使用此选择器匹配权威名称服务器 IP 地址。

UI 名称 API 示例 评估阶段
Authoritative Nameserver IP dns.authoritative_ns_ips == 198.51.100.0 DNS 解析期间

Content Categories(内容类别)

使用此选择器可过滤属于特定 内容类别 的域名。

UI 名称 API 示例 评估阶段
Content Categories(内容类别) any(dns.content_category[*] in {1}) DNS 解析前

使用允许 (Allow) 或阻止 (Block) 操作时,您可以选择 阻止 IP 地址针对 CNAME 记录过滤类别

DNS CNAME Record(DNS CNAME 记录)

使用此选择器按其 CNAME 记录过滤 DNS 响应。

UI 名称 API 示例 评估阶段
DNS CNAME Response Value any(dns.response.cname[*] in {"www.apple.com.edgekey.net"}) DNS 解析后

DNS MX Record(DNS MX 记录)

使用此选择器按其 MX 记录过滤 DNS 响应。

UI 名称 API 示例 评估阶段
DNS MX Response Value any(dns.response.mx[*] in {"gmail-smtp-in.l.google.com"}) DNS 解析后

DNS PTR Record(DNS PTR 记录)

使用此选择器按其 PTR 记录过滤 DNS 响应。

UI 名称 API 示例 评估阶段
DNS PTR Response Value any(dns.response.ptr[*] in {"255.2.0.192.in-addr.arpa"}) DNS 解析后

DNS Resolver IP(DNS 解析器 IP)

使用此选择器可将策略应用于到达与已注册 DNS 位置对齐的 Gateway 解析器 IP 地址的 DNS 查询。对于大多数 Gateway 客户,这是一个 IPv4 任播地址,使用此 IPv4 地址创建的策略将适用于所有 DNS 位置。然而,每个 DNS 位置都有一个专用的 IPv6 地址,并且某些 Gateway 客户已获得专用的 IPv4 地址——这两者都可用于将策略应用于特定的已注册 DNS 位置。

UI 名称 API 示例 评估阶段
DNS Resolver IP(DNS 解析器 IP) any(dns.resolved_ip[*] == 198.51.100.0) DNS 解析前

DNS TXT Record(DNS TXT 记录)

使用此选择器按其 TXT 记录过滤 DNS 响应。

UI 名称 API 示例 评估阶段
DNS TXT Response Value any(dns.response.txt[*] in {"your_text"}) DNS 解析后

DoH Subdomain (DNS over HTTPS)(DoH 子域名)

使用此选择器可匹配通过 DNS-over-HTTPS (DoH) 到达且发往为每个 DNS 位置配置的 DoH 端点的 DNS 查询。例如,您可以通过选择 DoH 子域名 (DoH Subdomain) 选择器并输入值 abcdefg,来使用 DoH 端点为 abcdefg.cloudflare-gateway.com 的 DNS 位置。

UI 名称 API 示例 评估阶段
DoH Subdomain(DoH 子域名) dns.doh_subdomain == "abcdefg" DNS 解析前

Domain(域名)

使用此选择器可匹配某个域名及其所有子域名。例如,您可以匹配 example.com 及其子域名,如 www.example.com

UI 名称 API 示例 评估阶段
Domain(域名) any(dns.domains[*] == "example.com") DNS 解析前

Gateway 策略不支持直接使用包含非拉丁字符的 domain。要使用包含非拉丁字符的 domain,请将其添加到列表中。

Host(主机)

使用此选择器仅匹配指定的主机名。例如,您可以匹配 test.example.com,但不能匹配 example.comwww.test.example.com

UI 名称 API 示例 评估阶段
Host(主机) dns.fqdn == "example.com" DNS 解析前

Gateway 策略不支持直接使用包含非拉丁字符的 hostname。要使用包含非拉丁字符的 hostname,请将其添加到列表中。

Indicator Feeds(指标源)

使用此选择器匹配自定义指示器摘要。

您可以使用公开可用的指示器摘要或由指定第三方供应商分配给您账户的自定义指示器摘要。有关指示器摘要的更多信息,请参阅自定义指示器摘要

UI 名称 API 示例 评估阶段
Indicator Feeds dns.indicator_feed DNS 解析前

使用允许 (Allow) 或阻止 (Block) 操作时,您可以选择 阻止 IP 地址针对 CNAME 记录过滤类别

Location(位置)

使用此选择器将策略应用于特定的 Gateway DNS 位置或一组位置。

UI 名称 API 示例 评估阶段
Location(位置) dns.location in {"location_uuid_1" "location_uuid_2"} DNS 解析前

Query Record Type(查询记录类型)

使用此选择器选择您要对其应用策略的 DNS 资源记录类型。例如,您可以匹配某个域的 A 记录,但不能匹配 MX 记录。

UI 名称 API 示例 评估阶段
Query Record Type(查询记录类型) dns.query_rtype == "TXT" DNS 解析前

Resolved Continent(已解析大洲)

使用此选择器根据查询解析到的大陆进行过滤。地理位置由响应中的 IP 地址确定。要指定大陆,请在 Value(值) 字段中输入其两个字母的代码:

  • AF - 非洲 (Africa)
  • AN - 南极洲 (Antarctica)
  • AS - 亚洲 (Asia)
  • EU - 欧洲 (Europe)
  • NA - 北美洲 (North America)
  • OC - 大洋洲 (Oceania)
  • SA - 南美洲 (South America)
  • T1 - Tor 网络 (Tor network)
UI 名称 API 示例 评估阶段
Resolved Continent IP Geolocation dns.dst.geo.continent == "EU" DNS 解析后

Resolved Country(已解析国家/地区)

使用此选择器根据查询解析到的国家/地区进行过滤。地理位置由响应中的 IP 地址确定。要指定国家/地区,请在 Value(值) 字段中输入其 ISO 3166-1 Alpha 2 代码

UI 名称 API 示例 评估阶段
Resolved Country IP Geolocation dns.dst.geo.country == "RU" DNS 解析后

Resolved IP(已解析 IP)

使用此选择器根据查询解析到的 IP 地址进行过滤。

UI 名称 API 示例 评估阶段
Resolved IP any(dns.resolved_ips[*] == 198.51.100.0) DNS 解析后

Request Context Categories(请求上下文类别)

使用此选择器匹配在 DNS 查询的 EDNS (DNS 扩展机制) 部分发送的类别 ID 动态列表。EDNS 允许在标准字段之外向 DNS 查询附加额外元数据。Gateway 从 EDNS OPT 代码 65050 中读取类别 ID。

UI 名称 API 示例 评估阶段
Request Context Categories dns.categories_in_request_context_matches DNS 解析前

Security Categories(安全类别)

使用此选择器匹配属于特定安全类别的域(以及可选的 IP 地址)。

UI 名称 API 示例 评估阶段
Security Categories(安全类别) any(dns.security_category[*] in {1}) DNS 解析前

使用允许 (Allow) 或阻止 (Block) 操作时,您可以选择 阻止 IP 地址针对 CNAME 记录过滤类别

Source Continent(源大洲)

使用此选择器根据查询到达 Gateway 的源大陆进行过滤。

地理位置是根据设备的公网 IP 地址(通常由用户的 ISP 分配)决定的。要指定大洲,请在字段中输入其两位字母代码:

大洲 代码
非洲 AF
南极洲 AN
亚洲 AS
欧洲 EU
北美洲 NA
大洋洲 OC
南美洲 SA
Tor 网络 T1
UI 名称 API 示例 评估阶段
Source Continent IP Geolocation(源大陆 IP 地理位置) dns.src.geo.continent == "North America" DNS 解析前

Source Country(源国家/地区)

使用此选择器根据查询到达 Gateway 的源国家/地区进行过滤。

地理位置是根据设备的公网 IP 地址(通常由用户的 ISP 分配)决定的。要指定国家/地区,请在字段中输入其 ISO 3166-1 Alpha-2 代码

UI 名称 API 示例 评估阶段
Source Country IP Geolocation(源国家/地区 IP 地理位置) dns.src.geo.country == "RU" DNS 解析前

Source IP(源 IP)

使用此选择器将策略应用于 DNS 查询的源 IP 地址。例如,这可以是您组织用于向 Gateway 发送查询的存根解析器(stub resolver)的 WAN IP 地址。

UI 名称 API 示例 评估阶段
Source IP(源 IP) dns.src_ip == 198.51.100.0 DNS 解析前

Source Internal IP(源内部 IP)

使用此选择器将策略应用于 DNS 查询的源内部 IP 地址。例如,这可以是您的组织用于向 Gateway 发送查询的 Cloudflare WAN(前称 Magic WAN)或 Cloudflare Mesh 背后的主机的私有 IP 地址。

UI 名称 API 示例 评估阶段
Source Internal IP dns.src_internal_ip == 10.10.0.1 DNS 解析前

Users(用户)

使用这些选择器来匹配身份属性。

UI 名称 API 示例 评估阶段
User Email(用户电子邮件) identity.email == "user@example.com" DNS 解析前
User Name(用户名) identity.name == "Test User" DNS 解析前
User Group IDs(用户组 ID) any(identity.groups[*].id in {"group_id"}) DNS 解析前
User Group Names(用户组名称) any(identity.groups[*].name in {"group_name"}) DNS 解析前
User Group Emails(用户组电子邮件) any(identity.groups[*].email in {"group@example.com"}) DNS 解析前
SAML Attributes(SAML 属性) any(identity.saml_attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] in {"Test User"}) DNS 解析前

比较运算符

比较运算符是 Gateway 将流量与选择器进行匹配的方式。当您在仪表板策略生成器中选择 Selector(选择器) 时,Operator(运算符) 下拉菜单将显示该选择器的可用选项。

运算符 含义
is(等于) 等于所定义的值
is not(不等于) 不等于所定义的值
in(属于) 匹配至少一个所定义的值
not in(不属于) 不匹配任何所定义的值
in list(在列表中) 在预定义的列表值中
not in list(不在列表中) 不在预定义的列表值中
matches regex(匹配正则表达式) 正则表达式计算结果为 true
does not match regex(不匹配正则表达式) 正则表达式计算结果为 false
greater than(大于) 超过所定义的数字
greater than or equal to(大于或等于) 超过或等于所定义的数字
less than(小于) 低于所定义的数字
less than or equal to(小于或等于) 低于或等于所定义的数字

字段中,当使用等值比较运算符(例如 is)时,您可以输入单个值;当使用包含比较运算符(例如 in)时,您可以输入多个值。此外,您可以使用正则表达式来为受支持的选择器指定值范围。

正则表达式

正则表达式使用 Rust 进行评估。Rust 的实现与其他地方使用的正则表达式库略有不同。有关更多信息,请参阅我们的通配符指南。要评估您的正则表达式是否匹配,可以使用 Rustexp

如果您想匹配多个值,可以使用管道符号(|)作为 OR 运算符。您不需要在管道符号之前使用转义字符(\)。例如,当 hostname 匹配 .*whispersystems.org.*signal.org 时,以下表达式的计算结果为 true:

选择器 运算符
Hostmatches regex.*whispersystems.org|.*signal.org

除了正则表达式外,您还可以使用逻辑运算符来匹配多个值。

逻辑运算符

要在表达式中评估多个条件,请选择 And(与) 逻辑运算符。这些表达式可以使用 Or(或) 逻辑运算符进行进一步比较。

运算符 含义
And(与) 匹配表达式中的所有条件
Or(或) 匹配表达式中的任一条件

Or(或) 运算符仅适用于同一表达式组中的条件。例如,您无法将流量中的条件与 Identity 中的条件进行比较。

限制

第三方过滤冲突

Gateway 无法正确过滤通过第三方 VPN 或其他互联网过滤软件(例如 iCloud 专用代理Google Chrome IP 保护)发送的流量。为确保您的 DNS 策略应用于您的流量,Cloudflare 建议关闭可能会干扰 Gateway 的软件。

要关闭 iCloud 专用代理,请参阅适用于 macOSiOS 的 Apple 用户指南。

Cloudflare WAN 转发

要对通过 Cloudflare WAN 转发的查询应用 DNS 策略,您可以将组织的 DNS 解析器指向 IPv6、DNS over HTTPS (DoH) 或 DNS over TLS (DoT) 端点,也可以申请专用的解析器 IPv4 地址。有关更多信息,请参阅 DNS 解析器 IP 和主机名

备用 DNS(Fallback DNS)

某些应用程序(例如 WhatsApp 和 Android Studio)在其代码中内置了备份 DNS 服务器。如果它们的主要 DNS 查询被 Gateway 阻止,这些应用会自动针对其内置的 DNS 服务器(例如 Google 的 8.8.8.8)重试查询,这会完全绕过您的策略。为了缓解这种行为,您可以创建一个 Gateway 网络策略来阻止 TCP/UDP 端口 53 上向备用 DNS 服务器发出的出站 DNS 流量。例如,要阻止 Google 的备用 DNS 服务器:

选择器 运算符 逻辑 操作
Protocol(协议) in(属于) TCP, UDP And(且) Block(阻止)
Destination Port(目标端口) in(属于) 53 And(且)
Destination IP(目标 IP) in(属于) 8.8.8.8, 8.8.4.4

这篇文档对您有帮助吗?