Источник
Все в порядке, сервер запустился, необходимые файлы созданы, все готово для настройки. Займемся ей.
Дальше необходимо указать категорию логов и в какой канал мы будем ее записывать:
Таким образом, чтобы вывести все категории логов в отдельные файлы, необходимо в конфиг named добавить следующую конструкцию:
Все файлы журнала созданы и начали наполняться. Можно проверить один из них. Например, посмотрим, как наш сервер centos (192.168.7.246) логирует запросы пользователей. Попробуем с компьютера 192.168.7.254 (windows) выполнить nslookup yandex.ru и посмотрим как это отразится в лог файле:
Смотрим, что в логах:
Устанавливаем Bind 9 (named) в CentOS 7
Первым делом проверим, установлен ли у нас днс сервер в системе:# rpm -qa bind* bind-libs-lite-9.9.4-14.el7.x86_64 bind-license-9.9.4-14.el7.noarch
У меня не установлен, так как во время инсталляции centos выбрал
минимальный пакет программ. Сервер имен у нас будет работать в chroot
окружении, так что устанавливаем соответствующие пакеты:
# yum -y install bind bind-utils bind-chroot
Еще раз обращаю внимание, что мы будем использовать bind в chroot
среде для увеличения безопасности. Это накладывает определенные
особенности в настройке и управлении сервером. Нужно быть внимательным в
этих мелочах. Итак, запускаем bind:
# systemctl start named-chroot # systemctl enable named-chroot ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'Проверяем содержимое chroot каталога:
# ls -l /var/named/chroot/etc
Все в порядке, сервер запустился, необходимые файлы созданы, все готово для настройки. Займемся ей.
Настраиваем DNS сервер в CentOS 7
Файл конфигурации нашего сервера располагается по адресу /var/named/chroot/etc/named.conf. Открываем его и приводим к следующему виду:# mcedit /var/named/chroot/etc/named.conf
options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; allow-query { 127.0.0.1; 192.168.7.0/24; }; recursion yes; allow-recursion { 127.0.0.1; 192.168.7.0/24; }; forwarders { 8.8.8.8; }; version "DNS Server"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; logging { channel default_file { file "/var/log/named/default.log" versions 3 size 5m; severity dynamic; print-time yes; }; category default { default_file; }; };Эта конфигурация обеспечит работу обычного кэширующего сервера в локальной сети. Комментарии к некоторым параметрам:
listen-on-v6 port 53 { none; }; | Отключили работу на интерфейсе ipv6. |
allow-query { 127.0.0.1; 192.168.7.0/24; }; | Разрешаем обычные запросы только из локальной сети. |
allow-recursion { 127.0.0.1; 192.168.7.0/24; }; | Разрешаем рекурсивные запросы только из локальной сети. |
forwarders { 8.8.8.8; }; | Перенаправляем запросы, которые сами не резолвим, на днс сервер гугла. У меня указан он просто для примера. Тут лучше всего указать сначала ДНС серверы провайдера. |
version «DNS Server»; | Скрываем версию бинда, вместо этого выводим указанную строку. |
Не забудьте отредактировать правила фаервола для корректной работы
DNS сервера — открыть 53 порт UDP для работы кэширующего сервера,
который мы сейчас настроили, и 53 порт TCP для пересылки зон, о которых
речь пойдет дальше
Поддержка собственной зоны
Допустим, нам необходимо в нашем
named разместить собственную зону site1.ru. Первым делом создаем файл
зоны, которую будет обслуживать dns сервер:
# mcedit /var/named/chroot/var/named/site1.ru.zone
$TTL 86400 @ IN SOA site1.ru. site1.ru.local. ( 2015092502 43200 3600 3600000 2592000 ) IN NS ns1.site1.ru. IN NS ns2.site1.ru. IN A 192.168.7.254 IN MX 10 mx.site1.ru. gate IN A 192.168.7.254 mx IN A 192.168.7.250 ns1 IN A 192.168.7.235 ns2 IN A 192.168.7.231
Описание синтаксиса файлов зон
достаточно хорошо освещено в интернете, не хочется подробно на этом
останавливаться. При желание каждый сам сможет посмотреть, если у него
возникнет необходимость настроить поддержку собственной зоны.
Выставляем необходимые права:
# chown root:named /var/named/chroot/var/named/site1.ru.zone # chmod 0640 /var/named/chroot/var/named/site1.ru.zoneДальше подключаем файл зоны в конфигурационном файле bind — /var/named/chroot/etc/named.conf:
zone "site1.ru" { type master; file "site1.ru.zone"; };Перечитываем конфигурацию named с помощью rndc:
# rndc reconfig
Настройка логов в bind (named)
Гораздо интереснее и полезнее
разобраться с подробным логированием работы сервера. Я долгое время
поверхностно хватался за всякие рекомендации и куски примерных конфигов в
интернете, пока в не решил разобраться сам с этой темой и не полез в
оригинальный мануал.
Bind дает широкие возможности для
ведения логов. Можно фиксировать практически все, что связано с работой
сервера. Я сейчас на простых примерах покажу, как это работает.
Первым делом в конфигурации мы задаем канал, куда будут складываться логи по тем или иным событиям. Вот пример подобного канала:
channel general { file "/var/log/named/general.log" versions 3 size 5m; severity dynamic; print-time yes;Здесь указано название канала, которые мы придумываем сами — general, указан путь до файла, сказано, что хранить будем 3 версии лога размером не более 5 мегабайт. Параметр severity может принимать следующие значения:
critical | Только критические ошибки. |
error | Обычные ошибки и все что выше. |
warning | Предупреждения и все, что выше. |
notice | Уведомления и все, что выше. |
info | Информационные сообщения и все что выше. |
debug | Сообщения уровня debug и все, что выше. Уровни debug регулируются значениями 0, 1, 2, 3. |
dynamic | То же, что и debug, только его уровень регулируется глобальной настройкой сервера. |
Параметр print-time
указывает на то, что в лог необходимо записывать время события. Помимо
указанных мной настроек, в конфигурации канала могут быть добавлены
следующие параметры:
- print-severity yes | no — указывает, писать или нет параметр severity в лог
- print-category yes | no — указывает писать или нет название категории логов
Дальше необходимо указать категорию логов и в какой канал мы будем ее записывать:
category general { general; };Категорий у днс сервера bind достаточно много. Вот мой перевод полного списка с описаниями:
default | Сюда будут попадать события всех категорий из этой таблицы, если они не определены отдельно, за исключением категории queries, которую нужно включать специально. То есть если обозначить только категорию default, то в нее будут сыпаться события всех категорий. |
general | Эта категория для всех логов, которые не включены ни в одну из перечисленных категорий. |
database | Сообщения, относящиеся к хранению зон и кэшированию. |
security | Подтверждение и отказ в выполнении запросов. |
config | Все, что относится к чтению и выполнению файла конфигурация. |
resolver | Разрешение имен, включая информацию о рекурсивных запросах, выполняемых от имени клиента кэширующим сервером. |
xfer-in | Информация о получении зон. |
xfer-out | Информация о передаче зон. |
notify | Логирование операций протокола NOTIFY. |
client | Выполнение клиентских запросов. |
unmatched | Сообщения, которые named не смог отнести ни к одному классу или для которых не определено отображение. |
network | Логирование сетевых операций. |
update | Динамические апдейты. |
update-security | Подтверждение или отклонение запросов на апдейт. |
queries | Логирование запросов к ДНС серверу. Для включения этой категории необходимо отдельно задать параметр в конфигурации сервера. Это связано с тем, что эта категория генерирует очень много записей в лог файл, что может сказаться на производительности сервера. |
query-errors | Ошибки запросов к серверу. |
dispatch | Перенаправление входящих пакетов модулям сервера на обработку. |
dnssec | Работа протоколов DNSSEC и TSIG. |
lame-servers | Фиксируются ошибки, которые получает bind при обращении к удаленным серверам в попытке выполнить запрос на разрешение имени. |
delegation-only | Логирование запросов, вернувших NXDOMAIN. |
edns-disabled | Запросы, которые вынуждены использовать plain DNS из-за превышения timeouts. |
RPZ | Все операции, связанные с выполнение Response Policy Zone (RPZ). |
rate-limit | Операции связанные с одним или несколькими rate-limit statements в options или view. |
logging { channel default { file "/var/log/named/default.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel general { file "/var/log/named/general.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel database { file "/var/log/named/database.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel security { file "/var/log/named/security.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel config { file "/var/log/named/config.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel resolver { file "/var/log/named/resolver.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel xfer-in { file "/var/log/named/xfer-in.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel xfer-out { file "/var/log/named/xfer-out.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel notify { file "/var/log/named/notify.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel client { file "/var/log/named/client.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel unmatched { file "/var/log/named/unmatched.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel network { file "/var/log/named/network.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel update { file "/var/log/named/update.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel update-security { file "/var/log/named/update-security.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel queries { file "/var/log/named/queries.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel query-errors { file "/var/log/named/query-errors.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel dispatch { file "/var/log/named/dispatch.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel dnssec { file "/var/log/named/dnssec.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel lame-servers { file "/var/log/named/lame-servers.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel delegation-only { file "/var/log/named/delegation-only.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel edns-disabled { file "/var/log/named/edns-disabled.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel rpz { file "/var/log/named/rpz.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel rate-limit { file "/var/log/named/rate-limit.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel cname { file "/var/log/named/cname.log" versions 3 size 5m; severity dynamic; print-time yes; }; category default { default; }; category general { general; }; category database { database; }; category security { security; }; category config { config; }; category resolver { resolver; }; category xfer-in { xfer-in; }; category xfer-out { xfer-out; }; category notify { notify; }; category client { client; }; category unmatched { unmatched; }; category network { network; }; category update { update; }; category update-security { update-security; }; category queries { queries; }; category query-errors { query-errors; }; category dispatch { dispatch; }; category dnssec { dnssec; }; category lame-servers { lame-servers; }; category delegation-only { delegation-only; }; category edns-disabled { edns-disabled; }; category rpz { rpz; }; category rate-limit { rate-limit; }; category cname { cname; }; };Теперь создадим папку для логов. Не забываем, что мы работаем в chroot окружении:
# cd /var/named/chroot/var/log && mkdir named && chown named. namedЕсли мы хотим собирать все логи запросов из категории queries, то в раздел options файла конфигурации необходимо добавить параметр, который это разрешает:
querylog yes;Перезапускаем bind:
# systemctl reload named-chroot.service
Проверка работы DNS Server
Первым делом пойдем в каталог с логами и проверим, что там у нас:# cd /var/named/chroot/var/log/named # ls -l
Все файлы журнала созданы и начали наполняться. Можно проверить один из них. Например, посмотрим, как наш сервер centos (192.168.7.246) логирует запросы пользователей. Попробуем с компьютера 192.168.7.254 (windows) выполнить nslookup yandex.ru и посмотрим как это отразится в лог файле:
26-Sep-2015 19:25:30.923 client 192.168.7.254#56374 (yandex.ru): query: yandex.ru IN A + (192.168.7.246) 26-Sep-2015 19:25:31.013 client 192.168.7.254#56375 (yandex.ru): query: yandex.ru IN AAAA + (192.168.7.246)Теперь выполним ping site1.ru, чтобы проверить, как сервер поддерживает нашу зону:
Смотрим, что в логах:
26-Sep-2015 19:28:01.660 client 192.168.7.254#49816 (site1.ru): query: site1.ru IN A + (192.168.7.246)Таким образом очень удобно отследить, куда лезет компьютер. Например, можно поднять временно dns сервер, включить лог запросов. В клиенте указать единственный днс сервер, который мы настроили. Дальше можно отслеживать, к примеру, куда лезет винда после загрузки без нашего ведома. Или откуда грузится реклама в скайпе.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.