Debian, Dojo, Django, Python

Делюсь опытом в описанных технологиях. Блог в первую очередь выполняет роль памяток для меня самого.

Настройка DNS-сервера bind9 в Debian/Astra Linux

2 комментария

Цели

  • Настройка основного сервера 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.

/etc/init.d/bind9
PIDFILE=/var/bind9/chroot/var/run/named/named.pid

Чтобы сервер понимал, что его запускают в изолированном окружении, нужно изменить параметры его запуска, внеся небольшие коррективы в файл /etc/default/bind9

/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:

/etc/bind/named.conf.options
options {
    ...
    version none; // Скроем версию bind
    allow-query {
        192.168.0/24; // Отвечать будем только на запросы, приходящие из внутренней сети
    };
    ...
}

Включение в конфигурацию новой доменной зоны

В файле /etc/bind/named.conf.default-zones добавим указание на файлы прямой и обратной зоны, чтобы сервер мог обслуживать локальную сеть:

/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.

/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

Обратная зона

Создадим файл, на который ссылается обратная зона, и заполним его по образцу:

/etc/bind/db.0.168.192
$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

2 комментария :

Отправить комментарий