allow-query { 192.168.1.0/24; localhost; };
В данном примере мы позволяем использовать наш сервер узлам из сети 192.168.1.0 и узлу localhost. Целесообразно разрешить рекурсивные запросы только из сети 192.168.1.0 и узлу localhost:
allow-recursion { 192.168.1.0/24; localhost; };
Обычно взлом любой сети начинается со сбора информации — о структуре сети, об установленном программном обеспечении и его версиях и т.п. Мы можем заставить сервер DNS не сообщать номер своей версии, а выдавать произвольное сообщение:
version 'Made in USSR';
Все перечисленные директивы должны быть указаны в секции options файла конфигурации /etc/named.conf:
options {
allow-query { 192.168.1.0/24; localhost; };
allow-recursion { 192.168.1.0/24; localhost; };
allow-transfer { 10.1.1.1; 10.1.2.1; };
version 'Made in USSR';
}
13.8. Защита сервера DNS
13.8.1. Настройка и запуск DNS-сервера в chroot-окружении
Из соображений безопасности рекомендуется запускать все сетевые сервисы в так называемом chroot-окружении (change root). Это файловая система, повторяющая структуру корневой файловой системы, но содержащая только те файлы, которые необходимы для запуска нашего сетевого сервиса. Взломав сетевой сервис и получив доступ к корневой файловой системе, злоумышленник не сможет повредить всей системе в целом, поскольку он получит доступ только к файлам данного сервиса. Некоторые сетевые службы не могут работать в chroot-окружении. BIND — может, и сейчас я покажу, как это организовать.
Не нужно создавать отдельный раздел на диске для каждого сетевого сервиса: нужно только создать каталог, например, root-dns, в который вы скопируете все файлы, необходимые для запуска сервера DNS. Потом, при запуске сервиса, будет выполнена команда chroot для этого сервиса, которая подменит файловую систему. А так как в каталоге root-dns, который станет каталогом /, имеются все необходимые файлы для работы BIND, то для сервиса запуск и работа в chroot-окружении будут совершенно прозрачными.
Сразу нужно оговорить, что настраивать chroot-окружение мы будем для девятой версии BIND, поскольку это значительно проще, чем для восьмой версии. В отличие от восьмой версии, где для настройки chroot-окружения нужно было копировать все бинарные файлы или библиотеки, необходимые для запуска BIND, для работы девятой версии достаточно скопировать только файлы конфигурации и зон, обслуживаемых сервером.
Создайте каталоги корневой файловой системы сервера DNS:
# mkdir -p /root-dns
# mkdir -p /root-dns/etc
# mkdir -p /root-dns/var/run/named
# mkdir -p /root-dns/var/named
Остановите сервер DNS, если он запущен:
# service named stop
Переместите файл конфигурации, файлы зон и файл /etc/localtime (он нужен для корректной работы сервера DNS со временем) в каталог /root-dns:
# mv /etc/named.conf /root-dns/etc/
# mv /var/named/* /root-dns/var/named/
# chown named.named /chroot/etc/named.conf
# chown -R named.named /root-dns/var/named/*
Защитите от редактирования и удаления файл конфигурации:
# chattr +i /root-dns/etc/named.conf
Добавьте в файл /etc/sysconfig/named строку:
ROOTDIR='/root-dns/'
Все, теперь можно запустить сервер named:
# service named start
Проверьте, все ли сделано правильно:
$ ps -ax | grep named.
5380 ? S 0:00 named -u named -t /root-dns/
5381 ? S 0:00 named -u named -t /root-dns/
5382 ? S 0:00 named -u named -t /root-dns/
13.9. Использование подписей транзакций. Механизм TSIG
В девятой версии BIND появилась возможность создавать подписи транзакций (TSIG —
Механизм TSIG очень эффективен при передаче информации о зоне, уведомлений об изменении зоны и рекурсивных сообщений. Согласитесь, проверка подписи надежнее, чем проверка IP-адреса. Злоумышленник может вывести из строя вторичный сервер DNS банальной атакой на отказ, и, пока администратор будет «поднимать» вторичный сервер, он заменит свой IP-адрес адресом вторичного сервера. При использовании TSIG задача злоумышленника значительно усложняется: ведь ему придется «подобрать» 128-битный MD5-ключ, а вероятность такого подбора близка к нулю.
Итак, приступим к настройке. Остановите сервис named.
Сгенерируйте общие ключи для каждой пары узлов. Общие ключи используются при «общении» первичного и вторичного серверов DNS.
[root@dns] # dnssec-keygen -a hmac-md5 -b 128 -n HOST ns1-ns2 Kns1-ns2. +157+49406
Мы используем алгоритм HMAC-MD5, 128-битное шифрование, ns1-ns2 — это имя ключа. После выполнения этой команды будет создан файл Kns1-ns2.+176+40946.private. Откройте его в любом текстовом редакторе. Вы увидите примерно следующее:
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: ms7dfts87Cjhj7FD91k7a3==
Ключ «ms7dfts87Cjhj7FD91k7a3==» и будет тем секретом, который будет передаваться между серверами. Запишите это значение на бумаге (которую потом нужно будет уничтожить) и удалите файлы Kns1-ns2.+157+49406.key и Kns1-ns2.+157+49406.private.
Добавьте в файлы конфигурации первичного и вторичного серверов DNS директивы, указывающие
