Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
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}} |