Все мы знаем об открытых резольверах, этот вопрос как бы для обратной ситуации. У меня есть DNS-сервер, заблокированный для определенных CIDR acl trusted {[..]
options {
[..]
allow-query {
// Accept queries from our "trusted" ACL. We will
// allow anyone to query our master zones below.
// This prevents us from becoming a free DNS server
// to the masses.
trusted;
};
Это работает.
Однако он не останавливает зараженные узлы в разрешенных диапазонах для отправки поддельных (чаще всего типа ЛЮБОЙ) запросов. Они разрешаются, и ответ по-прежнему отправляется на поддельный IP-адрес, который его «запросил» (который обычно является целью злоумышленников).
Как запретить DNS-серверу разрешать домены, запрошенные вне доверенных диапазонов? Это вообще что-то должно делать bind?
Это не проблема, которую вы должны пытаться решить на уровне обслуживания.
Эти проблемы коренятся в дизайне сетевой топологии, стоящей перед вами. Попытка решить эти проблемы с самого сервера - проигрышная битва.
Вы можете использовать несколько подходов. Вы можете их объединить.
fail2ban
для динамической блокировки запрашивающих сетей. Из вашего вопроса видно, что у вас есть несколько компьютеров, зараженных программным обеспечением ботнета. Важно определить и очистить эти системы. Это выходит за рамки этого вопроса. Если ваши маршрутизаторы поддерживают это, подумайте об ограничении IP-адресов, с которых могут отправляться запросы.
Комментарии в отрывке из конфигурации в вопросе относятся к вашим серверам, авторитетно отвечающим для некоторых зон. Для сценария, когда злоумышленник злоупотребляет авторитетным сервером, имеет смысл настроить Ограничение скорости ответа чтобы смягчить это.
Однако в случае атак, злоупотребляющих сервером с включенной рекурсией, блокировка рекурсивного доступа к вашей собственной сети в сочетании с входная фильтрация лучший способ остановить это. (По предложению @ Andrew-B.)
Что касается конкретно BIND, важно понимать как разные allow-*
директивы конфигурации взаимодействуют когда вы переопределяете один из нескольких из них (без этого понимания не так очевидно, как, например, переопределение allow-query
влияет на другие директивы, такие как allow-recursion
).