BIND, RPZ и приоритетные направления

Моя цель - заблокировать определенные домены в bind, БЕЗ предварительного просмотра их адреса (это небольшой DNS-сервер кэширования bind).

В настоящее время моя конфигурация перенаправит запрос на badhost.com и получит IP-адрес (я вижу это в wireshark), а затем перезапишет этот ответ с помощью NXDOMAIN.

bind.log:

client 192.168.1.1#46107 (badhost.com): rpz QNAME NXDOMAIN rewrite badhost.com via badhost.com.rpz

Но нет смысла извлекать IP-адрес, и это задерживает запрос. Я просто хочу, чтобы он быстро возвращал NXDOMAIN для заблокированных доменов без переадресации.

конфигурация:

options {
  response-policy { zone "rpz" policy nxdomain; };
  cleaning-interval 360;
  forward only;
  forwarders { x.x.x.x; y.y.y.y; };
  allow-recursion { any; };
  allow-query { any; };
  allow-query-cache { any; };

}

zone "rpz" {
  type master;
  file "/etc/bind/rpz.zone";
};
zone "0.0.127.in-addr.arpa" {
        type master;
    notify no;
        file "pz/127.0.0";
};
zone "1.168.192.in-addr.arpa" {
        type master;
        notify no;
        file "pz/192.168.1";
};
zone "lan" {
        type master;
        notify no;
        file "pz/lan";
};

rpz.zone

$TTL    604800
@       IN      SOA     ns1.example.local. info.example.local. (
                          2         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL

@       IN      NS      local.

$INCLUDE rpz.blacklist.db

rpz.blacklist.db

badhost.com CNAME .

Будет тысячи записей, поэтому я не хочу, чтобы зона указывала на один и тот же файл (0.0.0.0 или 127.0.0.1) для каждого.

1 ответ

Решение

Это может быть достигнуто с qname-wait-recurse, Вот документация от ARM BIND 9.10 относительно использования этой функции:

Записи DNS не нужны для триггера QNAME или Client-IP. Само имя или IP-адрес являются достаточными, поэтому в принципе имя запроса не нужно рекурсивно разрешать. Тем не менее, не разрешение запрошенного имени может привести к утечке факта, что перезапись политики ответа используется, и что имя перечислено в зоне политики операторам серверов для перечисленных имен. Чтобы предотвратить эту утечку информации, по умолчанию любая рекурсия, необходимая для запроса, выполняется перед рассмотрением любых триггеров политики. Поскольку указанные домены часто имеют медленные авторизованные серверы, такое поведение по умолчанию может стоить значительного времени. Опция qname-wait-recurse no переопределяет это поведение по умолчанию, когда рекурсия не может изменить ответ без ошибки. Этот параметр не влияет на триггеры QNAME или client-IP в зонах политики, перечисленных после других зон, содержащих триггеры IP, NSIP и NSDNAME, поскольку они могут зависеть от записей A, AAAA и NS, которые будут обнаружены при рекурсивном разрешении. Это также не влияет на запросы DNSSEC (DO=1), если не используется break-dnssec yes, поскольку ответ будет зависеть от того, были ли найдены записи RRSIG во время разрешения. Использование этой опции может привести к тому, что ответы об ошибках, такие как SERVFAIL, будут перезаписаны, так как не выполняется рекурсия для обнаружения проблем на полномочном сервере.

Синтаксис для включения этой функции немного неясен. Вместо того, чтобы положить его в глобальном options {}; блок, он должен появиться перед запятой в вашем response-policy {}; определение.

[ response-policy {
    zone zone_name
    [ policy (given | disabled | passthru | drop |
              nxdomain | nodata | cname domain) ]
    [ recursive-only yes_or_no ]
    [ max-policy-ttl number ]
    ; [...]
} [ recursive-only yes_or_no ]
  [ max-policy-ttl number ]
  [ break-dnssec yes_or_no ]
  [ min-ns-dots number ]
  [ qname-wait-recurse yes_or_no ]
  [ automatic-interface-scan yes_or_no ]
; ]

До:

response-policy { zone "rpz"; };

После:

response-policy { zone "rpz"; } qname-wait-recurse no;
Другие вопросы по тегам