Настройка зоны политики ответов (RPZ) в DNS-сервере BIND на CentOS/RHEL

В этом руководстве описывается, как изменить публичные DNS-записи в вашем DNS-сервере BIND, используя зону политики ответа (RPZ) на CentOS/RHEL.

Что представляет собой область политики отклика?

Зона политик ответа (RPZ) предоставляет возможность DNS-разрешателям модифицировать DNS-записи. Изначально она была создана для блокировки доступа к вредоносным ресурсам. К примеру, если устройство пытается получить IP-адрес сайта, известного как источник вредоносного ПО, DNS-разрешатель может вернуть ответ с IP 127.0.0.1, чтобы предотвратить подключение к этому сайту. Этот сценарий является основным способом использования. По этой причине RPZ также называют DNS-фаерволом.

RPZ можно применять и по-другому. К примеру,

  • Если у вас есть самохостящиеся сервисы, например Nextcloud, работающие в вашей локальной сети, вы можете задействовать RPZ для того, чтобы направить домен Nextcloud (nextcloud. your-domain.com) на локальный IP-адрес. Это избавит вас от необходимости выходить в Интернет и возвращаться в локальную сеть для доступа к серверу Nextcloud.
  • Родители могут применять RPZ для ограничения доступа детей к порнографическим сайтам.
  • Вы способны отключить ненужную рекламу.
  • На своем VPS я развертываю множество веб-приложений. Если какое-либо из них не предназначено для общего доступа, я добавляю DNS-запись только в RPZ BIND, избегая публикации записи у регистратора доменов. Это помогает защитить приложение от потенциальных угроз взлома.

Да, вы можете добавить запись DNS в файл /etc/hosts на своем компьютере для замены публичных DNS-записей, но этот метод плохо масштабируется. Более того, на iOS и Android нет возможности создать локальные DNS-записи. Было бы удобно, если бы DNS-резолвер BIND мог переопределять публичные записи, позволяя всем устройствам в сети, использующим BIND, работать с пользовательскими DNS-записями.

Требования, необходимые для начала работы

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

  • Настройка собственного DNS-сервера BIND9 на CentOS 8/RHEL 8

После запуска вашего BIND-резольвера выполните следующие шаги.

Настройка зоны политики ответа BIND на сервере CentOS/RHEL

Сначала откройте файл named.conf для редактирования с помощью текстового редактора командной строки, например, Nano.

sudo nano /etc/named.conf

Внесите указанные строки в секцию options.
response-policy-zone-bind-centos

Прокрутите файл до самого низа и вставьте в него зону RPZ.

zone "rpz. local" < type master; file "rpz. local"; allow-query < localhost; >разрешить передачу< 12.34.56.78; >; >;

  • Вместо простого имени файла в директиве файла вы можете указать полный путь. BIND воспримет это как расположение файла в директории /var/named/.
  • Зоны RPZ должны принимать запросы исключительно с localhost. Не требуется добавлять клиентов из локальной сети.
  • Замените 12.34.56.78 на IP-адрес вашего резервного DNS-резолвера BIND, которому предоставлено разрешение на передачу зоны. Если у вас есть только один DNS-резолвер, можно указать localhost следующим образом: allow-transfer.< localhost; >;
Читайте также:  Как установить ionCube Loader в cPanel

centos-add-RPZ-zone

Для улучшения анализа журнала RPZ рекомендуется создать отдельный файл журнала. Для этого внесите указанные ниже строки в раздел логирования.<. >;

channel rpzlog < file "/var/log/named/rpz.log" versions unlimited size 100m; print-time yes; print-category yes; print-severity yes; severity info; >< rpzlog; >;

Журналирование RPZ в CentOS

Сохраните и закройте документ. После этого создайте папку /var/log/named/ и назначьте владельцем пользователя named.

sudo mkdir /var/log/named/ sudo chown named:named /var/log/named/ - R

Теперь необходимо подготовить файл зоны. Вместо того чтобы разрабатывать его с нуля, можно воспользоваться шаблоном. Скопируйте данные из named. empty в новый файл.

sudo cp /var/named/named. empty /var/named/rpz. local

Измените файл зоны.

sudo nano /var/named/rpz. local

Изменять текущее содержимое не требуется. Мы просто добавим наши собственные DNS записи. К примеру, если у вас в локальной сети находится сервер Nextcloud с IP-адресом 192.168.0.103, добавьте следующую DNS запись, чтобы клиентам Nextcloud не нужно было выходить в Интернет для доступа к серверу.

nextcloud. your-domain.com A 192.168.0.103

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

*.pornhub.com CNAME .

Если вам не по душе реклама Google Adsense на веб-сайтах, вы можете внести следующую строку, чтобы заблокировать домен doubleclick.net, используемый для отображения рекламы Adsense.

*.doubleclick.net CNAME .

Для изменения MX записи доменного имени добавьте следующую строку.

example.com MX 0 mail.example.com.

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

response-policy-zone-bind9-centos-redhat

Сохраните и закройте файл. Затем необходимо установить владельцем группы файл /var/named/rpz. local для пользователя named, иначе служба named не сможет инициализировать эту зону.

sudo chown root:named /var/named/rpz. local

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

sudo named-checkconf

После этого проверьте синтаксис файлов зон RPZ.

sudo named-checkzone rpz /var/named/rpz. local

Если не обнаружено ошибок, выполните перезапуск BIND.

sudo systemctl restart named

Теперь вы можете использовать команду dig на сервере BIND для проверки работоспособности RPZ. Например, выполните запрос на DNS-запись доменного имени, которое содержится в зоне политики ответа.

Читайте также:  Причины и решения проблем с загрузкой Linux

dig A nextcloud. your-domain.com @127.0.0.1

В выводе команды должно быть что-то похожее, что свидетельствует о том, что DNS-ответ поступил из локального RPZ.

;; AUTHORITY SECTION: rpz. local 86400 IN NS localhost.

Вы можете также ознакомиться с журналом запросов BIND9.

sudo tail /var/log/named/rpz.log

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

(example.com): rpz QNAME Local-Data rewrite example.com via example.com. rpz. local

Клиент Fedora не применяет RPZ?

В Fedora RPZ не включен по умолчанию. Вы можете воспользоваться командной утилитой dig для получения IP-адреса хоста в зоне RPZ, однако при попытке выполнить ping этого хоста IP-адрес не будет найден.

Для устранения данной проблемы необходимо отредактировать параметр hosts в файле /etc/nsswitch.conf на клиенте Fedora.

sudo nano /etc/nsswitch.conf

По умолчанию параметр hosts установлен следующим образом:

hosts: files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns

hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines

Сохраните изменения в файле и закройте его. Теперь RPZ должен функционировать корректно.

Применение RPZ в сочетании с форвардерами.

Добавив директиву forwarders в раздел options файла /etc/named.conf, как показано ниже, ваш BIND-резолвер начнет работать в режиме форвардера, пересылая DNS-запросы на внешний DNS-сервер, например, 8.8.8.8.

options < // listen-on port 53 < 127.0.0.1; >; // прослушивание на порту 53 через протокол IPv6< ::1; >directory "/var/named";
max-cache-size 100m;
dump-file "/var/named/data/cache_dump. db";
statistics-file "/var/named/data/named_stats. txt";
memstatistics-file "/var/named/data/named_mem_stats. txt";
secroots-file "/var/named/data/named. secroots";
recursing-file "/var/named/data/named. recursing";
allow-query< localhost; 10.10.60.0/24;>Активировать зону политики отклика. Политика отклика включена.< zone "rpz. local"; >; forwarders < 8.8.8.8; 8.8.4.4; >; . >;

Политика зоны ответа функционирует с данной настройкой форвардера. Сначала Bind обращается к локальной зоне политики ответа. Если запись DNS отсутствует в RPZ, запрос перенаправляется на внешний DNS-резолвер. Использование форвардера может ускорить процесс разрешения DNS в случаях, когда ваш собственный резолвер BIND работает медленно при обработке DNS-имен.

Конфигурация зон передачи

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

Сначала необходимо внести изменения в файл /etc/named.conf на главном DNS-сервере.

sudo nano /etc/named.conf

Укажите IP-адрес вспомогательного DNS-сервера в параметре allow-transfer.

zone "rpz. local" < type master; file "/etc/bind/db. rpz. local"; allow-query < localhost; >разрешить передачу< 12.34.56.78; >Также уведомить< 12.34.56.78; >; >;

Если у вас имеется несколько ведомых DNS-резолверов, добавьте несколько IP-адресов, как указано ниже.

Читайте также:  Как установить Google Chrome на Ubuntu 24.04

allow-transfer < 12.34.56.78; 12.34.56.79; >;

Директива also-notify обеспечит отправку уведомлений ведомому DNS-ресолверу от основного, когда происходит изменение в зоне RPZ. После этого сохраните и закройте файл, затем перезапустите BIND, чтобы изменения начали действовать.

sudo systemctl restart named

Если на основном DNS-ресолвере установлен брандмауэр, необходимо предоставить доступ ведомому DNS-ресолверу к порту 53.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address color: #ff00ff;">12.34.56.78" accept' sudo systemctl reload firewalld

После этого внесите изменения в файл /etc/named.conf на подчиненном DNS-ресолвере.

sudo nano /etc/named.conf

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

//включить политику ответа. response-policy < zone "rpz. local"; >;

После этого вставьте ведомую зону RPZ в конец данного файла. Замените 11.22.33.44 на IP-адрес основного DNS-ресолвера.

zone "rpz. local" < type slave; file "rpz. local"; masters < 11.22.33.44;>Разрешить уведомления.< 11.22.33.44; >разрешить передачу< none; >разрешить-запрос< localhost; >; >;

Сохраните файл и закройте его.

Необходимо также настроить брандмауэр ведомого резолвера, чтобы главному DNS-резолверу было разрешено отправлять уведомления.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address color: #ff00ff;">11.22.33.44" accept' sudo systemctl reload firewalld

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

sudo named-checkconf

Если ошибок не найдено, выполните перезапуск BIND.

sudo systemctl restart named

После перезапуска BIND передача зоны начнется сразу. Для проверки журнала BIND9 используйте следующую команду.

sudo journalctl - eu named

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

transfer of 'rpz. local/IN' from xx. xx. xx. xx#53: Transfer status: success transfer of 'rpz. local/IN' from xx. xx. xx. xx#53: Transfer completed: 1 messages, 34 records, 899 bytes, 0.248 secs (3625 bytes/sec)

Файл зоны будет записан по пути /var/named/rpz. local на подчиненном резолвере.

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

Организация нескольких районов для ролевой игры.

Иногда возникает необходимость ограничить передачу некоторых DNS-записей ведомым резолверам. В этом случае можно создать отдельную зону RPZ. Для этого нужно отредактировать файл /etc/named.conf.

sudo nano /etcnamed.conf

Создайте новую зону RPZ.

//включить политику ответа. response-policy < zone "rpz. local"; zone "rpz. local. notransfer"; >;

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

zone "rpz. local. notransfer" < type master; file "/var/named/rpz. local. notransfer"; allow-query < localhost; >разрешить передачу< localhost; >; >;

Сохраните и закройте документ. После этого необходимо создать файл зоны. Вместо того чтобы начинать с чистого листа, можно воспользоваться шаблоном файла зоны. Скопируйте данные из named. empty в новый файл.

sudo cp /var/named/named. empty /var/named/rpz. local. notransfer

Измените файл зоны.

sudo nano /var/named/rpz. local. notransfer

Заключение