Настраиваем ДНС

Авторитативный ДНС-сервер - сервер, на которм хостится файл описания зоны.

  • Книга про DNS. Перед установкой ДНС сервера рекомендую к прочтению.

Остальные общие сведения есть в открытом доступе здесь же: - Логирование ДНС

Настройка ДНС

Логирование

  1. Логирование в таких объемах требует отдельной подсети для логов. Иначе, при атаке на наш ДНС, та сеть, по которой передаются логи, встанет колом, а сервера могут стать на какое-то время недоступны.
  2. вписываем в конфиг все, что только можно логировать:
    logging {
        channel default_file {
            file "/var/log/named/default.log" versions 3 size 5m;
            print-time yes;
        };
        channel default_syslog {
            syslog LOCAL1;
            severity dynamic;
            print-time yes;
        };
        channel general_syslog {
            syslog LOCAL2;
            severity info;
            print-time yes;
        };
        channel database_file {
            file "/var/log/named/database.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel database_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };
        channel security_file {
            file "/var/log/named/security.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel security_syslog {
            syslog SECURITY;
            severity dynamic;
            print-time yes;
        };
        channel config_file {
            file "/var/log/named/config.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel config_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };
        channel resolver_file {
            file "/var/log/named/resolver.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel resolver_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };   
        channel xfer-in_file {
            file "/var/log/named/xfer-in.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel xfer-in_syslog {
            syslog LOCAL0;
            severity dynamic;
            print-time yes;
        };
        channel xfer-out_file {
            file "/var/log/named/xfer-out.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel xfer-out_syslog {
            syslog LOCAL0;
            severity dynamic;
            print-time yes;
        };
        channel notify_file {
            file "/var/log/named/notify.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel notify_syslog {
            syslog LOCAL0;
            severity dynamic;
            print-time yes;
        };
        channel client_file {
            file "/var/log/named/client.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel client_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };
        channel unmatched_file {
            file "/var/log/named/unmatched.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel unmatched_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };
        channel queries_syslog {
            syslog LOCAL4;
            severity dynamic;
            print-time yes;
        };
        channel network_file {
            file "/var/log/named/network.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel network_syslog {
            syslog LOCAL0;
            severity dynamic;
            print-time yes;
        };
        channel update_file {
            file "/var/log/named/update.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel update_syslog {
            syslog LOCAL0;
            severity dynamic;
            print-time yes;
        };
        channel dispatch_file {
            file "/var/log/named/dispatch.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel dispatch_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };
        channel dnssec_file {
            file "/var/log/named/dnssec.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
        channel dnssec_syslog {
            syslog LOCAL3;
            severity dynamic;
            print-time yes;
        };
        channel lame-servers_syslog {
            syslog LOCAL5;
            severity dynamic;
            print-time yes;
        };
     
        category default { default_file; default_syslog; };
        category general { general_syslog; };
        category database { database_file; database_syslog; };
        category security { security_file; security_syslog; };
        category config { config_file; config_syslog; };
        category resolver { resolver_file; resolver_syslog; };
        category xfer-in { xfer-in_file; xfer-in_syslog; };
        category xfer-out { xfer-out_file; xfer-out_syslog; };
        category notify { notify_file; notify_syslog;};
        category client { client_file; client_syslog; };
        category unmatched { unmatched_file; unmatched_syslog; };
        category queries { queries_syslog; };
        category network { network_file; network_syslog; };
        category update { update_file; update_syslog; };
        category dispatch { dispatch_file; dispatch_syslog; };
        category dnssec { dnssec_file; dnssec_syslog; };
        category lame-servers { lame-servers_syslog; };
     
    };

  3. Создаем папку /var/named/var/log/
  4. Также создаем локальные файлы под логи, чтобы named-у было куда писать логи и куда их переименовывать (а то не запустится).
  5. Даем всему хозяйству владельца bind, чтобы named не ругался на свое бесправие в собственной папке логов.
  6. Т.е. делаем так:

    mkdir /var/named/var/log/
    cd /var/named/var/log/
    touch config.log dispatch.log unmatched.log xfer-out.log database.log dnssec.log network.log
    touch resolver.log update.log client.log default.log notify.log security.log xfer-in.log
    chown -R bind /var/named/var/log/

Типа секурно

  1. ставим версию “гет лост”
  2. ограничение рекурсии (через пару месяцев “чужие” задолбают!)
    1. ставим allow recursion { trusted-servers; };
  3. ограничение передачи всей зоны AXFR (типа секурно)
    1. ставим allow-transfer { trusted-servers; };
  4. посылаем в DELETEME всех чужих:
    1. нехрен грузить сервер: allow-query { trusted-servers; };
    2. и нефиг пытаться отравлять кэш: allow-update { none; };
  5. ограничиваем trusted-servers только нужными местами
    1. вводим acl trusted-servers
  6. однако, слушаем на всех фейсах, ибо хз с какого фейса придет нотифай об изменении зоны
  7. т.е. в глобальном разделе конфига пишем такое:
    acl trusted-servers {
    	127.0.0.1; 87.255.21.16/28; 87.255.13.112/29; 87.255.8.184; 194.85.61.20; 194.226.96.8;
    	193.232.130.14; 192.168.0.1/24; 10.105.144.1/24; 172.23.34.0/28; 83.102.164.202; 78.107.92.65/26; 
    };
    options {
            allow-recursion         { trusted-servers; };
            allow-update            { none; };
            allow-query             { trusted-servers; };
            allow-query-cache       { trusted-servers; };
            allow-transfer          { trusted-servers; };
    	version         "get lost";
    	listen-on       { 127.0.0.1; 87.255.0.230; 87.255.21.17; 87.255.21.18; 87.255.13.113; };
    };

И приложим к жопе сковородку

Еще, чтобы даже если будет отравлен кэш ДНС-а, вся фигня сбрасывалась, имеет смысл по крону, хотя бы раз в неделю, рестартовать ДНС обнулять кэш: service named restart rndc flush

А также запишем все свои зоны

Разумеется, с максимальным ограничением на скачивание зоны, но с разрешением запросов по зоне.

Пример 1 (простейшая зона, топологию сети скрывать не надо, так что пускай кэшируется где угодно):

zone "hscd.ru" IN {
        type slave;
        file "../slave/hscd.ru.slave";
        masters { 87.255.0.230; 87.255.21.17; 87.255.21.18; };
        allow-transfer { any; };
        allow-query { any; };
};

Разумеется, установка allow-transfer { any; } для своих зон не лишает злоумышленниа использовать наш сервер для бомбардировки жертв нашей зоной (т.е. запрашивать у нашего сервера нашу же зону с поддельного ip-адреса жертвы), но пока еще враги это не используют.
Тем не менее, мы можем к этому подготовиться:

  1. Скомпилировать себе BIND 9.9 из портов (без замены “родного” BIND) с поддержкой RRL (опция для make –enable-rrl) и настроить rc.conf, как указано здесь: http://www.zytrax.com/books/dns/ch5/
  2. Настроить Response Rate Limit в глобальных установках (или для зоны) как указано здесь: https://kb.isc.org/article/AA-01000
    Например:
    rate-limit {
    responses-per-second 3;
    slip 0;
    min-table-size 10;
    };

Пример 2 (зона со скрываемой топологией, запросы будем резолвить лично):

zone "knvr.ru" IN {
        type slave;
        file "../slave/knvr.ru.slave";
        masters { 193.232.146.1; 87.255.21.18; };
        allow-transfer { trusted-servers; };
        allow-query { any; };
};

Разумеется, установка allow-query { any; } для своих зон не лишает злоумышленниа возможности бомбардировать наш сервер запросами и вытаскивать записи по одной. То есть, топология полностью не скрывается.

По-настоящему скрыть хранящиеся в DNS сведения о наших машинах может только использование опции view.

Конфиг для скачивания

закрою на пароль-выложу

Литература

Остальное - смотри в оригинале книги http://www.zytrax.com/books/dns/ и в пдф-ке Dns.pdf. Настроил и забыл, писать лень.

Проверяемся

Первая проверка конфига:

named-checkconf /etc/namedb/named.conf

Эта проверка означает всего лишь, что named запустится. Также не мешает проверить описание наших мастер-зон командой

 named-checkzone /etc/namedb/master/ourdomain.ru.master

Уже после запуска не помешает провериться со внешнего сервера. Например, http://www.dnsinspect.com/

unix/bind/named_conf.txt · Last modified: 2015/10/17 18:58 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5