Skip to main content

Настройка DNS-сервера BIND

Апрель 16, 2010 Автор: Hikaru

Команды:
named -v Выводит версию BIND
named-checkconf Проверяет named.conf на наличие ошибок
named-checkzone example.com db.example.com Проверяет файлы зоны на ошибки.
rndc reload Перезагрузка DNS-сервера
dig @a.root-servers.net . ns > named.ca Получене списка корневх серверов

Работа с dig:
dig yandex.ru Поиск адреса
dig yandex.ru mx Поиск МХ-записи
dig @208.67.222.222 yandex.ru soa Запрос у ДНС-сервера SOA-записи для yandex.ru

Записи:
Файл для преобразования имён узлов в адреса назовём db.domain (например db.example.com)
Файл для преобразования адресов в имена узлов назовём db.addr (например db.192.168.1)
Создаём в папке /etc/bind/ следующие файлы:
Первичный ДНС-сервер: (Master)
db.example.com

$TTL 3h
example.com. IN SOA hikaru.example.com. al.example.com. (
1 ; Порядковый номер
3h ; Обновление через 3 часа
1h ; Повторение попытки через 1 час
1w ; Устаревание через 1 неделю
1h ) ; Отрицательное TTL 1 час
; Согласно RFC 1537 cтоит использовать следующие параметры для DNS-серверов высшего уровня:
; Обновление 24 часа
; Повторение попытки 2 часа
; Устаревание 30 дней
; Стандартное TTL 4 дняш
;
; Сервера имён
example.com. IN NS hikaru.example.com. #1й DNS-сервер зоны
example.com. IN NS midori.example.com. #2й DNS-сервер зоны
;
; Записи для почты (FQDN и есть A-запесь, на Hikaru ещё и почтовый сервер)
example.com. IN MX 10 hikaru.example.com.
;
; Адреса узлов
localhost.example.com. IN A 127.0.0.1
hikaru.example.com. IN A 192.168.1.2
suigintou.example.com IN A 192.168.1.3
rayne.example.com IN A 192.168.1.3
;
; Псевдонимы
hikki.example.com. IN CNAME hikaru.example.com.
mi4.example.com. IN A 192.168.1.1

# IN - internet
# Первое имя после SOA - имя первичного DNS-сервера зоны example.com
# Второе имя - адрес электронной почты, управляющего зоной, для использования этого адреса необходимо заменить 1ую «.» на «@».
# NS Запись о DNS-серверах
# A Адресс
# hikki1, hikki15 создаются для возможности проверки сетевых интерфейсов
# MX - mail exchanger

db.192.168.4

$TTL 3h
1.168.192.in-addr.arpa. IN SOA hikaru.example.com. al.example.com (
1 ; Порядковый номер
3h ; Обновление через 3 часа
1h ; Повторение попытки через 1 час
1w ; Устаревание через 1 неделю
1h ) ; Отрицательное TTL 1 час
1.168.192.in-addr.arpa. IN NS hikaru.example.com.
1.168.192.in-addr.arpa. IN NS midori.example.com
;
; Адреса указывающие на канонические имена
2.1.168.192.in-addr.arpa. IN PTR hikaru.example.com.
3.168.192.in-addr.arpa. IN PTR suigintou.example.com.
4.168.192.in-addr.arpa. IN PTR rayne.example.com.

named.conf.local (в Red Hat 1 общий файл конфигурации named.conf)

zone «example.com» in {
type master;
file «/etc/bind/db.example.com»;
};
zone «1.168.192.in-addr.arpa» in {
type master;
file «/etc/bind/db.192.168.1»;
}»

Вторичный DNS-сервер (Slave):
Необходимо скопировать на вторичный DNS-сервер named.conf.local, привести его к виду:
named.conf.local (в Red Hat 1 общий файл конфигурации named.conf)

zone «example.com» in {
type slave;
file «bak.db.example.com»;
masters { 192.168.1.1; };
};
zone «1.168.192.in-addr.arpa» in {
type slave;
file «bak.db.192.168.1»;
masters { 192.168.1.1; };
}»

Защита сервера BIND:
Скрываем версию сервера
dig txt chaos version.bind. Даст версию используемого DNS сервера BIND
Для избежания этого необходимо добавить в файл конфигурации следующую запись (/etc/bind/named.conf.options):

options {
directory «/var/cache/bind»;
version none;
};

Ограничение запросов.
Для того, чтобы сервер отвечал только из 2х локальных сетей необходимо добавить следующую строку:

options {
directory «/var/cache/bind»;
allow-querry {192.168.1./24; 192.168.0/24; };
};

Ограничение запросов для зоны:

acl «our_networks» {192.168.1/24; 192.168.0/24; };
zone «example.com» in {
type slave;
file «bak.db.example.com»;
masters { 192.168.1.1; };
allow-querry { ««our_networks»; };
};
zone «1.168.192.in-addr.arpa» in {
type slave;
file «bak.db.192.168.1»;
masters { 192.168.1.1; };
allow-querry { ««our_networks»; };
}»

Предотвращение несанкционированной передачи зоны:

Разрешает получение зоны только c первичного мастера зоны

zone «example.com» in {
type master;
file «db.example.com»;
allow-transfer { 192.168.1/24; 192.168.0/24; };
};

Во вторичных серверах необходимо добавить следующую строку:

zone «example.com» in {
type slave;
file «bak.db.example.com»;
masters { 192.168.1.1; };
allow-transfer { none; };
};
zone «1.168.192.in-addr.arpa» in {
type slave;
file «bak.db.192.168.1»;
masters { 192.168.1.1; };
allow-transfer { none; };
}»

Так же можно прописать это правило «глобально»:

options {
directory «/var/cache/bind»;
allow-transfer { 192.168.1/24; 192.168.0/24; };
};

Можно настроить передачу данных зоны на основе ключа, для этого необходимо:
Создать ключ командой

dnssec-keygen -a HMAC-MD5 -b 128 -n HOST midori-hikaru.example.com.

Полчуим 2 файла:

*.key
*.private

Оба содержат одно и то же хэш-значение, необходимо распространить их на все наши DNS-сервера (при этом не скомпроментировав их - например через ssh).

Отредактировать файл конфигурации первичного DNS-сервера:

key midori-hikaru. {
algorithm hmac-md5;
secret «QssdvcytsllfppDzaa=»;
};

zone «example.com» in {
type master;
file «db.example.com»;
allow-transfer { key midori-hikaru.; };
};
zone «1.168.192.in-addr.arpa» in {
type master;
file «db.192.168.1»;
allow-transfer { key midori-hikaru.; };
}»

Отредактировать файл конфигурации дополнительного DNS-сервера

key midori-hikaru. {
algorithm hmac-md5;
secret «QssdvcytsllfppDzaa=»;
};

server 192.168.1.1 {
keys { midori-hikaru.; };
};

zone «example.com» in {
type slave;
file «bak.db.example.com»;
masters { 192.168.1.1; };
};
zone «1.168.192.in-addr.arpa» in {
type slave;
file «bak.db.192.168.1»;
masters { 192.168.1.1; };
}»

Запуск BIND с минимальными привелегиями:
Для Debian:
1) Создать /var/named и подкаталоги dev, etc, lib, usr, var

mkdir /var/named
cd /var/named
mkdir -p dev etc/bind lib usr/sbin var/named var/cache/bind var/run/bind/run

2) Скопировать named.conf named.conf.options named.conf.local в /var/named/etc/bind

cp /etc/bind/* etc/bind
chown root.bind etc/bind
cd etc/bind
chown root.bind db.127.0.0 db.192.168.4 db.cahce db.example.com index.html named.conf \ named.conf.local named.conf.options

chown root.bind var/cache/bind
chmod g+w var/cache/bind

mkdir -p var/run/bind/run
chown root.bind var/run/bind/run
chmod g+w var/run/bind/run

3) Создаём dev/null
mknod dev/null c 2 2

4) Добавляем в /etc/defaul/bind9 опцию -t /var/named

5) Перезапускаем серевер /etc/init.d/bind9 restart

Для Red Hat:
yum install bind-chroot -y Устанавливаем необходимый пакет для создания chroot
Редактируем файл /etc/syconfig/named и добавляем туда строку:

ROOTDIR="/var/named/chroot"

Перезапускаем сервер service named restart

«Рекламирующий» DNS-сервер:
Отвечает ТОЛЬКО на нерекурсивные запросы. Задача сообщать информацию о зонах в интернет. Необходимо убедится, что нет клиентов настроенных на этот сервер и сервер не используется как ретранслирующий.

options {
recursion no;
};

«Разрешающий» DNS-сервер:
Выполняет рекурсивные запросы.

acl «internal» {
192.168.1/24; 192.168.0/24;
};
options {
allow-recursion { «internal»; };
};

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