Безопасность DNS-сервера [207.3]

Рейтинг: 75.8% · 12 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Безопасность DNS-сервера [207.3]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3] (вы здесь)
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 23. Безопасность DNS-сервера [207.3]

DNS по умолчанию слишком доверчив: открытый рекурсор отвечает кому угодно, отдаёт всю зону по AXFR любому желающему и принимает обновления без проверки. На LPIC-2 от вас ждут умения превратить такой named в закрытую крепость. В этом уроке мы изолируем процесс named, ограничим запросы и трансферы через ACL, защитим передачу зон ключами TSIG, подпишем зону DNSSEC и разведём ответы для внутренних и внешних клиентов через split-horizon. Работаем на BIND 9.18+ (актуален в Debian 13, Ubuntu 24.04, RHEL 10).

Изображение

Как это работает

Изоляция нужна, чтобы взлом named не дал доступ ко всей системе. Исторически named запирали в chroot - подменяли корень файловой системы, чтобы процесс видел только свой каталог. В 2026 это легаси: пакетный named и так работает от непривилегированного пользователя (bind в Debian, named в RHEL), а реальную изоляцию даёт systemd через директивы юнита - ProtectSystem, PrivateTmp, CapabilityBoundingSet. Chroot оставляем только для экзамена и редких кастомных сборок.

Ограничение доступа строится на ACL - именованных списках адресов и сетей. Опция allow-query решает, кому вообще отвечать; allow-recursion - кому давать рекурсивные ответы (это главный рубеж против превращения в открытый резолвер и DDoS-усилитель); allow-transfer - кому отдавать копию зоны по AXFR. По умолчанию в BIND 9.18 рекурсия уже закрыта снаружи, но проверять надо явно.

TSIG (Transaction SIGnature) - симметричный ключ, общий для двух серверов. Им подписывается каждая транзакция: трансфер зоны (мастер - слейв) и динамические обновления (nsupdate). Получатель пересчитывает HMAC и сверяет подпись, плюс проверяет время - поэтому часы должны быть синхронизированы (chrony). TSIG защищает канал передачи, но не сами данные в кэше клиента.

DNSSEC - другая задача: он подписывает записи зоны парой ключей. ZSK (Zone Signing Key) подписывает данные, KSK (Key Signing Key) подписывает ZSK, а хэш KSK публикуется у родителя как запись DS. Резолвер строит цепочку доверия от корня вниз и отвергает подделку. Это защита целостности данных для всех, а не только канала между двумя серверами.

Split-horizon (split DNS) выдаёт разные ответы разным клиентам. В BIND это реализуют через views: каждый view имеет свой match-clients и свой набор зон. Внутренняя сеть видит реальные приватные адреса, внешний мир - только публичные записи. Порядок views важен - клиент попадает в первый подходящий.

Команды и примеры

ACL и ограничения в named.conf (Debian: /etc/bind/named.conf.options, RHEL: /etc/named.conf):

Код: Выделить всё

acl "trusted" { 10.0.0.0/8; 192.168.0.0/16; localhost; };
acl "slaves"  { 203.0.113.5; 203.0.113.6; };

options {
    allow-query     { any; };
    allow-recursion { trusted; };   // рекурсия только своим
    allow-transfer  { none; };      // глобально запретить, открыть в зоне
    recursion yes;
};
Генерация TSIG-ключа (современный путь - tsig-keygen, старый dnssec-keygen для TSIG устарел):

Код: Выделить всё

tsig-keygen -a hmac-sha256 xfer-key > /etc/bind/tsig.key
Подключаем ключ и привязываем к зоне на мастере:

Код: Выделить всё

include "/etc/bind/tsig.key";
zone "example.com" {
    type master;
    file "/var/lib/bind/example.com.zone";
    allow-transfer { key "xfer-key"; };
};
На слейве тот же ключ и указание использовать его к мастеру через server:

Код: Выделить всё

server 198.51.100.10 { keys { xfer-key; }; };
Подпись зоны. В BIND 9.18+ проще включить inline-signing и автоматику, чем подписывать вручную:

Код: Выделить всё

dnssec-keygen -a ECDSAP256SHA256 -f KSK example.com
dnssec-keygen -a ECDSAP256SHA256        example.com
В зоне включаем политику (современный механизм dnssec-policy вместо ручного auto-dnssec):

Код: Выделить всё

zone "example.com" {
    type master;
    file "/var/lib/bind/example.com.zone";
    dnssec-policy default;
    inline-signing yes;
};
Проверка подписи и валидации:

Код: Выделить всё

named-checkzone example.com /var/lib/bind/example.com.zone
delv @127.0.0.1 example.com SOA +rtrace
dig @127.0.0.1 example.com DNSKEY +dnssec
delv показывает "fully validated" при корректной цепочке. DS-запись для родителя берём из dnssec-dsfromkey по KSK.

Split-horizon через views:

Код: Выделить всё

view "internal" {
    match-clients { trusted; };
    recursion yes;
    zone "example.com" { type master; file "internal/example.com"; };
};
view "external" {
    match-clients { any; };
    recursion no;
    zone "example.com" { type master; file "external/example.com"; };
};
Перезагрузка и проверка конфигурации (оба семейства):

Код: Выделить всё

named-checkconf
rndc reconfig
systemctl reload named   # RHEL: named, Debian: named (бывший bind9)
Частые грабли
  • Открытый рекурсор: забыли allow-recursion - ваш сервер используют для DNS-amplification атак. Проверяйте dig +short test.openresolver.com TXT снаружи.
  • allow-transfer { any; } - вся зона утекает любому через dig AXFR. Всегда привязывайте трансфер к key или slaves.
  • Рассинхрон часов ломает TSIG: ошибка BADTIME. Держите chrony на мастере и слейвах.
  • Идентичный ключ, но разные алгоритмы (hmac-md5 против sha256) в name ключа - подпись не сойдётся. Имя и алгоритм должны совпадать на обоих концах.
  • После DNSSEC забыли отдать DS родителю - зона подписана, но цепочка доверия рвётся, валидаторы отдают SERVFAIL.
  • При views ВСЕ зоны должны лежать внутри views, нельзя смешивать зоны на верхнем уровне и во view - named не стартует.
  • Просрочка RRSIG: без dnssec-policy подписи надо переподписывать вручную, иначе через срок валидации зона "протухает".
  • chroot в 2026: правка конфига в /etc/, а named читает копию в /var/named/chroot/etc/ - меняете не тот файл.
Мини-лаба
  • Поднимите named на стенде, в options задайте acl "lan" со своей подсетью и allow-recursion { lan; }. Снаружи стенда проверьте, что рекурсия закрыта (dig вернёт REFUSED).
  • Сгенерируйте TSIG-ключ через tsig-keygen, пропишите его и allow-transfer { key ...; } в зону. Попробуйте dig AXFR без ключа (откажет) и с ключом через -y (отдаст зону).
  • Включите для зоны dnssec-policy default и inline-signing yes, перезагрузите named, дождитесь подписи.
  • Снимите DNSKEY (dig DNSKEY +dnssec) и убедитесь, что появились RRSIG. Сгенерируйте DS через dnssec-dsfromkey.
  • Запустите delv @127.0.0.1 для записи зоны и найдите строку о валидации.
  • Разделите зону на internal и external views с match-clients и проверьте, что dig с localhost и с внешнего адреса отдают разные A-записи.
  • Сломайте время на слейве (date -s) и поймайте ошибку TSIG BADTIME в логах.
Контрольные вопросы
  • Чем allow-query отличается от allow-recursion и почему второе критично для безопасности?
  • Что именно защищает TSIG, а что - DNSSEC, и почему это не одно и то же?
  • Какую роль играют KSK, ZSK и DS-запись в цепочке доверия DNSSEC?
  • Почему для работы TSIG обязательна синхронизация времени между серверами?
  • Как реализуется split-horizon в BIND и почему важен порядок объявления views?
  • Какой современный механизм заменил ручной auto-dnssec в BIND 9.18+ и в чём его удобство?
👍2 ❤️3 🔥 😄 🤔
Аватара пользователя
coder_egor
Сообщения: 1
Зарегистрирован: 25 май 2026, 16:50

Re: Безопасность DNS-сервера [207.3]

Сообщение coder_egor »

А обязательно держать KSK и ZSK раздельно? Видел конфиги где одним ключом всё подписано через CSK, это норм или костыль?
👍 ❤️1 🔥 😄 🤔1
Аватара пользователя
kadett6
Сообщения: 1
Зарегистрирован: 11 май 2026, 01:10

Re: Безопасность DNS-сервера [207.3]

Сообщение kadett6 »

Поймал REFUSED на AXFR со слейва хотя ключ прописал - оказалось в name ключа была опечатка, регистр не совпал с мастером. Час убил, имена ключей чувствительны к регистру.
👍1 ❤️3 🔥 😄 🤔
Ответить
← Предыдущая глава
Зоны DNS: создание и сопровождение [207.2]
Следующая глава →
Веб-сервер Apache: базовая настройка [208.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость