Привет, сетевой друг! Сегодня разберём DNS zone transfer - когда AXFR открыт всем и как это закрыть.🟣Что такое zone transfer: механизм репликации DNS-зоны между primary и secondary серверами. Primary отдаёт полный список всех записей зоны через AXFR-запрос. Нужен для синхронизации - secondary получает актуальную копию и отвечает на запросы клиентов.
🟣Проблема такая: если AXFR не ограничен по IP, любой может запросить полный дамп зоны и получить карту всей инфраструктуры - все поддомены, внутренние серверы, почтовые хосты, служебные записи:
# Проверяем открыт ли AXFR
dig axfr example.com @ns1.example.com
# Если в ответе идут все записи зоны - проблема есть
# Нормальный ответ: Transfer failed или REFUSED
🟣Диагностируем: смотрим текущие настройки на BIND:
# Проверяем конфиг
named-checkconf /etc/bind/named.conf
# Смотрим логи запросов на transfer
grep "transfer" /var/log/named/named.log
grep "AXFR" /var/log/named/queries.log
🟣Закрываем AXFR в BIND: разрешаем только secondary серверам:
# /etc/bind/named.conf.options
options {
allow-transfer { none; }; # глобально запрещаем
};
# /etc/bind/named.conf.local
zone "example.com" {
type primary;
file "/etc/bind/zones/example.com.db";
allow-transfer {
192.168.1.2; # только наш secondary
key "transfer-key"; # или через TSIG-ключ
};
notify yes;
};
🟣Надёжнее: TSIG-аутентификация для zone transfer: IP-адрес можно подделать, TSIG-ключ нет:
# Генерируем ключ
tsig-keygen -a hmac-sha256 transfer-key > /etc/bind/transfer.key
# Подключаем в конфиг
include "/etc/bind/transfer.key";
zone "example.com" {
allow-transfer { key "transfer-key"; };
};
На secondary прописываем тот же ключ и используем его при запросе зоны.
🟣Проверяем что закрыли правильно:
# С посторонней машины
dig axfr example.com @ns1.example.com
# Должно вернуть: Transfer failed
# С авторизованного secondary
dig axfr example.com @ns1.example.com -k transfer.key
# Должно вернуть полную зону
🟣Дополнительно ограничиваем NOTIFY только на легитимные secondary:
zone "example.com" {
also-notify { 192.168.1.2; };
allow-notify { 192.168.1.1; }; # кто может уведомлять нас
};Без этого атакующий может отправить поддельный NOTIFY и спровоцировать unnecessary transfer-запросы.
Серверная Админа | Бункер Хакера | #DNS #networking