
У меня есть сервер имен, который доступен всем, так как онявляется авторитетным сервером имен для нескольких доменов.
В настоящее время сервер переполнен поддельными ANY
запросами типа isc.org, ripe.net и им подобными (этоизвестная распределенная DoS-атака).
Сервер запускает BIND и настроен allow-recursion
на мою локальную сеть, так что эти запросы отклоняются. В таких случаях сервер отвечает только разделами authority
и additional
ссылается на корневые серверы.
Можно ли настроить BIND так, чтобы он полностью игнорировал эти запросы, вообще не отправляя ответ?
решение1
Столкнувшись с той же проблемой, я решил игнорировать все рекурсивные запросы. Все резолверы отправляют нерекурсивный запрос, когда хотят использовать мой сервер как авторитетный. Только неправильно настроенные клиенты и злоумышленники, в моем случае, используют рекурсивные запросы.
К сожалению, я не нашел способа позволить BIND делать это, но если вам достаточно iptables, я использовал
iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
-m string --algo kmp --from 30 \
--hex-string "|01000001000000000000|" -j DROP
решение2
Я бы попробовал:
zone "." {
type redirect;
allow-query "none";
}
Ответы, направляющие клиентов на корневые серверы, контролируются зоной "перенаправления". Это должно указать ему не отвечать на них.
На это намекают в документации Bind9:http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
Вы можете заменить его "none"
на свою локальную подсеть.
Если у вас уже есть zone "."
декларация, просто дополните allow-query "none";
ее.
решение3
Вы пробовали заблокировать строку isc.org или заблокировать ее шестнадцатеричную строку?
Мне это помогло:
iptables -A ВВОД -p udp -m строка --hex-string "|03697363036f726700|" --algo bm -j ОТБРОС
решение4
Основная идея заключается в том, чтобы bind классифицировал ответ DNS как отклоненный, а затем использовал iptables для преобразования отклоненного в молчаливо проигнорированный.
Refused — это простая часть в разделе параметров named.conf:
allow-recursion { none;};
Или, конечно, ваши любимые списки контроля доступа для локальных исключений...
Далее сумасшедшая магия iptables, настройте или удалите "-o eth0" по мере необходимости. Эта команда предполагает стандартный 20-байтовый заголовок уровня IPv4 перед UDP.
iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP
Это ключи в поле флагов ответа DNS со следующим набором битов
- DNS-ответ
- Рекурсивный запрос
- Код ответа отклонен
Замечено сообщение журнала при запуске привязки в режиме отладки «Ошибка отправки ответа: хост недоступен», когда правило срабатывает, чтобы иметь некоторую обратную связь для тестирования.
Должен признать, что это все довольно бессмысленное занятие. Если нет усиления, злоумышленник может так же легко отразить TCP SYN. В конечном счете DNS сломан, просто нет жизнеспособного решения, кроме использования TCP или развертывания DNS-cookie Eastlake.