Как настроить белый список на сервере пересылки DNS с BIND9?

Вопрос или проблема

Я настроил сервер перенаправления DNS на Ubuntu 20.04 LTS, используя Bind 9. Мне необходимо реализовать белый список DNS, однако я не нашел ни одного руководства, которое объясняло бы, как это сделать. Я пытался искать информацию о зонах политик ответов (RPZ), но, похоже, они используются только для черного списка. Я также пытался обратиться к книге "DNS и BIND, 5-е издание", но не нашел ни одной главы, описывающей белый список.

Пожалуйста, может кто-то дать ссылку на руководство, объясняющее, как реализовать белый список, или объяснить ниже, как это можно настроить (и/или опубликовать ссылку с репозиторием файлов/настроек для запуска на моем DNS-сервере)? Заранее спасибо.

P.S. Хотя я предпочел бы узнать, как реализовать это на BIND, я открыт к другим вариантам программного обеспеченияDNS, если есть хорошо задокументированные руководства по настройке 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 для добавления и удаления доменов и прокси-серверы.

Цели проекта — защитить конечных пользователей от фишинга и заблокировать исходящие коммуникации программ-вымогателей.

В конечном итоге я разобрался через списки управления доступом из официальной документации.

https://bind9.readthedocs.io/en/v9.18.1/security.html

Ответ или решение

Настройка белого списка на DNS-сервере с использованием BIND9

Настройка белого списка (whitelisting) на DNS-сервере с использованием BIND9 может быть осуществлена при помощи механизма, известного как Response Policy Zones (RPZ). Хотя RPZ чаще применяется для черных списков, вы можете использовать его функционал для реализации белого списка, что потребует дополнительных шагов, чтобы настроить разрешение только для определенных доменов.

Шаг 1. Установка BIND9

Если вы еще не установили BIND9 на вашу систему Ubuntu 20.04 LTS, вы можете сделать это с помощью следующей команды:

sudo apt update
sudo apt install bind9

Шаг 2. Настройка RPZ

  1. Создайте файл зоны для RPZ.
    Создайте файл, например, /etc/bind/rpz.db, и откройте его для редактирования:

    sudo nano /etc/bind/rpz.db

    Вставьте в файл следующее содержание для белого списка:

    $TTL 2h
    @       IN      SOA     localhost. root.localhost. (
                           2023100401 ; Serial
                           1h          ; Refresh
                           15          ; Retry
                           30          ; Expire
                           1h )        ; Minimum
    
    @       IN      NS      localhost.
    
    ; Блокируем все домены, если они не в белом списке
    *       IN      CNAME   .
    *.com   IN      CNAME   .
    *.example.com IN   CNAME   .
    foo.example.com IN CNAME rpz-passthru. ; Разрешаем foo.example.com

    В этом примере создается базовый белый список и блокируются все домены, кроме указанного.

  2. Добавьте RPZ в конфигурацию BIND.
    Затем вам нужно внести изменения в основной конфигурационный файл BIND, который обычно находится в /etc/bind/named.conf.options. Откройте его:

    sudo nano /etc/bind/named.conf.options

    Добавьте следующее в секцию options:

    response-policy {
       zone "rpz.db";
    };

    Убедитесь, что вы указываете правильный путь к файлу RPZ, если он расположен в другом месте.

Шаг 3. Перезагрузка BIND

После того как вы внесли все изменения, необходимо перезагрузить службу BIND для применения новых настроек:

sudo systemctl restart bind9

Шаг 4. Проверка конфигурации

Чтобы убедиться, что ваша настройка работает, вы можете использовать dig для проверки:

dig @localhost foo.example.com
dig @localhost bar.example.com ; Должен вернуть NXDOMAIN или аналогичное сообщение

Заключение

Используя указанную выше методику, вы сможете настроить белый список доменов на своем DNS-сервере BIND9. Имейте в виду, что этот подход требует тщательного контроля за поддержкой белого списка, особенно в условиях, когда веб-разработчики используют скрытые доменные имена. Также следует регулярно обновлять файл RPZ, чтобы добавлять новые разрешенные домены.

Эта инструкция охватывает основные шаги и может быть дополнена в зависимости от ваших специфических нужд и сценариев использования. Если вам потребуется дополнительная информация, вы можете обратиться к официальной документации BIND9.

Оцените материал
Добавить комментарий

Капча загружается...