Настройка DNS-сервера bind9 в Debian/Astra Linux
Цели
- Настройка основного сервера DNS для маленькой локальной сети
- Сервер должен быть безопасным
- Сервер должен хранить настройки для конфигурации данной сети
- Сервер должен обслуживать доменную зону
home.net
с адресами в подсети192.168.0/24
Как обычно, если не указано иное, команды выполняются от имени пользователя root
.
Исходные данные
Доменная зона | home.net |
Подсеть | 192.168.0/24 |
Имя основного сервера | dc.home.net |
IP-адрес сервера имен | 192.168.0.1 |
Имя первого хоста | arm01.home.net |
IP-адрес первого хоста | 192.168.0.101 |
Имя N-го хоста | armN.home.net |
IP-адрес N-го хоста | 192.168.0.(100+N) |
Установка сервера
apt-get install bind9 -y
Сервер установлен, но установка сделана не безопасным способом. Нужно выполнить несколько дополнительных действий, описанных подробнее в Debian Wiki - Bind.
Будем запускать сервер в изолированном окружении:
mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/named}
mknod /var/bind9/chroot/dev/null c 1 3
mknod /var/bind9/chroot/dev/random c 1 8
chmod 660 /var/bind9/chroot/dev/{null,random}
mv /etc/bind /var/bind9/chroot/etc
ln -s /var/bind9/chroot/etc/bind /etc/bind
chown bind:bind /var/bind9/chroot/etc/bind/rndc.key
chmod 775 /var/bind9/chroot/var/{cache/bind,run/named}
chgrp bind /var/bind9/chroot/var/{cache/bind,run/named}
Теперь нужно изменить расположение PIDFILE. Для этого в файле /etc/init.d/bind9
нужно переопределить переменную PIDFILE
.
PIDFILE=/var/bind9/chroot/var/run/named/named.pid
Чтобы сервер понимал, что его запускают в изолированном окружении, нужно изменить параметры его запуска, внеся небольшие коррективы в файл /etc/default/bind9
OPTIONS="-u bind -t /var/bind9/chroot"
Перенастроим логирование rsyslog
echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf
Настройка опций сервера
Безопасность
Основные настройки сервера хранятся в файле /etc/bind/named.conf.options
(на самом деле сейчас это всего лишь символическая ссылка, но на суть дела это не влияет). Добавим пару параметров для пущей безопасности в разделе options
:
options {
...
version none; // Скроем версию bind
allow-query {
192.168.0/24; // Отвечать будем только на запросы, приходящие из внутренней сети
};
...
}
Включение в конфигурацию новой доменной зоны
В файле /etc/bind/named.conf.default-zones
добавим указание на файлы прямой и обратной зоны, чтобы сервер мог обслуживать локальную сеть:
...
zone "home.net" in { // Локальная сеть
type master;
file "/etc/bind/db.home.net"; // В этом файле будут адреса прямой зоны
};
zone "0.168.192.in-addr.arpa" { // Так описывается обратная зона, т. е. первые три октета
// записываются в обратном порядке и добавляется .in-addr.arpa
type master;
file "/etc/bind/db.0.168.192"; // В этом файле будут адреса обратной зоны
};
Прямая доменная зона
Ниже просто приведу содержимое файла /etc/bind/db.home.net
.
$TTL 3h
@ IN SOA dc.home.net. administrator.home.net. (
; Вместо @ будет подставлено автоматически имя зоны из файла /etc/bind/named.conf.default-zones
2017092701 ; Это число нужно менять каждый раз при изменении этого файла
; Очень удобно взять текущее число и добавить ещё пару цифр для указания ревизии
3h ;
1h ;
1w ;
1h
)
IN NS dc.home.net. ; Указываем имя основного DNS-сервера, обслуживающего зону
; Наличие пробела или табуляции в начале строки и точки
; после .net обязательно
dc IN A 192.168.0.1 ; IP-адрес сервера имен
imap IN CNAME dc ; Указываем, что наш DNS-сервер так же отзывается на imap.home.net
smtp IN CNAME dc ; и smtp.home.net
arm01 IN A 192.168.0.101
arm02 IN A 192.168.0.102
arm03 IN A 192.168.0.103
arm04 IN A 192.168.0.104
arm05 IN A 192.168.0.105
arm06 IN A 192.168.0.106
arm07 IN A 192.168.0.107
arm08 IN A 192.168.0.108
arm09 IN A 192.168.0.109
arm10 IN A 192.168.0.110
Обратная зона
Создадим файл, на который ссылается обратная зона, и заполним его по образцу:
$TTL 3h
@ IN SOA dc.home.net. administrator.home.net. (
2017092701 ; Это число тоже нужно менять
3h ;
1h ;
1w ;
1h
)
IN NS dc.home.net.
1 IN PTR dc.home.net. ; Наш сервер
101 IN PTR arm01.home.net.
102 IN PTR arm02.home.net.
103 IN PTR arm03.home.net.
104 IN PTR arm04.home.net.
105 IN PTR arm05.home.net.
106 IN PTR arm06.home.net.
107 IN PTR arm07.home.net.
108 IN PTR arm08.home.net.
109 IN PTR arm09.home.net.
110 IN PTR arm10.home.net.
Запуск сервера и проверка работоспособности
Если всё сделано правильно, точки расставлены и IP-адреса указаны верно, можно попробовать запустить наш сервер:
service bind9 start
Если вместо кучи ошибок сервер просто написал, что всё хорошо, можно проверить разрешение имен:
host arm01.home.net
host 192.168.0.9
В обоих случаях сервер должен вернуть информацию о том, на что указывает доменное имя или IP-адрес. Если вместо этого он выдает сообщение об ошибке, самое время проверить корректность конфигурационных файлов. Это делается вызовом следующих несложных команд:
named-checkconf /etc/bind/named.conf
named-checkzone home.net /etc/bind/db.home.net
named-checkzone 192.168.0 /etc/bind/db.0.168.192
Данные утилиты из состава пакета bind9utils
укажут на ошибки в конфигурационных файлах.
Клиенты
Существует несколько способов настроить обращение к DNS-серверу на клиентских машинах. По скольку речь идет об операционной системе для социальной группы 'siloviki', выбор инструментальных средств невелик - wicd
, /etc/network/interfaces
и /etc/resolv.conf
.
Первый способ отметаем сразу же, поскольку с wicd довольно много проблем. Не буду останавливаться на них подробно, но обычно первое, что приходится делать на свежеустановленной системе - убрать его из автозагрузки:
service wicd stop
chkconfig wicd off
Можно указать DNS-сервер в настройках сетевых интерфейсов, однако, в этом случае их нужно прописывать для каждого сетевого интерфейса, а я не люблю повторяться. В связи с этим просто откорректируем файл /etc/resolv.conf
на клиентских машинах:
domain home.net
search home.net
nameserver 192.168.0.1
Работа в ненулевых мандатных режимах
В данном дистрибутиве реализована мандатная модель разграничения доступа, в том числе к сетевым сервисам. Чтобы обеспечить корректную работу демона named
в режимах с мандатной меткой, отличной от нулевой, нужно добавить всего одну строчку в файл /etc/parsec/privsock.conf
:
/usr/sbin/named
А как быть с созданием отдельных логов? как тут описано
ОтветитьУдалитьhttps://wiki.debian.org/Bind9#Installation
Решение нашел, нужно добавить в конце /etc/apparmor.d/usr.sbin.named
ОтветитьУдалить#chroot
/var/bind9/chroot/etc/bind/** r,
/var/bind9/chroot/var/cache/bind/ rw,
/var/bind9/chroot/var/cache/bind/** rw,
/var/bind9/chroot/var/run/named.pid w,
/var/bind9/chroot/var/run/named/named.options r,
/var/bind9/chroot/var/log/** rw,
/var/bind9/chroot/dev/** r,
/var/bind9/chroot/dev/log w,
и перезапустить службу
service apparmor restart
service bind9 restart
Но есть ошибка
named[3628]: could not open entropy source /dev/urandom: file not found
named[3628]: using pre-chroot entropy source /dev/urandom