BIND 9 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
wiki:bind9 [2014/11/02 11:05]
создано
wiki:bind9 [2016/06/01 19:24] (текущий)
[Настройка логгирования]
Строка 1: Строка 1:
-====== ​Bind9 ======+====== ​BIND 9 ====== 
 +<note tip>​Эта статья не закончена. Вы можете помочь проекту добавив следующую информацию:​ 
 +  * описание BIND 9 
 +  * ссылки на другие статьи и сайты посвященные BIND 9 
 +  * wiki-разметка 
 +</​note>​ 
 +В этой статье рассказывается как установить и настроить собственный кэширующий DNS-сервер BIND 9 с вымышленной зоной исключительно для локальной сети c последующим помещением его в "​песочницу"​ [[chroot]].
  
- Устанавливаем собственный ​кэширующий DNS сервер (bind 9) с вымышленной ​зоной исключительно для локальной сети. С последующим помещением его +===== Установка ===== 
-в "​песочницу" (chroot). (Нет ​купленного доменного имени, но есть статический ip).+<style float-left>​[[app>​bind9|BIND 9]]</​style>​ 
 +[[wiki:установка_программ|Установить]] BIND 9 можно перейдя по ссылке слева ​или введя в терминале следующую команду: 
 +<code bash>​sudo apt-get install bind9</​code>​
  
-УСТАНОВКА BIND 9 +===== Помещение ​BIND 9 в "песочницу" ===== 
- +  -- Останавите демон BIND 9 
-1. Устанавливаем Bind 9 +  ​.. ​<​code ​bash>/​etc/​init.d/​bind9 stop</​code>​ 
-<​code>​ ubuntu_server:​~#​ apt-get install bind9  +  ​.. ​Из соображений безопасности лучше запускать ​BIND в chroot среде, для этого проделайте несколько простых операций. 
-</​code>​ +  ​-- ​Отредактируйте файл ​///​etc/​init.d/​bind9//в него ​надо добавить строку в среде chroot которая будет находится в ///​var/​lib/​named//. Измените строку ​''​OPTIONS="​-u bind"'' ​на ''​OPTIONS="​-u bind -t /​var/​lib/​named"​''​ 
- +  ​.. ​<​code ​bash>​OPTIONS="​-u bind -t /​var/​lib/​named"​
-2. Если ​все установилось без ошибок то останавливаем его +
-<​code> ​ubuntu_server:​~# ​/​etc/​init.d/​bind9 stop +
-</​code>​ +
-Из соображений безопасности лучше запускать ​Bind в chroot среде, для этого +
-проделайте несколько простых операций. +
- +
-3. Отредактируйте файл /​etc/​init.d/​bind9, ​туда ​надо добавить строку в среде chroot +
-которая будет находится ​у нас ​в /​var/​lib/​named. +
-Измените строку OPTIONS="​-u bind" на OPTIONS="​-u bind -t /​var/​lib/​named"​ +
-<​code>​OPTIONS="​-u bind -t /​var/​lib/​named"​+
 # Set RESOLVCONF=no to not run resolvconf # Set RESOLVCONF=no to not run resolvconf
-RESOLVCONF=yes +RESOLVCONF=yes</​code>​ 
-</​code>​+  .. :!: Здесь важно то, что изменять надо файл в папке init.d, а не в папке default! Если не найдете в скрипте init.d, добавьте эти строки. 
 +  -- Создайте необходимые для работы BIND 9 директории. 
 +  .. <code bash>​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</​code>​ 
 +  -- Переместите директорию с конфигурацией BIND 9 из ///etc// в ///​var/​lib/​named/​etc//:​ 
 +  .. <code bash>mv /etc/bind /​var/​lib/​named/​etc</​code>​ 
 +  -- Создайте символическую ссылку на новую директорию с файлами конфигурации BIND на случай если в дальнейшем вы соберётесь обновить пакет, это поможет избежать проблем. 
 +  .. <code bash>ln -s /​var/​lib/​named/​etc/​bind /​etc/​bind</​code>​ 
 +  -- Создайте необходимые устройства и установите права на каталоги 
 +  .. <code bash>​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</​code>​
  
 +==== Настройка логгирования ====
 +Для того чтобы логирование событий работало из песочницы необходимо изменить стартовый скрипт демона ''​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 перезапустите демон:
 +<code bash>/​etc/​init.d/​sysklogd restart</​code>​
 +<note important>​В зависимости от дистрибутива,​ такой службы может и не быть. Появилась служба более глобального масштаба – rsyslog объединяющая две службы syslogd и klogd. Поэтому надо идти в папку /​etc/​rsyslog.d и создать там файл bind-chroot.conf (владелец root, прав достаточно будет 640).
 +<code bash>​touch /​etc/​rsyslog.d/​bind-chroot.conf
 +chown root:root /​etc/​rsyslog.d/​bind-chroot.conf
 +chmod 640 /​etc/​rsyslog.d/​bind-chroot.conf</​code>​
 +Для того, чтобы BIND 9 помещенный в chroot сумел найти системный лог добавьте в созданный файл ///​etc/​rsyslog.d/​bind-chroot.conf//​ только одну строчку:​
 +<​code>​$AddUnixListenSocket /​var/​lib/​named/​dev/​log</​code>​
 +</​note>​
 +Также необходимо создать папку ///​var/​lib/​named/​var/​log//​ для последующего хранения файла с логами:​
 +<code bash>​mkdir /​var/​lib/​named/​var/​log
 +chown root:root /​var/​lib/​named/​var/​log
 +chmod 755 /​var/​lib/​named/​var/​log</​code>​
  
 +===== Настройка BIND 9 =====
 +1. I этап - настройка зон – создаем отдельный файл конфигураций для наших зон ( в данном случае у нас будет одна зона описывающая несуществующий домен .ex):
 +<code bash>​touch /​var/​lib/​named/​etc/​bind/​myzones.conf
 +chown bind:bind /​var/​lib/​named/​etc/​bind/​myzones.conf</​code>​
 +2. Теперь отредактируем файл конфигурации нашей зоны .ex (имя вашего домена) ///​var/​lib/​named/​etc/​bind/​myzones.conf//​ добавив следующее (.ex - имя вашего домена)
 +<​code>​zone "​ex."​ {
 +     type master;
 +     file "/​etc/​bind/​db.ex";​
 +};</​code>​
 +В данном случаем мы специально создаем «несуществующую зону», так как настраиваем BIND для локальной сети – основная задача настроить кэширующий ДНС с возможностью обработки локальных имен/​адресов (посредством создания зоны .ex и прямой и обратной зоны для локальной сети 192.168.1.0/​24)
  
 +3. Теперь создадим файл зоны (прямой) для локальной сети
 +<code bash>​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</​code>​
 +и заполните файл как показано ниже
 +<​code>​
 +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 ; адрес вашего сервера в вашей сети
 +</​code>​
 +<note important>​Обратите внимание на так называемый серийный номер зоны(serial). Дело в том, что сервер имён не использует конфигурации с тем же серийным номером или младше чем был указан. Поэтому,​ всякий раз, когда Вы вносите исправления в любой из файлов зон, - обязательно "​увеличивайте"​ этот номер на какое то значение. Я делаю так: за первую часть - беру дату последнего редактирования файла в фомате (YYYYMMDD)+ сколько раз редактировался этот файл в этот день (01,​02,​03,​04...) best practice так сказать!</​note>​
 +4. Теперь создадим файл обратной зоны для локальной сети local.rev
 +<code bash>​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 </​code>​
 +и заполните его:
 +<​code>​
 +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.
 +</​code>​
 +5.Редактируем файл /​var/​lib/​named/​etc/​bind/​named.conf.options
 +<code bash>​nano /​var/​lib/​named/​etc/​bind/​named.conf.options</​code>​
 +и впишите туда несколько опций усложняющих жизнь хакерам и отключим поддержку IPv6: 
 +<​code>​
 +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
 +</​code>​
 +6. Напоследок отредактируем файл /​var/​lib/​named/​etc/​named.conf
 +<code bash>​nano /​var/​lib/​named/​etc/​bind/​named.conf</​code>​
 +во первых включим в конце в конец файла наш файл зон
 +<​code>​1 ​ include "/​etc/​bind/​myzones.conf";</​code>​
 +В начале файла, до включения файла с опциями (named.conf.options),​ создадим список acl для указания,​ что будет обслуживать наш сервер BIND, указав нашу подсеть,​ обратную петлю и оба ДНС провайдера
 +<​code>​
 +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  };
 +</​code>​
 +Для возможности работы передачи зоны с подписью TSIG включаем rndc.key и указываем кто сможет управлять нашим сервером и по какому порту controls
 +<​code>​
 +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  };
 +</​code>​
 +И в конце файла добавляем настройку обратной зоны для локальной сети ​
 +<​code>​
 +1  zone "​1.168.192.in-addr.arpa"​ {
 +2          type master;
 +3          file "/​etc/​bind/​local.rev";​
 +4  };
 +</​code>​
 +и подключаем файл с нашей зоной myzones.conf
 +<​code>​1 ​ include "/​etc/​bind/​myzones.conf";</​code>​
 +Для того, чтобы логи собирались в отдельный файл named.log, и не "​сорили"​ в системные файлы – создадим в нашей "​песочнице"​ (в папке, созданной ранее /​var/​lib/​named/​var/​log),​ файл для логов и сделаем символическую ссылку в обычную папку log: 
 +<​code>​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</​code>​
 +И добавим в файл конфигурации в самый конец детальную настройку работы логов:
 +<​code>​
 +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  };
 +</​code>​
 +7. В итоге, если убрать комментарии и свести все воедино файл named.conf приобретет такой вид:
 +<​code>​
 +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;
 +                };
 +};
 +</​code>​
  
 +<note important>​Заметьте,​ что по умолчанию обратная зона в стандартной установке отключена и два файла конфигурации просто не задействованы:​ db.empty и zones.rfc1918 - с учетом того, что поддержка отключена в файле named.conf.local:</​note>​
 +<​code>​
 +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";​
 +</​code>​
 +<note important>​Смело можно удалить все три этих файла, а из файла конфигурации named.conf, удалить в самом конце включение файла named.conf.local. Мы ведь уже создали свои файлы зон (прямую и обратную) для обслуживания локальной сети</​note>​
 +
 +8.Изменим файл /​etc/​resolv.conf,​ вписав туда свой домен первой строкой,​ в нашем случае это
 +<​code>​
 +1  search ex
 +</​code>​
 +9. Перезапускаем bind9 и перечитываем файлы зон
 +<code bash>/​etc/​init.d/​bind9 restart
 +rndc reload</​code>​
 +У меня оказалось,​ что утилита nslookup и dig не установлена – пришлось поставить пакеты hosts и dnsutils командой
 +<code bash>​apt-get install host dnsutils</​code>​
 +10. И проверка на сервере:​
 +<code bash>​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</​code>​
  
 +===== Ссылки =====
 +  * [[http://​demon.of.by/​blog/​linux-admin/​how-to-configure-bind9-debian/​|ретроспектива - 2009 год]]
 +  * [[http://​forum.ubuntu.ru/​index.php?​topic=254002.msg2008320#​msg2008320|Обсуждение статьи на форуме]]
 +  * FIXME
  
 +{{tag> Администрирование FIXME bind9 dns nameserver}}