Содержание
- описание BIND 9
- ссылки на другие статьи и сайты посвященные BIND 9
- wiki-разметка
В этой статье рассказывается как установить и настроить собственный кэширующий DNS-сервер BIND 9 с вымышленной зоной исключительно для локальной сети c последующим помещением его в «песочницу» chroot.
Установка
Установить BIND 9 можно перейдя по ссылке слева или введя в терминале следующую команду:
sudo apt-get install bind9
Помещение BIND 9 в "песочницу"
Останавите демон BIND 9
/etc/init.d/bind9 stop
Из соображений безопасности лучше запускать BIND в chroot среде, для этого проделайте несколько простых операций.
Отредактируйте файл /etc/init.d/bind9, в него надо добавить строку в среде chroot которая будет находится в /var/lib/named. Измените строку
OPTIONS=«-u bind»
наOPTIONS=«-u bind -t /var/lib/named»
OPTIONS="-u bind -t /var/lib/named" # Set RESOLVCONF=no to not run resolvconf RESOLVCONF=yes
Здесь важно то, что изменять надо файл в папке init.d, а не в папке default! Если не найдете в скрипте init.d, добавьте эти строки.
Создайте необходимые для работы BIND 9 директории.
mkdir -p /var/lib/named/etc mkdir /var/lib/named/dev mkdir -p /var/lib/named/var/cache/bind mkdir -p /var/lib/named/var/run/bind/run
Переместите директорию с конфигурацией BIND 9 из /etc в /var/lib/named/etc:
mv /etc/bind /var/lib/named/etc
Создайте символическую ссылку на новую директорию с файлами конфигурации BIND на случай если в дальнейшем вы соберётесь обновить пакет, это поможет избежать проблем.
ln -s /var/lib/named/etc/bind /etc/bind
Создайте необходимые устройства и установите права на каталоги
mknod /var/lib/named/dev/null c 1 3 mknod /var/lib/named/dev/random c 1 8 chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random chown -R bind:bind /var/lib/named/var/* chown -R bind:bind /var/lib/named/etc/bind
Настройка логгирования
Для того чтобы логирование событий работало из песочницы необходимо изменить стартовый скрипт демона sysklogd
для того, чтобы сообщения BIND 9 попадали в syslog. Отредактируйте файл /etc/default/sysklogd, измените там строку SYSLOGD=«»
на SYSLOGD=«-u syslog -a /var/lib/named/dev/log»
. Опять же очень многие пытаются найти сточку SYSLOGD=«» в файле /etc/init.d/sysklogd а её там нет и быть не должно – смотреть надо в директории /etc/default/sysklogd. Иногда sysklogd ругается на опцию «-u», тогда укажите SYSLOGD=«-a /var/lib/named/dev/log».
После изменения настроек syslog перезапустите демон:
/etc/init.d/sysklogd restart
touch /etc/rsyslog.d/bind-chroot.conf chown root:root /etc/rsyslog.d/bind-chroot.conf chmod 640 /etc/rsyslog.d/bind-chroot.conf
Для того, чтобы BIND 9 помещенный в chroot сумел найти системный лог добавьте в созданный файл /etc/rsyslog.d/bind-chroot.conf только одну строчку:
$AddUnixListenSocket /var/lib/named/dev/log
Также необходимо создать папку /var/lib/named/var/log для последующего хранения файла с логами:
mkdir /var/lib/named/var/log chown root:root /var/lib/named/var/log chmod 755 /var/lib/named/var/log
Настройка BIND 9
1. I этап - настройка зон – создаем отдельный файл конфигураций для наших зон ( в данном случае у нас будет одна зона описывающая несуществующий домен .ex):
touch /var/lib/named/etc/bind/myzones.conf chown bind:bind /var/lib/named/etc/bind/myzones.conf
2. Теперь отредактируем файл конфигурации нашей зоны .ex (имя вашего домена) /var/lib/named/etc/bind/myzones.conf добавив следующее (.ex - имя вашего домена)
zone "ex." { type master; file "/etc/bind/db.ex"; };
В данном случаем мы специально создаем «несуществующую зону», так как настраиваем BIND для локальной сети – основная задача настроить кэширующий ДНС с возможностью обработки локальных имен/адресов (посредством создания зоны .ex и прямой и обратной зоны для локальной сети 192.168.1.0/24)
3. Теперь создадим файл зоны (прямой) для локальной сети
touch /var/lib/named/etc/bind/db.ex chown bind:bind /var/lib/named/etc/bind/db.ex nano /var/lib/named/etc/bind/db.ex
и заполните файл как показано ниже
1 $TTL 86400 ; 1 day 2 @ IN SOA ex. root.ex. ( 3 2014110201 ; serial 4 10800 ; refresh (3 hours) 5 900 ; retry (15 minutes) 6 604800 ; expire (1 week) 7 86400 ; minimum (1 day) 8 ) 9 @ IN NS ns.ex. 10 11 ns A 127.0.0.1 12 server A 192.168.1.1 ; адрес вашего сервера в вашей сети
4. Теперь создадим файл обратной зоны для локальной сети local.rev
touch /var/lib/named/etc/bind/local.rev chown bind:bind /var/lib/named/etc/bind/local.rev nano /var/lib/named/etc/bind/local.rev
и заполните его:
1 $TTL 604800 2 @ IN SOA ex. root.ex. ( 3 2014110201 ; Serial 4 604800 ; Refresh 5 86400 ; Retry 6 2419200 ; Expire 7 604800 ) ; Negative Cache TTL 8 ; 9 @ IN NS localhost. 10 1 PTR server.ex.
5.Редактируем файл /var/lib/named/etc/bind/named.conf.options
nano /var/lib/named/etc/bind/named.conf.options
и впишите туда несколько опций усложняющих жизнь хакерам и отключим поддержку IPv6:
1 version "My DNS v.UnKnown"; 2 allow-recursion {"homenet";}; 3 allow-query {any;}; 4 //auth-nxdomain no; # conform to RFC1035 - закомментируем 5 listen-on-v6 { none; }; # отключим поддержку IPv6
6. Напоследок отредактируем файл /var/lib/named/etc/named.conf
nano /var/lib/named/etc/bind/named.conf
во первых включим в конце в конец файла наш файл зон
1 include "/etc/bind/myzones.conf";
В начале файла, до включения файла с опциями (named.conf.options), создадим список acl для указания, что будет обслуживать наш сервер BIND, указав нашу подсеть, обратную петлю и оба ДНС провайдера
1 acl homenet { 2 192.168.1.0/24; 3 127.0.0.1; 4 8.8.8.8; 5 8.8.4.4; 6 };
Для возможности работы передачи зоны с подписью TSIG включаем rndc.key и указываем кто сможет управлять нашим сервером и по какому порту controls
1 include "/etc/bind/rndc.key"; 2 controls { 3 inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;}; 4 };
И в конце файла добавляем настройку обратной зоны для локальной сети
1 zone "1.168.192.in-addr.arpa" { 2 type master; 3 file "/etc/bind/local.rev"; 4 };
и подключаем файл с нашей зоной myzones.conf
1 include "/etc/bind/myzones.conf";
Для того, чтобы логи собирались в отдельный файл named.log, и не «сорили» в системные файлы – создадим в нашей «песочнице» (в папке, созданной ранее /var/lib/named/var/log), файл для логов и сделаем символическую ссылку в обычную папку log:
touch /var/lib/named/var/log/named.log chown bind:bind /var/lib/named/var/log/named.log chmod 666 /var/lib/named/var/log/named.log ln -s /var/lib/named/var/log/named.log /var/log/bind.log
И добавим в файл конфигурации в самый конец детальную настройку работы логов:
1 logging { 2 channel myfile { 3 file "/var/log/named.log" versions 10 size 1m; 4 severity dynamic; 5 print-category yes; 6 print-severity yes; 7 print-time yes; 8 }; 9 category config { 10 myfile; 11 }; 12 category default { 13 myfile; 14 }; 15 category queries { 16 myfile; 17 }; 18 // Вот LAME сервера лучше сразу сбрасывать в null. Достают они ну просто 19 // катастрофически! (Для тех кто в танке, - это когда сервер не обслуживает 20 // делегированную ему зону) 21 category lame-servers { 22 null; 23 }; 24 };
7. В итоге, если убрать комментарии и свести все воедино файл named.conf приобретет такой вид:
acl homenet { 192.168.1.0/24; 127.0.0.1; 82.209.240.241; 82.209.243.241; }; include "/etc/bind/named.conf.options"; include "/etc/bind/rndc.key"; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;}; }; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/local.rev"; }; include "/etc/bind/myzones.conf"; logging { channel myfile { file "/var/log/named.log" versions 10 size 1m; severity dynamic; print-category yes; print-severity yes; print-time yes; }; category config { myfile; }; category default { myfile; }; category queries { myfile; }; category lame-servers { null; }; };
1 // Do any local configuration here 2 // Consider adding the 1918 zones here, if they are not used in your 3 // organization 4 // include "/etc/bind/zones.rfc1918";
8.Изменим файл /etc/resolv.conf, вписав туда свой домен первой строкой, в нашем случае это
1 search ex
9. Перезапускаем bind9 и перечитываем файлы зон
/etc/init.d/bind9 restart rndc reload
У меня оказалось, что утилита nslookup и dig не установлена – пришлось поставить пакеты hosts и dnsutils командой
apt-get install host dnsutils
10. И проверка на сервере:
nslookup > set q=any > localhost Server: 82.209.240.241 Address: 82.209.240.241#53 localhost origin = localhost mail addr = root.localhost serial = 1 refresh = 604800 retry = 86400 expire = 2419200 minimum = 604800 localhost nameserver = localhost. Name: localhost Address: 127.0.0.1 > 127.0.0.1 Server: 82.209.240.241 Address: 82.209.240.241#53 1.0.0.127.in-addr.arpa name = localhost. > ya.ru Server: 82.209.240.241 Address: 82.209.240.241#53 Non-authoritative answer: ya.ru mail exchanger = 10 mx1.yandex.ru. ya.ru mail exchanger = 10 mx2.yandex.ru. Name: ya.ru Address: 213.180.204.8 ya.ru nameserver = ns5.yandex.ru. Authoritative answers can be found from: ya.ru nameserver = ns1.yandex.ru. ya.ru nameserver = ns5.yandex.ru. mx1.yandex.ru internet address = 77.88.21.89