Глава 31. Управление DNS¶
Действия DNS используются в слое <DNS-Proxy> для фильтрации, подмены и управления DNS-запросами. Включают как нетерминальные (настройки), так и терминальные (подмена ответа) действия.
31.1. dns.server(ip[:port]) — DNS-сервер¶
Указывает DNS-сервер для разрешения конкретного запроса. Позволяет маршрутизировать DNS-запросы на разные серверы в зависимости от условий.
Синтаксис:
where: ip — IP-адрес DNS-сервера; port — порт (по умолчанию 53).
Тип: Нетерминальное.
Слои и транзакции: DNS-Proxy. Применяется к DNS-транзакциям.
Пример:
См. также: dns.resolve
31.2. dns.resolve(yes/no) — разрешение имён¶
Управляет разрешением DNS-имён прокси-сервером.
Синтаксис:
where: yes — разрешать имена; no — не разрешать (запрос передаётся без изменений).
Тип: Нетерминальное.
Слои и транзакции: DNS-Proxy.
Пример:
31.3. dns.cache(yes/no) — кэширование DNS¶
Примечание: Действие принимается, но пока не влияет на поведение: управление DNS-кэшем для отдельных правил ещё не подключено.
Включает или отключает кэширование DNS-ответов.
Синтаксис:
where: yes — кэшировать DNS-ответы; no — не кэшировать.
Тип: Нетерминальное.
Слои и транзакции: DNS-Proxy.
Пример:
31.4. dns.ttl(seconds) — TTL записей¶
Переопределяет TTL для DNS-ответа. Применяется к кэшированным записям.
Синтаксис:
where: seconds — целое число, TTL в секундах.
Тип: Нетерминальное.
Слои и транзакции: DNS-Proxy.
Пример:
31.5. dns.respond(code) — ответить с кодом¶
Формирует синтетический DNS-ответ с указанным кодом (RCODE). Прокси не пересылает запрос на вышестоящий DNS-сервер.
Синтаксис:
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-ответ с указанным именем хоста.
Синтаксис:
where: hostname — имя хоста для PTR-записи; ttl — TTL в секундах (опционально).
Тип: Терминальное.
Слои и транзакции: DNS-Proxy.
Пример:
31.8. dns.sinkhole(ip) / dns.spoof(ip) — псевдонимы подмены¶
Упрощённые формы dns.respond.a. Перенаправляют DNS-разрешение на указанный IP.
Синтаксис:
where: ip — IP-адрес для подмены.
Тип: Терминальное (оба).
Слои и транзакции: DNS-Proxy.
Примечание: Это устаревшие псевдонимы. Предпочтительная форма —
dns.respond.a(ip).
31.9. dns.nxdomain — псевдоним NXDOMAIN¶
Упрощённая форма dns.respond(nxdomain).
Синтаксис:
Тип: Терминальное.
Слои и транзакции: DNS-Proxy.
31.10. dns.bypass(yes/no) — обход DNS-прокси¶
Управляет обходом DNS-прокси для конкретного запроса.
Синтаксис:
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