Ограничение участников транзакции DNS Query/Response
Рассмотрим пример использования подутверждения allow-query для указания ограничений для транзакции Query / Response, определяя допустимые IP-адреса / подсети в запросах DNS) как на уровне сервера, так и на уровне зоны (для зоны example.ru):
options { allow-query {254.10.20.10; 239.10.30.0/24; }; }; zone "example.ru." { type master; file "zonedb.example.ru"; allow-query {192.249.249.1; 192.249.249.4; }; };
Указывая список IP-адресов или IP-префиксов внутри утверждений options или zone, можно внести путаницу в конфигурационный файл. Более того, список IP-адресов и IP-префиксов может быть одним и тем же для многих утверждений управления доступом внутри name-сервера, и ошибка может возникнуть, если сделано какое-то одно добавление или удаление в данный список. Чтобы избежать таких проблем, в BIND существует способ создания поименованных списков адресов, которые называются access control lists (ACLs). Эти ACLs могут использоваться в тех местах, где допустимо использование списка IP-адресов или IP-префиксов (в качестве аргумента списка соответствующих адресов) в утверждениях управления доступом.
ACLs создаются с использованием утверждения acl в BIND 9.х. Общий синтаксис утверждения acl следующий:
acl acl-list-name { address_match_list };
acl-list-name есть определенная пользователем строка (например, "internal_hosts"). Address_match_list может быть списком IP-адресов, префиксами IP-адресов (обозначающих подсети) или криптографическими ключами. Пример утверждения acl, который использует IP-адрес и подсеть в address_match_list, приведен ниже. В примере 254.10.20.10 обозначает IP-адрес хоста, IP-префикс 239.10.30.0/24 обозначает подсеть класса С.
acl "internal_hosts" { 254.10.20.10; 239.10.30.0/24; };
Можно использовать ACL internal_hosts в тех местах, где используется список IP-адресов или IP-префиксов в утверждениях options и zone следующим образом:
options { allow-query { internal_hosts; }; }; zone "example.ru." { type master; file "zonedb.example.ru"; allow-query { internal_hosts; }; };
Параметр списка соответствующих адресов в утверждении управления доступом может содержать любое из следующих значений:
- IP-адрес или список IP-адресов;
- IP-префикс или список IP-префиксов;
- ACLs;
- комбинация перечисленных выше значений.
Определение ACLs является важным элементом при конфигурировании ограничений транзакций DNS. Следовательно, администратор первым делом должен задать ACLs, относящиеся к различным транзакциям DNS.
Рекомендация:
Необходимо, чтобы администратор создал поименованный список доверенных хостов (или черный список хостов) для каждого типа транзакций DNS. В общем случае следует рассмотреть следующие категории хостов для включения их в соответствующий ACL:
хосты в DMZ, доступные во всех зонах предприятия;
все вторичные name-серверы, которым разрешено инициировать зонные пересылки;
внутренние хосты, которым разрешено выполнять рекурсивные запросы.
Дополнительно к IP-адресам, IP-префиксам или ACL, параметр списка соответствующих адресов в утверждениях управления доступом может принимать следующие специальные значения:
none: нет соответствующих хостов;
any: все хосты;
localhost: соответствует всем IP-адресам сервера, на котором выполняется name-сервер.
localnets: соответствует всем IP-адресам и маскам подсетей сервера, на котором выполняется name-сервер.
Приведем несколько примеров команд для создания ACLs и использования ACLs в утверждениях options и zone:
acl "local_hosts" { 254.10.20.10; 239.10.30.0/24; }; acl "fake-net" { 0.0.0.0/8; 1.0.0.0/8; {; options { allow-query { any; }; blackhole { fake-net; }; }; zone "example.ru" { type master; file "zonedb.example.ru"; allow-query {local_hosts; }; };
Во фрагменте named.conf, приведенном выше, определены два ACLs, local_hosts и fake_net. На уровне сервера разрешены DNS-запросы с любого хоста. Никакие транзакции не разрешены с хостов, включенных в fake-net. Запросы для зоны example.ru могут быть инициированы только хостами, включенными в ACL local_hosts, потому что любое ограничение, указанное в утверждении zone, перекрывает ограничение, указанное в утверждении options.