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

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

У меня есть перенаправление 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 для добавления и удаления доменов и прокси-серверы.

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

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

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

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

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

Ваша задача заключается в реализации функции белого списка (whitelisting) для DNS-сервера, использующего BIND9 на базе Ubuntu 20.04 LTS. Это может быть реализовано с помощью зон политик ответов (Response Policy Zones – RPZs), которые предоставляют гибкий и мощный способ контроля DNS-запросов.

Принципы работы RPZ

RPZ позволяет создавать правила, которые блокируют или разрешают доступ к определённым доменам. Хотя основное назначение RPZ — это черные списки (blacklist), вы можете настроить правила, чтобы разрешать доступ к определённым доменам, создавая таким образом белый список.

Шаги по настройке RPZ для белого списка

  1. Создайте файл зоны 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.

  2. Измените конфигурацию BIND для использования RPZ

    Теперь откройте основной файл конфигурации BIND, чтобы подключить созданный RPZ-файл:

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

    Добавьте следующие строки ниже существующих zone определений:

    zone "rpz.example.com" {
       type master;
       file "/etc/bind/rpz.zones";
    };
  3. Настройка зоны обратного разрешения (если требуется)

    Если вы хотите, чтобы RPZ работал для всех DNS-запросов, вам может потребоваться настроить дополнительные опции. Откройте файл конфигурации:

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

    Убедитесь, что у вас есть следующие строки:

    options {
       ...
       response-policy { zone "rpz.example.com"; };
       ...
    };
  4. Перезапустите BIND для применения изменений

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

    sudo systemctl restart bind9
  5. Тестирование

    Для проверки корректности работы белого списка вы можете использовать команду dig. Например:

    dig foo.example.com @localhost

    Вы должны получить ответ от вашего DNS-сервера. В то же время любой другой запрос к неразрешённому домену, например:

    dig bar.example.com @localhost

    Должен вернуть ответ о том, что домен не разрешается.

Заключение

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

Теперь вы обладаете необходимыми знаниями для настройки вашего DNS-сервера с белым списком. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

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

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