Вопрос или проблема
У меня есть перенаправление DNS на Ubuntu 20.04 LTS с использованием Bind 9. Мне нужно реализовать белый список, однако я не нашел никаких учебных материалов.
Я рассмотрел Response Policy Zones (RPZ), но они используются только для черных списков. Я изучил “DNS и BIND 5-е издание”, но не нашел информации о белых списках.
Может кто-то объяснить белый список, с файлами/настройками для DNS-сервера?
Это должно быть возможно сделать с помощью RPZ, так как RPZ имеет как способ блокировки на основе qname (включая подстановочные знаки), так и средство для пробивания дыр в записях блокировки.
Поведение, которое немного усложняет то, что вы хотите, заключается в особенностях работы записей с подстановочными знаками, так как они соответствуют только несуществующим именам.
Например, если вы хотите специально разрешить только foo.example.com
, то записи будут выглядеть примерно так:
* IN CNAME . ; блокировать имена в корне, у которых нет записи в rpz
*.com IN CNAME . ; блокировать имена в com, у которых нет записи в rpz
*.example.com IN CNAME . ; блокировать имена в example.com, у которых нет записи в rpz
foo.example.com IN CNAME rpz-passthru. ; разрешить foo.example.com
То есть, с помощью RPZ вам нужно будет не только перечислить разрешенные имена, но и иметь записи блокировки для подстановочных знаков на каждом этапе, ведущем к этим разрешенным именам.
Определенно будет возможно преобразовать список конкретных имен, которые вы хотите разрешить, в такую RPZ-зону, и эта RPZ-зона должна работать в BIND или любой другой реализации резолвера с поддержкой RPZ.
Существуют также решения, не основанные на RPZ, но я не думаю, что у BIND есть другие реально жизнеспособные варианты.
Еще один вариант, который приходит на ум, например, это правило на основе поиска в базе данных CDB или LMDB в dnsdist
(DNS реверс-прокси).
DNS-белый список не так прост, как использование миллиона доменов. Веб-разработчики используют скрытые доменные имена, когда им нужно размещать API на новых серверах. Просто проверьте HTML-код netflix.com, и вы найдете как минимум три дополнительных домена.
Мы реализовали DNS-белый список как услугу, которая включает регулярную индексацию популярных веб-сайтов, API для добавления и удаления доменов и прокси-серверы.
Цели проекта заключаются в том, чтобы защитить конечных пользователей от фишинга и заблокировать исходящие коммуникации программ-вымогателей.
В конечном итоге я разобрался с помощью списков управления доступом из официальной документации.
Ответ или решение
Настройка белого списка для DNS-сервера с использованием BIND9
Ваша задача заключается в реализации функции белого списка (whitelisting) для DNS-сервера, использующего BIND9 на базе Ubuntu 20.04 LTS. Это может быть реализовано с помощью зон политик ответов (Response Policy Zones – RPZs), которые предоставляют гибкий и мощный способ контроля DNS-запросов.
Принципы работы RPZ
RPZ позволяет создавать правила, которые блокируют или разрешают доступ к определённым доменам. Хотя основное назначение RPZ — это черные списки (blacklist), вы можете настроить правила, чтобы разрешать доступ к определённым доменам, создавая таким образом белый список.
Шаги по настройке RPZ для белого списка
-
Создайте файл зоны RPZ
Сначала вам необходимо создать файл, который будет содержать ваши правила. Назовем его, к примеру,
rpz.zones
.sudo nano /etc/bind/rpz.zones
Внутри этого файла добавьте следующие строки, предполагая, что вы хотите разрешить доступ только к
foo.example.com
и заблокировать все остальные домены:$TTL 2h @ IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. ( 2023100101 ; Serial 2h ; Refresh 30m ; Retry 1w ; Expire 1h ; Negative Cache TTL ) @ IN NS ns.rpz.example.com. ; Блокируем все остальные домены * IN CNAME . *.com IN CNAME . *.example.com IN CNAME . ; Разрешаем доступ к конкретному домену foo.example.com IN CNAME rpz-passthru.
В этом случае мы блокируем все домены на каждом уровне, с тем чтобы разрешить доступ только к
foo.example.com
. -
Измените конфигурацию BIND для использования RPZ
Теперь откройте основной файл конфигурации BIND, чтобы подключить созданный RPZ-файл:
sudo nano /etc/bind/named.conf.local
Добавьте следующие строки ниже существующих
zone
определений:zone "rpz.example.com" { type master; file "/etc/bind/rpz.zones"; };
-
Настройка зоны обратного разрешения (если требуется)
Если вы хотите, чтобы RPZ работал для всех DNS-запросов, вам может потребоваться настроить дополнительные опции. Откройте файл конфигурации:
sudo nano /etc/bind/named.conf.options
Убедитесь, что у вас есть следующие строки:
options { ... response-policy { zone "rpz.example.com"; }; ... };
-
Перезапустите BIND для применения изменений
После внесения всех необходимых изменений необходимо перезапустить службу BIND:
sudo systemctl restart bind9
-
Тестирование
Для проверки корректности работы белого списка вы можете использовать команду
dig
. Например:dig foo.example.com @localhost
Вы должны получить ответ от вашего DNS-сервера. В то же время любой другой запрос к неразрешённому домену, например:
dig bar.example.com @localhost
Должен вернуть ответ о том, что домен не разрешается.
Заключение
Изготовление белого списка с помощью RPZ в BIND9 — это мощный способ управления разрешаемыми DNS-имя. Применив вышеперечисленные шаги, вы сможете эффективно контролировать доступ к определённым доменам, обеспечивая безопасность сети и защищая пользователей от неблагонадежных сайтов. Не забывайте регулярно обновлять ваш белый список, чтобы поддерживать актуальность правил.
Теперь вы обладаете необходимыми знаниями для настройки вашего DNS-сервера с белым списком. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.