В этом руководстве описывается, как изменить публичные DNS-записи в вашем DNS-сервере BIND, используя зону политики ответа (RPZ) на CentOS/RHEL.
Содержание статьи
- 1 Что представляет собой область политики отклика?
- 2 Требования, необходимые для начала работы
- 3 Настройка зоны политики ответа BIND на сервере CentOS/RHEL
- 4 Клиент Fedora не применяет RPZ?
- 5 Применение RPZ в сочетании с форвардерами.
- 6 Конфигурация зон передачи
- 7 Организация нескольких районов для ролевой игры.
- 8 Заключение
Что представляет собой область политики отклика?
Зона политик ответа (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.

Прокрутите файл до самого низа и вставьте в него зону 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; >;

Для улучшения анализа журнала 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; >;

Сохраните и закройте документ. После этого создайте папку /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.
Обратите внимание: все имена с левой стороны не должны иметь точку в конце, тогда как все имена с правой стороны должны заканчиваться точкой.

Сохраните и закройте файл. Затем необходимо установить владельцем группы файл /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-запись доменного имени, которое содержится в зоне политики ответа.
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-адресов, как указано ниже.
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

