INTEGRITY Документация

Резолвера политики

По умолчанию Gateway отправляет DNS-запросы на 1.1.1.1, публичный DNS-резолвер Cloudflare, для разрешения запросов. Пользователи тарифа Enterprise могут вместо этого создать политики Gateway для направления DNS-запросов на пользовательские резолверы.

flowchart TD
    %% Accessibility
    accTitle: How Gateway routes DNS queries
    accDescr: Flowchart describing the order Cloudflare Gateway routes a DNS query from an endpoint through DNS and resolver policies back to the user.

    %% Flowchart
    user(["User"])-->endpoint[/"Gateway DNS endpoint"/]

    endpoint-->query["DNS policy (query)"]

    query-->resolver["Resolver policy"]

    resolver--"Routes to </br>custom resolver"-->response["DNS policy (response)"]

    response--"Returns response"-->user

Gateway направляет трафик пользователей к настроенному DNS-резолверу на основе подходящей политики, даже если IP-адреса ваших резолверов пересекаются.

Сценарии использования

Политики DNS-резолвера пригодятся, если вам нужен доступ к доменам без публичной маршрутизации, например к сервисам частной сети или внутренним ресурсам. Также их можно использовать, если требуется доступ к защищённой DNS-службе или нужно упростить управление DNS для нескольких площадок.

Internal DNS

Cloudflare Internal DNS позволяет управлять DNS записями внутренних ресурсов в приватной сети. DNS зоны, настроенные в Internal DNS, может запрашивать только резолвер Gateway. С помощью политик резолвера вы можете определить, как Gateway разрешает DNS запросы вашей организации во внутренние ресурсы в зависимости от контекста запроса, например по известным исходным IP адресам для географического региона.

Чтобы начать работу с разрешением внутренних DNS-запросов с помощью политик резолвера, см. Начало работы.

Local Domain Fallback

Используйте политики Resolver, если ваш DNS-сервер доступен из сети Cloudflare (например, через Cloudflare Tunnel, туннель IPsec/GRE или обычный интернет). Используйте Local Domain Fallback когда DNS-сервер доступен только с устройства пользователя.

Если для одного и того же устройства настроены и Local Domain Fallback, и политики Resolver, Cloudflare сначала применит клиентские правила Local Domain Fallback. Если вы подключаете DNS-запросы к Gateway через Cloudflare One Client и направляете их с помощью политик Resolver, исходным IP-адресом этих запросов будет IP-адрес, назначенный Cloudflare One Client.

Подключения резолвера

Политики резолвера поддерживают TCP- и UDP-соединения. Пользовательские резолверы могут указывать на интернет через IPv4 или IPv6 либо на службу приватной сети, например на туннель Magic. По умолчанию политики используют порт 53. Вы можете изменить порт, который использует ваш резолвер, настроив это в своей политике.

Вы можете защитить свои авторитативные серверы имен от DDoS-атак, включив DNS Firewall.

Cloudflare Tunnel

Вы можете настроить подключения к частному резолверу, подключённому к Cloudflare, с помощью Cloudflare Tunnel. Чтобы обеспечить cloudflared может направлять UDP-трафик на ваш резолвер, подключать туннель через QUIC.

Дополнительные сведения о подключении приватного DNS-резолвера к Cloudflare с помощью Cloudflare Tunnel см. в Частный DNS.

Cloudflare WAN

Чтобы включить подключения к приватному резолверу, подключенному к Cloudflare через Cloudflare WAN, свяжитесь со своей командой по работе с аккаунтом.

Доступные конечные точки DNS

Политики резолвера могут направлять запросы на разрешение из следующих конечных точек DNS:

Gateway фильтрует, разрешает и регистрирует ваши запросы независимо от конечной точки.

Создать политику резолвера

Чтобы создать политику Resolver:

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Политики трафика > Резолвера политики.

  2. Выберите Добавление политики.

  3. Создайте выражение для нужного трафика. Например, вы можете разрешить имя хоста для внутреннего сервиса:

    Селектор Оператор Значение
    Host in internal.example.com

    Убедитесь, что ваш пункт назначения не подпадает под действие Local Domain Fallback.

  4. В Выберите DNS-резолвер, выберите Настройте пользовательские DNS-резолверы.

  5. Введите IP-адреса пользовательского DNS-резолвера. По мере ввода IP-адреса Gateway будет выполнять поиск в виртуальные сети настроено в Zero Trust.

  6. В Сеть, выберите, направлять ли запросы публично (в интернет) или приватно (в сервис приватной сети).

  7. (Необязательно) Введите пользовательский порт для каждого IP-адреса.

  8. Выберите Создать политику.

Пользовательские резолверы сохраняются в вашем аккаунте для дальнейшего использования. Вы можете добавить в политику до 10 адресов IPv4 и 10 адресов IPv6.

  1. Добавьте следующее разрешение в свой cloudflare_api_token:

    • Zero Trust Write
  2. Создайте политику резолвера с помощью cloudflare_zero_trust_gateway_policy ресурс:

    resource "cloudflare_zero_trust_gateway_policy" "resolver_policy" {
    	name        = "Example resolver policy"
    	enabled     = true
    	account_id  = var.cloudflare_account_id
    	description = "TERRAFORM MANAGED resolver policy"
    	action      = "resolve"
    	traffic     = "dns.fqdn in {\"internal.example.com\"}"
    	identity    = "identity.email in {\"[email protected]\"}"
    	precedence  = 1
    	rule_settings = {
    			dns_resolvers = {
    			# You can add up to 10 IPv4 and 10 IPv6 addresses to a policy.
    				ipv4 = [{
    					ip = "192.0.2.24"
    					port = 53
    					route_through_private_network = true
    					vnet_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.staging_vnet.id
    				}]
    				ipv6 = [{
    					ip = "2001:DB8::"
    					port = 53
    					route_through_private_network = true
    					vnet_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.staging_vnet.id
    				}]
    			}
    	}
    }

Когда запрос пользователя совпадает с политикой резолвера, Gateway отправляет запрос указанным вами резолверам в следующем порядке:

  1. Публичные резолверы
  2. Приватные резолверы за виртуальной сетью по умолчанию для вашего аккаунта
  3. Приватные резолверы за пользовательской виртуальной сетью

Gateway кэширует самый быстрый резолвер для использования в последующих запросах. Приоритет резолверов кэшируется отдельно для каждого пользователя в каждом дата-центре.

Дополнительные сведения о создании политики DNS см. в Политики DNS.

Селекторы

Content Categories

Используйте этот селектор, чтобы фильтровать домены, принадлежащие определённым категории контента.

UI name Пример API Этап оценки
Content Categories any(dns.content_category[*] in {1}) До разрешения DNS

IP-адрес DNS-резолвера

Используйте этот селектор, чтобы применять политики к DNS-запросам, поступившим на ваш IP-адрес Gateway Resolver, привязанный к зарегистрированному местоположению DNS. Для большинства клиентов Gateway это IPv4 anycast-адрес, и политики, созданные с использованием этого IPv4-адреса, будут применяться ко всем местоположениям DNS. Однако у каждого местоположения DNS есть выделенный IPv6-адрес, а некоторым клиентам Gateway предоставлен выделенный IPv4-адрес: оба адреса можно использовать для применения политик к конкретным зарегистрированным местоположениям DNS.

UI name Пример API Этап оценки
IP-адрес DNS-резолвера any(dns.resolved_ip[*] == 198.51.100.0) До разрешения DNS

Поддомен DoH

Используйте этот селектор, чтобы находить соответствие DNS-запросам, поступающим через DNS-over-HTTPS (DoH) и предназначенным для конечной точки DoH, настроенной для каждого местоположения DNS. Например, можно использовать местоположение DNS с конечной точкой DoH abcdefg.cloudflare-gateway.com выбрав селектор DoH Subdomain и указав значение abcdefg.

UI name Пример API Этап оценки
DOH Subdomain dns.doh_subdomain == "abcdefg" До разрешения DNS

Домен

Используйте этот селектор, чтобы находить соответствие домену и всем его поддоменам. Например, можно указать соответствие example.com и его поддомены, например www.example.com.

UI name Пример API Этап оценки
Домен any(dns.domains[*] == "example.com") До разрешения DNS

Политики Gateway не поддерживают домены с нелатинскими символами напрямую. Чтобы использовать домен с нелатинскими символами, добавьте его в список.

Host

Используйте этот селектор, чтобы находить соответствие только указанному имени хоста. Например, можно указать соответствие test.example.com но не example.com или www.test.example.com.

UI name Пример API Этап оценки
Host dns.fqdn == "example.com" До разрешения DNS

Политики Gateway не поддерживают имена хостов с нелатинскими символами напрямую. Чтобы использовать имя хоста с нелатинскими символами, добавьте его в список.

Расположение

Используйте этот селектор, чтобы применять политики к определённому DNS-локация Gateway или набор местоположений.

UI name Пример API Этап оценки
Расположение dns.location in {"location_uuid_1" "location_uuid_2"} До разрешения DNS

Тип записи запроса

Используйте этот селектор, чтобы выбрать тип ресурсной записи DNS, к которому нужно применить политики. Например, можно указать соответствие A записи для домена, но не MX записи.

UI name Пример API Этап оценки
Тип записи запроса dns.query_rtype == "TXT" До разрешения DNS

Security Categories

Используйте этот селектор, чтобы находить соответствие доменам (а также, при необходимости, IP-адреса) принадлежащих определённым категории безопасности.

UI name Пример API Этап оценки
Security Categories any(dns.security_category[*] in {1}) До разрешения DNS

Континент источника

Используйте этот селектор, чтобы фильтровать по континенту, из которого запрос поступил в Gateway.

Геолокация определяется по публичному IP-адресу устройства (обычно назначаемому интернет-провайдером пользователя). Чтобы указать континент, введите его двухбуквенный код в поле Значение поле:

Континент Код
Африка AF
Антарктида AN
Азия AS
Европа EU
Северная Америка NA
Океания OC
Южная Америка SA
UI name Пример API Этап оценки
Геолокация IP по континенту источника dns.src.geo.continent == "North America" До разрешения DNS

Страна источника

Используйте этот селектор, чтобы фильтровать по стране, из которой запрос поступил в Gateway.

Геолокация определяется по публичному IP-адресу устройства (обычно назначаемому интернет-провайдером пользователя). Чтобы указать страну, введите её код ISO 3166-1 Alpha-2 в Значение поле.

UI name Пример API Этап оценки
Геолокация IP по стране источника dns.src.geo.country == "RU" До разрешения DNS

Исходный IP

Используйте этот селектор, чтобы применять политики к исходному IP-адресу DNS-запросов. Например, это может быть WAN IP-адрес резолвера-заглушки, который ваша организация использует для отправки запросов в Gateway.

UI name Пример API Этап оценки
Исходный IP dns.src_ip == 198.51.100.0 До разрешения DNS

Пользователи

Используйте эти селекторы, чтобы находить соответствие атрибутам идентификации.

UI name Пример API Этап оценки
User Email identity.email == "[email protected]" До разрешения DNS
User Name identity.name == "Test User" До разрешения DNS
User Group IDs 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 {"[email protected]"}) До разрешения DNS
SAML Attributes any(identity.saml_attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] in {"Test User"}) До разрешения DNS

Операторы сравнения

С помощью операторов сравнения Gateway сопоставляет трафик с селектором. Когда вы выбираете Селектор в конструкторе политик панели управления, Оператор раскрывающемся меню будут показаны доступные варианты для этого селектора.

Оператор Значение
является равно заданному значению
не является не равно заданному значению
in соответствует хотя бы одному из указанных значений
not in не соответствует ни одному из заданных значений
in list в предопределённом список значений
not in list не входит в предопределённый список значений
matches regex regex возвращает true
does not match regex regex возвращает false
больше превышает заданное число
больше или равно превышает заданное число или равно ему
меньше меньше заданного числа
меньше или равно меньше или равно заданному числу

Значение

В Значение поле можно ввести единственное значение при использовании оператора сравнения на равенство (например, является) или несколько значений при использовании оператора сравнения на вхождение (например, in). Кроме того, вы можете использовать регулярные выражения (или regex), чтобы задать диапазон значений для поддерживаемых селекторов.

Регулярные выражения

Регулярные выражения обрабатываются с использованием Rust. Реализация Rust немного отличается от библиотек regex, используемых в других местах. Дополнительную информацию см. в нашем руководстве по Подстановочные знаки. Чтобы проверить, соответствует ли ваше регулярное выражение, вы можете использовать Rustexp.

Чтобы сопоставить несколько значений, можно использовать символ вертикальной черты (|) в качестве оператора OR. Использовать escape-символ не требуется (\) до символа "|". Например, следующее выражение возвращает true, если имя хоста совпадает с одним из значений: .*whispersystems.org или .*signal.org:

Селектор Оператор Значение
Host matches regex .*whispersystems.org|.*signal.org

Помимо регулярных выражений, вы можете использовать логические операторы чтобы соответствовать нескольким значениям.

Логические операторы

Чтобы оценить несколько условий в выражении, выберите И логический оператор. Эти выражения можно дополнительно сравнить с помощью Или логический оператор.

Оператор Значение
И соответствуют всем условиям в выражении
Или соответствуют хотя бы одному из условий в выражении

Или оператор работает только с условиями в пределах одной группы выражений. Например, нельзя сравнивать условия в Трафик с условиями в Identity.