Логирование BIND 9
Настройки логирования работы DNS-сервера BIND 9 задаются в разделе logging непосредственно в конфигурационном файле named.conf или в отдельном файле, включаемом в named.conf с помощью директивы include.
Путь к конфигурационному файлу при стандартной установке:
-
ОС Astra Linux: /etc/bind/named.conf;
-
РЕД ОС: /etc/named.conf.
См. подробное описание настроек, доступных в разделе logging, в документации BIND 9.
|
Канал (channel)
Канал определяет, куда записываются логи.
Все логи, формируемые DNS-сервером в процессе работы, отправляются в один или несколько каналов. Количество каналов не ограничено.
Доступные каналы включают:
-
file— запись в файл; -
syslog— запись в системный журнал (syslog); -
stderr— вывод в стандартный поток; -
null— отключение логирования.
Для каждого канала могут быть заданы дополнительные опции. Например, для канала file доступны:
-
versions— количество ротаций файлов канала; при ротации к имени файла добавляется порядковый номер (например, filename.log, filename.log.1, filename.log.2, filename.log.3 и т. д.); -
size— максимальный размер файла перед ротацией; -
severity— уровень логирования; -
print-time— добавление в сообщение временной метки (возможные значения:iso8601 | iso8601-utc | local | yes|no; по умолчанию —no):-
если используется значение
yesилиlocal, временная метка формируется в соответствии с часовым поясом сервера в формате DD-MM-YYYY HH:MM:SS.SSS; -
iso8601 | iso8601-utc— используется время в формате ISO 8601 по часовому поясу сервера или UTC.
-
-
print-category— добавление в сообщение категории (возможные значения:yes|no; по умолчанию —no).
Пример настройки каналов:
logging {
channel my_file { (1)
file "/var/log/bind9/my_file.log" versions 3 size 100m; (2)
severity info; (3)
print-time yes; (4)
print-category yes;
};
channel syslog_channel { (5)
syslog daemon;
severity warning;
};
};
| 1 | Настройки канала для записи логов в файл. |
| 2 | Путь к файлу, количество ротаций и ограничение размера файла. |
| 3 | Уровень логирования для канала. |
| 4 | Добавление временной метки и категории. |
| 5 | Настройки канала для записи логов в системный журнал. |
Категория (category)
Категория определяет, какие события логируются.
| См. полный список доступных категорий в документации BIND 9. |
Для каждой категории может быть задан список настроенных в конфигурации каналов. Например:
category resolver{
channel_resolver;
};
category security{
channel_security;
};
Если канал для категории не задан, записи отправляются в категорию default. Если категория default не задана, для нее используются следующие настройки:
category default { default_syslog; default_debug; };
Для отключения отправки записей, относящихся к определенной категории, необходимо вместо имени канала указать null. Например:
category xfer-out { null; };
category notify { null; };
Доступные категории событий включают (список неполный):
-
client— взаимодействие с DNS-клиентами (обработка входящих запросов, ошибки клиентских соединений и т. д.); -
cname— обработка CNAME-записей (разрешение CNAME, рекурсивные CNAME-цепочки, связанные с CNAME ошибки); -
config— загрузка, разбор и обработка конфигурационных файлов; -
database— операции с внутренней базой данных DNS-сервера, хранящей записи зон, кэш рекурсивных запросов, динамические обновления, DNSSEC-ключи и подписи; -
default— общие системные события, сообщения без явной категории и события, для которых не настроена отдельная категория; -
dispatch— работа диспетчера запросов, распределяющего входящие DNS-запросы между внутренними модулями DNS-сервера; -
dnssec— события, связанные с DNSSEC; -
dnstap— логирование DNS-трафика (DNS-запросы и ответы) с помощью специализированного формата dnstap; -
general— общие события и ошибки, связанные с работой DNS-сервера (запуск и остановка, ошибки конфигурации, системные события, безопасность и т. д.); -
lame-servers— ошибки в конфигурации удаленных серверов, обнаруженные BIND 9 при попытке отправки им запросов для разрешения; -
network— события, связанные с сетевыми операциями DNS-сервера (ошибки и проблемы на уровне сетевого взаимодействия); -
notify— уведомления об изменениях зон DNS (DNS NOTIFY); -
queries— логирование DNS-запросов и ответов (фиксация входящих DNS-запросов, логирование ответов сервера, отслеживание типа запросов, определение источника запросов и т. д.); -
query-errors— ошибки, связанные с обработкой DNS-запросов (ошибки формата, неуспешные рекурсивные запросы и т. д.); -
resolver— рекурсивное разрешение DNS-запросов (этапы разрешения, ошибки рекурсии, кэширование ответов, DNSSEC-валидация); -
security— события, связанные с безопасностью (попытки несанкционированного доступа, запрещенные по ACL запросы от клиентов, блокировка запросов и т. д.); -
unmatched— сетевые пакеты, не соответствующие ни одному ожидаемому запросу или действию сервера (DNS-ответы, которые не были запрошены сервером; пакеты неправильной структуры; пакеты, пришедшие не вовремя и т. д.); -
update— динамические обновления DNS-зон (DDNS); -
update-security— события, связанные с безопасностью при выполнении динамических обновлений DNS-зон (разрешения или отклонения динамического обновления зон, причина отклонения, имя зоны и клиента и т. д.); -
xfer-in— входящие запросы на передачу DNS-зоны от других DNS-серверов; -
xfer-out— исходящие запросы на передачу DNS-зоны другим DNS-серверам.
Пример задания категории для канала:
logging {
channel my_file { (1)
file "/var/log/bind9/my_file.log" size 20m;
severity debug 3;
};
category queries { my_file; }; (2)
};
| 1 | Настройки канала. |
| 2 | Задание категории queries для канала. |
Уровень логирования (severity)
Доступные уровни логирования включают (каждый последующий уровень содержит в себе сообщения уровней, располагающихся в списке выше):
-
critical— только критические ошибки; -
error— ошибки и сообщения уровней выше; -
warning— предупреждения и сообщения уровней выше; -
notice— уведомления и сообщения уровней выше; -
info— информационные сообщения и сообщения уровней выше; -
debug— отладочная информация с возможностью указания уровня отладки от 1 до 9 и сообщения уровней выше; -
dynamic— установка уровня отладки с помощью параметра командной строки-dили при запускеrndc trace.
Пример задания уровня отладки для канала:
channel debug_log {
file "/var/log/bind9/debug.log";
severity debug 3; (1)
};
| 1 | Уровень отладки 3. |
Пример конфигурации логирования для сервера BIND 9
Пример демонстрирует вариант конфигурации логирования с распределением каналов по описанным выше категориям событий с записью логов в отдельные файлы в общем каталоге.
Размер каждого файла задается опцией size. При превышении выполняется ротация. Количество ротаций (файлов одного канала) указывается в опции versions. Например, для канала queries при заполнении будет создано пять файлов (queries.log, queries.log.0, queries.log.1, queries.log.2, queries.log.3, queries.log.4) общим объемом не более 500 МБ.
Для настройки логирования BIND 9 на ОС Astra Linux выполните следующие действия от имени суперпользователя или с повышением привелегий с помощью sudo:
-
Создайте каталог для логов и назначьте владельцем пользователя
bind:sudo mkdir /var/log/bind9 && sudo chown bind:bind /var/log/bind9
-
В каталоге с файлом конфигурации BIND 9 создайте отдельный файл для настроек логирования:
sudo nano /etc/bind/named.conf.logging
-
Задайте в файле следующие настройки, обращая внимание на сохранение отступов и отсутствие дополнительных символов форматирования (или скачайте готовый файл и используйте его):
logging{ channel channel_client { file "/var/log/bind9/client.log" versions 3 size 100m; severity debug 3; print-time yes; print-severity yes; }; channel channel_cname { file "/var/log/bind9/cname.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_config { file "/var/log/bind9/config.log" versions 3 size 100m; severity info; print-time yes; print-severity yes; }; channel channel_database { file "/var/log/bind9/database.log" versions 3 size 100m; severity notice; print-time yes; print-severity yes; }; channel channel_default { file "/var/log/bind9/default.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_dispatch { file "/var/log/bind9/dispatch.log" versions 3 size 100m; severity debug 1; print-time yes; print-severity yes; }; channel channel_dnssec { file "/var/log/bind9/dnssec.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_dnstap { file "/var/log/bind9/dnstap.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_general { file "/var/log/bind9/general.log" versions 3 size 100m; severity debug 5; print-time yes; print-severity yes; }; channel channel_lame-servers { file "/var/log/bind9/lame-servers.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_network { file "/var/log/bind9/network.log" versions 3 size 100m; severity debug 3; print-time yes; print-severity yes; }; channel channel_notify { file "/var/log/bind9/notify.log" versions 3 size 100m; severity debug 3; print-time yes; print-severity yes; }; channel channel_queries { file "/var/log/bind9/queries.log" versions 5 size 100m; severity info; print-time yes; print-severity yes; }; channel channel_query-errors { file "/var/log/bind9/query-errors.log" versions 3 size 100m; severity info; print-time yes; print-severity yes; }; channel channel_resolver { file "/var/log/bind9/resolver.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_security { file "/var/log/bind9/security.log" versions 3 size 100m; severity debug 10; print-time yes; print-severity yes; }; channel channel_unmatched { file "/var/log/bind9/unmatched.log" versions 3 size 100m; severity debug 3; print-time yes; print-severity yes; }; channel channel_update { file "/var/log/bind9/update.log" versions 3 size 100m; severity debug 3; print-time yes; print-severity yes; }; channel channel_update-security { file "/var/log/bind9/update-security.log" versions 3 size 100m; severity info; print-time yes; print-severity yes; }; channel channel_xfer-in { file "/var/log/bind9/xfer-in.log" versions 3 size 100m; severity info; print-time yes; print-severity yes; }; channel channel_xfer-out { file "/var/log/bind9/xfer-out.log" versions 3 size 100m; severity info; print-time yes; print-severity yes; }; category client{ channel_client; }; category cname{ channel_cname; }; category config{ channel_config; }; category dispatch{ channel_dispatch; }; category database{ channel_database; }; category default{ channel_default; }; category dnssec{ channel_dnssec; }; category dnstap{ channel_dnstap; }; category general{ channel_general; }; category lame-servers{ channel_lame-servers; }; category network{ channel_network; }; category notify{ channel_notify; }; category queries{ channel_queries; }; category query-errors{ channel_query-errors; }; category resolver{ channel_resolver; }; category security{ channel_security; }; category unmatched{ channel_unmatched; }; category update{ channel_update; }; category update-security{ channel_update-security; }; category xfer-in{ channel_xfer-in; }; category xfer-out{ channel_xfer-out; }; }; -
Включите созданный файл в состав основного конфигурационного файла BIND 9:
echo 'include "/etc/bind/named.conf.logging";' | sudo tee -a /etc/bind/named.conf
-
Проверьте корректность синтаксиса конфигурационных файлов:
sudo named-checkconf
Если в выводе команды присутствуют сообщения об ошибках, устраните их и повторно выполните команду. Отсутствие в выводе сообщений указывает на корректность синтаксиса.
-
Перезапустите сервис
bind9:sudo systemctl restart bind9
В дальнейшем при изменении уровней логирования в файле /etc/bind/named.conf.logging для применения новых настроек может использоваться команда rndc reload. -
Убедитесь, что в каталоге /var/log/bind9 создались соответствующие файлы и в них присутствуют записи (для этого может потребоваться определенное время).
Пример лога запроса клиента (10.6.32.64) к DNS-серверу (10.6.32.24) о записи HOST5.samdom.example.com в файле /var/log/bind9/queries.log:
07-Apr-2025 07:22:22.531 info: client @0x72df18031a60 10.6.32.64#37274 (HOST5.samdom.example.com): query: HOST5.samdom.example.com IN A +E(0)K (10.6.32.24)