Главная » Статьи » Linux » Сервера |
Взято здесь. Конфигурирование Bind 9 ( Конфигурирование сервера доменных имен Bind 9. ) OS: Debian Lenny. Учитывая то, что наши NS отвечают и на запросы извне сети, хоть и находясь в DMZ, постараемся обеспечить им повышенные условия безопасности. Заставим сервера при транзакциях использовать механизм подписей md5 ключами (это нужно для того, чтобы, если действительный сервер будет выведен из строя, на его место нельзя было бы "подставить" сервер злоумышленника, могущего внести путаницу в работе инфраструктуры). Регламентирование доступа с помощью ACL тоже ещё никто не отменял. Конфигурационные файлы, скрипты и структуру дерева директорий сервисов в Debian пишут умные люди, старающиеся унифицировать все по максимуму и предусмотреть обход самых различных конфликтных ситуаций. Все так. Но я предпочитаю не вестись на нововведения, в которых не чувствую острой необходимости; потому мы будем строить несколько упрощённую, "олдскульную" конфигурацию. Создаем директории зон типов зон на наших серверах. Конфигурация наших NS смешанная, так что они не будут пустовать:
Предпочитаю в корне директории конфигураций оставить файлы зон: прямого разрешения для loopback (db.localhost); Все остальные конфигурационные файлы удалим и создадим свои собственные. Создаем директорию для хранения ключей подписания транзакций: # mkdir -p /var/lib/named/etc/bind/key Создадим, предназначенным для этого генератором ключей, каждому из наших серверов ключ подписи транзакций: # cd /tmp При генерации ключей мы использовали алгоритм шифрования HMAC-MD5; длинна ключа в 128 bit. Тип создаваемого ключа в нашей конфигурации не важен: мы указали HOST. С указанием типа устройства, с которого снимаем "случайные" данные при генерации ключа есть свой нюанс; устройство /dev/random, с которым "по умолчанию" работает утилита dnssec-keygen не всегда корректно настроено да ещё и работает "на выдачу" только тогда, когда собирается действительно достаточно случайных данных от "окружающих устройств"; а вот устройство /dev/urandom добавляет в случае необходимости свой "шумовой фон" и отрабатывает гораздо быстрее и не так сильно зависит от настроек, как /dev/random, хоть и выдает "менее случайные" данные. В результате выполнения вышеприведённых команд в текущей директории будут созданы файлы с "говорящими" именами и расширениями ".key" и ".private". Нас интересует значение переменной "Key: " из этих файлов - это наши ключи. Создадим конфигурационные файлы описания ключей подписания транзакций в директории "/var/lib/named/etc/bind/key/": # touch /var/lib/named/etc/bind/key/ns.local.key Описываем в созданных конфигурационных файлах наши ключи, используя значения, полученные из сгенерированных ранее файлов: # cat /var/lib/named/etc/bind/key/ns.local.key key ns.local { # cat /var/lib/named/etc/bind/key/ns1.local.key key ns1.local { Полученные файлы с описанием ключей можно будет применить на всех сторонах, осуществляющих защищаемые транзакции. Генерируем ещё один ключ, наличие которого требуется для подписания транзакций между службой named и управляющей утилитой rndc. Если утилита rndc если его не обнаружит в корне директории bind (а при отсутствии собственного конфигурационного файла она именно там ищет ключ подписи транзакции), то она не сможет соединится с службой named для управления ею (мы можем переместить этот ключ в другое место, но после этого потребуется указать новое месторасположение ключа службе named и утилите rndc в их конфигурационных файлах или параметрах запуска): # cd /tmp Создаем файл "/var/lib/named/etc/bind/rndc.key": # touch /var/lib/named/etc/bind/rndc.key Размещаем в нем следующее: key "rndc-key" { После создания необходимых ключевых структур необходимо в обязательном порядке удалить все временные файлы, сгенерированные утилитой dnssec-keygen; они нам уже не нужны, и совершенно ни к чему оставлять в файловой системе в открытом виде какие бы то ни было секретные ключи. Относительно зоны описания корневых серверов есть мнение, что стоит пробрасывать (forwarder) все неразрешённые запросы на NS своего провайдера а не пытаться предоставлять своему серверу решать задачу нахождения ответственного за неизвестные зоны, запрашиваемые клиентами. Оно то так, однако до сих пор я не встречал достаточно стабильного провайдера, которому я доверился в этом смысле. Так что будем сами генерировать трафик в поисках серверов носителей зон. Время от времени, хотя бы раз в полгода, следует, наверное, позаботиться об обновлении файла с описанием корневых серверов системы разрешения доменных имён. Создаем или доводим имеющийся конфигурационный файл опций службы named "/var/lib/named/etc/bind/named.conf.options" до следующего вида: # Включение конфигурационных файлов описания ключей для подписания транзакций # Привязываем описанные ранее в своих конфигурационных файлах ключи к определённым ресурсам (это дополнительный уровень проверки, только от этих ресурсов будет принята подпись транзакции указанным ключём), в нашем случае, индивидуально ко всем нашим серверам: # В зоне trusted-dns находятся те, кому будет далее разрешён трансфер зон, проверка на принадлежность производится как на основании адреса источника запроса, так и на наличии у него соответствующего ключа подписи транзакции # Распределение поступающих запросов на зоны по источнику (локальная сеть / не локальная сеть) options { # описание разрешений для удалённого доступа утилиты rndc управления сервисом (в нашем случае запросы принимаются по адресу 127.0.0.1 на порту 953 от клиента с адресом 127.0.0.1 подтвердившего свою подлинность с помощью ключа). Может быть мы и не воспользуемся этим сервисом, так опишем для исключения несанкционированного доступа из-за неоднозначного толкования настроек "по умолчанию": logging { channel security_ch { category default { default_ch; }; Создаем или доводим имеющийся конфигурационный файл службы NS "/var/lib/named/etc/bind/named.conf" до следующего вида: include "/etc/bind/named.conf.options"; view "external-subnet" { zone "." { zone "localhost" { zone "127.in-addr.arpa" { # описание первичной зоны прямого разрешения имён для домена domain.name (применимо в конфигурации первичного NS) # описание вторичной зоны прямого разрешения имён для домена domain.name (применимо в конфигурации вторичного NS) # описание зоны обратного разрешения имён для "подсети" получаемой от провайдера (в нашем случае каждый NS получает свою "подсеть" от разных провайдеров, потому нет смысла её распространять на вторичные сервера). В примере провайдером делегируется нашему NS обратное разрешение адресов для "подсети" 88.204.202.240/29 }; view "internal-subnet" { zone "localhost" { zone "127.in-addr.arpa" { zone "0.in-addr.arpa" { zone "255.in-addr.arpa" { # описание первичной зоны прямого разрешения имён для домена domain.name (применимо в конфигурации первичного NS) # описание вторичной зоны прямого разрешения имён для домена domain.name (применимо в конфигурации вторичного NS) # описание первичной зоны обратного разрешения имён для поддерживаемой локальной сети (применимо в конфигурации первичного NS) # описание первичной зоны обратного разрешения имён для поддерживаемой локальной сети (применимо в конфигурации первичного NS) # описание вторичной зоны обратного разрешения имён для поддерживаемой локальной сети (применимо в конфигурации вторичного NS). Распространять зоны обратного разрешения имён в локальной сети имеет смысл, так как диапазон адресов локальной сети одинаков для всех NS # описание вторичной зоны обратного разрешения имён для поддерживаемой локальной сети (применимо в конфигурации вторичного NS). Распространять зоны обратного разрешения имён в локальной сети имеет смысл, так как диапазон адресов локальной сети одинаков для всех NS }; В конфигурационных файлах зон начало комментария обозначается символом точки с запятой ";". Никаких "#" или "//", только точка с запятой. После доменных имён, прописываемых в конфигурационных файлах зон обязательно ставится символ "." (например: "domain.name."). Немало минут, а то и часов, провели в раздражённом поиске неисправности люди, забывающие об этих особенностях построения конфигурационных файлов зон bind. Сочиняем конфигурационные файлы зон прямого отображения для наших доменов. Обобщённо, они должны строится по приведённому ниже шаблону: # cat /etc/bind/master/db.domain.name $TTL 3600 ; NS - Name Servers ; A - Address records ; MX - Mail eXchange records Где: 2009102801 - (Serial) - последовательность в виде даты с дополнением YYYYMMDDNN (где NN - это количество изменений файла зоны за один день), по которой сервера, извлекающие информацию из нашего NS, понимают, что запись зоны была изменена и обновлена; Мы существенно сокращаем временные промежутки обновления зон, по сравнению с рекомендуемыми в разного рода мануалах. Рекомендации может и хороши для стабильных и неизменных структур, а мы живем в изменчивом мире, где результата зачастую ждут не через сутки, а через пару часов. Псевдонимы (aliases in canonical name), описываемые с помощью записей "CNAME", мы не будем применять. Вполне допустимо прописывание двух доменных имён, таких как: domian.name и www.domain.name. Я считаю, что совсем ни к чему городить раздельные блоки в разных местах одного и того же конфигурационного файла для описания схожих сущностей, рискуя потерять над ними контроль из-за элементарной невнимательности при правке одного из блоков. Сочиняем конфигурационные файлы зон обратного отображения для диапазонов адресов локальных "подсетей". Обобщённо, они должны строится по приведённому шаблону: # cat /etc/bind/master/db.10.10.in-addr.arpa.local $TTL 3600 ; NS - Name Servers ; PTR Сочиняем конфигурационные файлы зон обратного отображения для диапазонов адресов выданных нам провайдером. Обобщённо, они должны строится по приведённому шаблону: # cat /etc/bind/master/db.240-29.202.204.88.in-addr.arpa $TTL 3600 ; NS - Name Servers ; PTR Стоит иметь в виду, что, в отличие от прямых зон, обратные описывают административную принадлежность хостов, но сами принадлежат оператору сети (как правило, провайдеру). Возникает особого рода затруднение, связанное с работой DNS-сервера уже не во внутренней сети, а в сети Интернет. Дело в том, что "подсети" класса C (так называемые сети /24, в которых сетевая маска занимает 24 (двадцать четыре) бита, а адрес компьютера — 8 (восемь)) выдаются только организациям, способным такую "подсеть" освоить. Чаще всего выдаются меньшие "подсети" — от /30 (на два абонентских адреса) до /27 (на 30 адресов) — или другие диапазоны, сетевая маска которых не выровнена по границе байта. Таких "подсетей" в обратной зоне получится несколько, а возможности просто разделить её, отдав часть адресов в администрирование хозяевам, нет. Грамотный провайдер в таких случаях пользуется RFC2317, предписывающем в обратной зоне заводить не записи вида PTR, а ссылки CNAME на адреса в “классифицированных” обратных зонах специального вида. Обратное преобразование становится двухступенчатым, зато администрирование каждой классифицированной зоны можно отдать хозяину. Опираясь на вышеописанные шаблоны строим описания наших зон, принимаем делегированные записи зон обратного разрешения имён, строим свои зоны обратного разрешения имён локальных сетей. Подправим флаги разрешений на право доступа к созданным нами директориям и файлам: # chown -R bind:bind /var/lib/named/etc/bind/* Проверяем корректность составления файлов конфигурации bind следующей командой (нужно бы выработать безусловный рефлекс на совершение этого действия после любого проникновения в конфигурационные файлы): # named-checkconf /var/lib/named/etc/bind/named.conf Проверяем корректность составления файлов конфигурации зоны bind следующей командой: # named-checkzone /var/lib/named/etc/bind/master/db.domain.name С учётом того, что мы сменили конфигурацию и ключевой файл утилиты rndc перезапустить службу named штатным скриптом не получится, "убиваем" службу nmaed вручную и запускаем её скриптом: # /bin/kill `cat /var/lib/named//var/run/bind/run/named.pid` Или, если мы только изменили записи зон: # /etc/init.d/bind9 reload Та же команда перезагрузки записей зон, только без скриптовой "обёртки", что было применёно выше: # /usr/sbin/rndc reload Проверяем лог файл /var/log/syslog на предмет наличия ошибок. Проведённая настройка сервера bind весьма поверхностная, список поддерживаемого функционала весьма богат и мы не использовали даже пятой части его настроек. ------------------------------------------------------------------------------------------------------------------- Заметки и комментарии к публикации: Анатолий • Ответить Нарожный Андрей • Ответить | |
Просмотров: 226 | |
Всего комментариев: 0 | |