Настройка Fail2Ban под Bind9

Допустим Fail2Ban уже установлен, если нет, то смотрите мою статью — Установка и настройка Fail2ban.

По умолчанию Bind9 не пишет логи, поэтому откроем его файл конфигурации в любом текстовом редакторе:

sudo nano /etc/bind/named.conf

И добавим:

logging {
    channel security_file {
        file "/var/log/named/security.log" versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
    category security {
        security_file;
    };
};

Читать далее Настройка Fail2Ban под Bind9

Мониторинг Bind9 в Zabbix

На примере опишу вариант мониторинга DNS сервера Bind9 в Zabbix.

Для начала включим статистику Bind9, откроем файл конфигурации в текстовом редакторе, например nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/bind/named.conf

И добавим следующие строки (где первый IP и порт — интерфейс на котором будет видна статистика, а следующие — с которых разрешен к ней доступ):

statistics-channels {
     inet 192.168.10.1 port 8053 allow { 127.0.0.1; 192.168.10.1; 192.168.10.15;};
};

И перезапустим Bind чтобы применить изменения:

sudo /etc/init.d/bind9 restart

После этого в браузере набрав http://192.168.10.1:8053/ можно увидеть статистику Bind9.

Установим необходимые компоненты необходимые для получения статистики из терминала:

sudo apt-get install xml2 curl

Проверим отображается ли статистика:

curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 queries

Теперь допишем к конфигурацию Zabbix агента /etc/zabbix/zabbix_agentd.conf параметры которые будем мониторить:

# Количество udp соединений к DNS:
UserParameter=bind.net.udp,netstat -nua | grep :53 | wc -l
# Количество tcp соединений к DNS:
UserParameter=bind.net.tcp,netstat -nta | grep :53 | wc -l
# Количество входящих и исходящих запросов:
UserParameter=bind.queries.in[*],curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/server/queries-in/rdtype/name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.out[*],curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/views/view/rdtype/name=$1$" | tail -1 | cut -d= -f2

И перезапустим Zabbix агент чтобы применить изменения:

sudo /etc/init.d/zabbix-agent restart

Добавим элементы данных и графики нужному узлу сети или шаблону в Zabbix сервере (тип — Zabbix агент, примеры ключей ниже):

bind.queries.in[A]
bind.queries.out[A]
bind.queries.in[AAAA]
bind.queries.out[AAAA]
bind.queries.in[NS]
bind.queries.out[NS]
bind.queries.in[MX]
bind.queries.out[MX]
bind.queries.in[PTR]
bind.queries.out[PTR]
bind.queries.in[SOA]
bind.queries.out[SOA]
bind.queries.in[TXT]
bind.queries.out[TXT]
bind.queries.in[ANY]
bind.queries.out[ANY]
и т.д.

Смотрите также мою статью:
Мониторинг DNS из Zabbix

Настройка PTR записи на DNS сервере

Понадобилось как-то настроить обратную DNS зону (Reverse DNS) для почтового сервера, так как некоторые сервера не хотели принимать от него почту.

Допустим наш домен mail.example.com находящийся на IP адресе 192.168.1.100, а 192.168.1.1 — сервер интернет провайдера.

Проверить из Windows можно командами (где 192.168.1.100 например адрес нашего почтового сервера, а 192.168.1.1 DNS на который шлем запрос):

nslookup mail.example.com
nslookup 192.168.1.100
nslookup 192.168.1.100 192.168.1.1

В ответ первой команды будет 192.168.1.100, а в ответ второй ничего (должно mail.example.com), так как в DNS не настроена PTR запись.

Из Linux проверять можно так:

dig -x 192.168.1.100

У регистратора доменных имен в DNS добавим дочерний NS-сервер интернет провайдера ns1.example.com 192.168.1.1.

На сервере провайдера (на тесте использую Bind9 на Ubuntu Server) откроем конфигурационный файл DNS сервера например в редакторе nano (CTRL+X для выхода, y/x и Enter для сохранения или отмены изменений):

sudo nano /etc/bind/named.conf

И добавим следующие строки:

zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/1.168.192.in-addr.arpa";
};

Первая строка указывает какой зоной будем управлять, вторая тип — главный (этот DNS и будет ею управлять), третья — в каком файле будет прописана конфигурация для этой зоны.

Откроем новый файл для настроек зоны:

sudo nano /etc/bind/1.168.192.in-addr.arpa

И добавим в него:

$TTL 3600
@          IN SOA ns1.example.com. admin.example.com. (
              2016112301       ; Serial
              21600             ; refresh
              3600              ; retry
              3600000           ; expire
              86400 )           ; minimum

        IN  NS ns1.hosting.com.
        IN  NS ns2.hosting.com.

$ORIGIN 1.168.192.in-addr.arpa.
100      IN PTR  mail.example.com.

admin.example.com — контактный адрес человека отвечающего за зону, символ @ не указывается.
Serial это серийный номер версии файла зоны, должен изменяться в большую сторону при каждом изменении, обычно пишется в виде год месяц число номер изменения, по нему другие DNS определяют что нужно обновить у себя информацию.
Refresh — интервал времени в секундах, через который вторичный сервер будет проверять необходимость обновления информации.
Retry — интервал времени в секундах, через который вторичный сервер будет повторять обращения при неудаче.
Expire — интервал времени в секундах, через который вторичный сервер будет считать имеющуюся у него информацию устаревшей.
Minimum — интервал времени жизни информации на кэширующих серверах.
ns1.hosting.com и ns2.hosting.com это DNS домена.
Цифра 100 в последней строке означает окончание IP адреса 192.168.1, аналогично можно указывать записи для других доменов, например 101 IN PTR … для 192.168.1.101 и т.д.

Перезапустим DNS сервер чтобы применить изменения.
Bind9 можно командой:

sudo /etc/init.d/bind9 restart

Смотрите также:
Настройка Reverse DNS (PTR) в Hetzner

Настройка логов Bind9

По умолчанию логи Bind9 записываются в системный журнал /var/log/syslog и чтобы отделить их, выполним действия которые я укажу ниже.

На тесте буду настраивать Bind9 в Ubuntu Server 16.04.
Откроем основной файл конфигурации Bind9 например в редакторе nano (Ctrl+X для выхода, y/x для сохранения или отмены изменений):

sudo nano /etc/bind/named.conf

Добавим в его конец:

logging {
    channel bind.log {
        file "/var/lib/bind/bind.log" versions 10 size 20m;
        severity notice;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

        category queries { bind.log; };
        category default { bind.log; };
        category config { bind.log; };
};

severity указывает уровень логирования, он может быть: critical, error, warning, notice, info, debug, dynamic.

Второй пример, либо можно настроить сохранение логов в разные файлы:

logging {
          channel "misc" {
                    file "/var/log/named/misc.log" versions 4 size 4m;
                    print-time YES;
                    print-severity YES;
                    print-category YES;
          };

          channel "query" {
                    file "/var/log/named/query.log" versions 4 size 4m;
                    print-time YES;
                    print-severity NO;
                    print-category NO;
          };

          category default {
                    "misc";
          };

          category queries {
                    "query";
          };
};

Приведу еще третий пример:

logging {
          channel "misc" {
                    file "/var/log/named/misc.log" versions 10 size 10m;
                    print-time YES;
                    print-severity YES;
                    print-category YES;
          };

          channel "query" {
                    file "/var/log/named/query.log" versions 10 size 10m;
                    print-time YES;
                    print-severity NO;
                    print-category NO;
          };

          channel "lame" {
                    file "/var/log/named/lamers.log" versions 1 size 5m;
                    print-time yes;
                    print-severity yes;
                    severity info;
          };

          category "default" { "misc"; };
          category "queries" { "query"; };
          category "lame-servers" { "lame"; };

};

Перезапустим Bind9 чтобы применить изменения:

sudo /etc/init.d/bind9 restart

Можно сделать ссылку в /var/log/, чтобы другим было легче их найти:

sudo ln -s /var/lib/bind/ /var/log/

Смотреть логи в реальном времени можно командой (Ctrl+C остановка просмотра):

sudo tail -f /var/lib/bind/bind.log

Если запись логов ведется в нестандартную директорию, то нужно разрешить это в apparmor:

sudo nano /etc/apparmor.d/usr.sbin.named

Смотрите также:
Установка и настройка DNS-сервера BIND9

Установка и настройка DNS-сервера BIND9

BIND (Berkeley Internet Name Domain) — открытая и наиболее распространённая реализация DNS-сервера, обеспечивающая выполнение преобразования DNS-имени в IP-адрес и наоборот.

Установка в Linux Ubuntu:

sudo apt-get install bind9

Остановка/Запуск/Перезапуск Bind9:

sudo /etc/init.d/bind9 stop/start/restart

Чтобы использовать локальный DNS нужно прописать в /etc/resolv.conf:

nameserver 127.0.0.1

Редактируем конфигурационные файлы в директории /etc/bind/ под свои нужды.

Откроем файл конфигурации named.conf.options например в текстовом редакторе nano:

sudo nano /etc/bind/named.conf.options

Добавим вначале ACL с сетями которым будут разрешены запросы к DNS серверу:

acl localclients {
localhost;
localnets;
10.0.0.0/8;
172.16.0.0/12;
192.168.0.0/16;
};

В options укажем этот ACL, разрешив запросы:

allow-recursion { localclients; };
allow-query { localclients; };
allow-query-cache { localclients; };

Можно указать IP-адреса на которых будет работать bind9:

listen-on {
127.0.0.1;
192.168.1.1;
};

Или на всех:

listen-on { any; };

Либо можно также указать адреса которым разрешена рекурсия, чтобы DNS не обслуживал запросы всех клиентов, а только указанных (все остальные не прописанные адреса смогут получить только информацию прописанную в этом DNS):

allow-recursion { 127.0.0.1; 10.0.0.0/8; 192.168.0.0/16; 172.16.0.0/16; };

Правильность настроек можно проверить следующей командой (если она ничего не сообщила — значит все в порядке):

named-checkconf

Применяем изменения:

sudo rndc reload

или так:

sudo  /etc/init.d/bind9 restart

Проверка:

rndc status
netstat -lnp | grep :53
sudo ps -ax | grep bind

Из Windows можно проверить командой (где 192.168.1.1 — адрес bind9):

nslookup example.com 192.168.1.1

Кэш DNS сервера можно очистить командой:

sudo rndc flush

Сохранить кэш в файл (/var/cache/bind/):

sudo rndc dumpdb

Смотрите также:
Настройка логов Bind9
Настройка Fail2Ban под Bind9