Логирование 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:

  1. Создайте каталог для логов и назначьте владельцем пользователя bind:

    sudo mkdir /var/log/bind9 && sudo chown bind:bind /var/log/bind9
  2. В каталоге с файлом конфигурации BIND 9 создайте отдельный файл для настроек логирования:

    sudo nano /etc/bind/named.conf.logging
  3. Задайте в файле следующие настройки, обращая внимание на сохранение отступов и отсутствие дополнительных символов форматирования (или скачайте готовый файл и используйте его):

    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;
        };
    };
  4. Включите созданный файл в состав основного конфигурационного файла BIND 9:

    echo 'include "/etc/bind/named.conf.logging";' | sudo tee -a /etc/bind/named.conf
  5. Проверьте корректность синтаксиса конфигурационных файлов:

    sudo named-checkconf

    Если в выводе команды присутствуют сообщения об ошибках, устраните их и повторно выполните команду. Отсутствие в выводе сообщений указывает на корректность синтаксиса.

  6. Перезапустите сервис bind9:

    sudo systemctl restart bind9
    В дальнейшем при изменении уровней логирования в файле /etc/bind/named.conf.logging для применения новых настроек может использоваться команда rndc reload.
  7. Убедитесь, что в каталоге /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)