Перейти к содержанию

Глава 31. Управление DNS

Действия DNS используются в слое <DNS-Proxy> для фильтрации, подмены и управления DNS-запросами. Включают как нетерминальные (настройки), так и терминальные (подмена ответа) действия.

31.1. dns.server(ip[:port]) — DNS-сервер

Указывает DNS-сервер для разрешения конкретного запроса. Позволяет маршрутизировать DNS-запросы на разные серверы в зависимости от условий.

Синтаксис:

dns.server(<ip>[:<port>])

where: ip — IP-адрес DNS-сервера; port — порт (по умолчанию 53).

Тип: Нетерминальное.

Слои и транзакции: DNS-Proxy. Применяется к DNS-транзакциям.

Пример:

<DNS-Proxy>
    dns.request.name=*.internal.corp dns.server(10.0.0.1)
    dns.server(8.8.8.8)

См. также: dns.resolve


31.2. dns.resolve(yes/no) — разрешение имён

Управляет разрешением DNS-имён прокси-сервером.

Синтаксис:

dns.resolve(yes|no)

where: yes — разрешать имена; no — не разрешать (запрос передаётся без изменений).

Тип: Нетерминальное.

Слои и транзакции: DNS-Proxy.

Пример:

<DNS-Proxy>
    dns.resolve(yes)

31.3. dns.cache(yes/no) — кэширование DNS

Примечание: Действие принимается, но пока не влияет на поведение: управление DNS-кэшем для отдельных правил ещё не подключено.

Включает или отключает кэширование DNS-ответов.

Синтаксис:

dns.cache(yes|no)

where: yes — кэшировать DNS-ответы; no — не кэшировать.

Тип: Нетерминальное.

Слои и транзакции: DNS-Proxy.

Пример:

<DNS-Proxy>
    dns.cache(yes)

31.4. dns.ttl(seconds) — TTL записей

Переопределяет TTL для DNS-ответа. Применяется к кэшированным записям.

Синтаксис:

dns.ttl(<seconds>)

where: seconds — целое число, TTL в секундах.

Тип: Нетерминальное.

Слои и транзакции: DNS-Proxy.

Пример:

<DNS-Proxy>
    dns.ttl(300)                               ; 5 минут

31.5. dns.respond(code) — ответить с кодом

Формирует синтетический DNS-ответ с указанным кодом (RCODE). Прокси не пересылает запрос на вышестоящий DNS-сервер.

Синтаксис:

dns.respond(<code>)

where: code — один из: noerror, formerr, servfail, nxdomain, notimp, refused, или числовой RCODE.

Тип: Терминальное. Обработка запроса прекращается, клиент получает синтетический DNS-ответ.

Слои и транзакции: DNS-Proxy. Применяется к DNS-транзакциям.

Пример:

<DNS-Proxy>
    dns.request.name=malware.example.com dns.respond(nxdomain)
    dns.request.type=ANY dns.respond(refused)

См. также: dns.respond.a


31.6. dns.respond.a(ip) / dns.respond.aaaa(ipv6) — подмена ответа

Формирует синтетический DNS-ответ с указанным IP-адресом. Поддерживает несколько IP (round-robin) и опциональный TTL. Вариант dns.respond.a(vip) возвращает VIP-адрес прокси.

Синтаксис:

dns.respond.a(<ip>[, <ip>]*[, <ttl>])
dns.respond.a(vip)
dns.respond.aaaa(<ipv6>[, <ipv6>]*[, <ttl>])

where: ip — IPv4-адрес; ipv6 — IPv6-адрес; ttl — TTL в секундах (опционально, последний числовой аргумент); vip — виртуальный IP-адрес прокси.

Тип: Терминальное. Обработка запроса прекращается, клиент получает синтетический DNS-ответ.

Слои и транзакции: DNS-Proxy.

Пример:

<DNS-Proxy>
    ; Sinkhole для botnet C2
    dns.request.name=*.botnet.example dns.respond.a(127.0.0.1)

    ; Round-robin с TTL
    dns.request.name=lb.corp dns.respond.a(10.0.1.100, 10.0.1.101, 300)

    ; Перенаправление на VIP
    dns.request.name=portal.corp dns.respond.a(vip)

    ; IPv6 loopback
    dns.request.name=blocked.example dns.respond.aaaa(::1)

См. также: dns.respond, dns.respond.ptr


31.7. dns.respond.ptr(hostname) — PTR ответ

Формирует синтетический DNS PTR-ответ с указанным именем хоста.

Синтаксис:

dns.respond.ptr(<hostname>[, <ttl>])

where: hostname — имя хоста для PTR-записи; ttl — TTL в секундах (опционально).

Тип: Терминальное.

Слои и транзакции: DNS-Proxy.

Пример:

<DNS-Proxy>
    dns.request.name=100.1.168.192.in-addr.arpa dns.respond.ptr(server.corp, 300)

31.8. dns.sinkhole(ip) / dns.spoof(ip) — псевдонимы подмены

Упрощённые формы dns.respond.a. Перенаправляют DNS-разрешение на указанный IP.

Синтаксис:

dns.sinkhole(<ip>)
dns.spoof(<ip>)

where: ip — IP-адрес для подмены.

Тип: Терминальное (оба).

Слои и транзакции: DNS-Proxy.

Примечание: Это устаревшие псевдонимы. Предпочтительная форма — dns.respond.a(ip).


31.9. dns.nxdomain — псевдоним NXDOMAIN

Упрощённая форма dns.respond(nxdomain).

Синтаксис:

dns.nxdomain

Тип: Терминальное.

Слои и транзакции: DNS-Proxy.


31.10. dns.bypass(yes/no) — обход DNS-прокси

Управляет обходом DNS-прокси для конкретного запроса.

Синтаксис:

dns.bypass(yes|no)

where: yes — пропустить запрос без обработки; no — обрабатывать через DNS-прокси.

Тип: Нетерминальное.

Слои и транзакции: DNS-Proxy.


Комплексный пример DNS-политики:

<DNS-Proxy>
    ; Блокировка вредоносных доменов
    dns.request.name=malware.example.com dns.respond(nxdomain)

    ; Sinkhole для botnet C2
    dns.request.name=*.botnet.example dns.respond.a(127.0.0.1)

    ; Перенаправление на внутренний портал
    dns.request.name=portal.corp dns.respond.a(10.0.1.100)

    ; PTR для внутренних адресов
    dns.request.name=*.168.192.in-addr.arpa dns.server(10.0.0.1)

    ; Блокировка ANY-запросов (защита от amplification)
    dns.request.type=ANY dns.respond(refused)

    ; Кэширование с TTL 5 минут
    dns.cache(yes) dns.ttl(300)

    allow