У меня есть общедоступный сервер имен, поскольку он является официальным сервером имен для пары доменов .
В настоящее время сервер ANY
заполнен поддельными запросами типа isc.org, pale.net и аналогичными (это известная распределенная атака DoS ).
Сервер запускает BIND и allow-recursion
настроил мою локальную сеть, чтобы эти запросы были отклонены. В таких случаях сервер отвечает только с authority
и additional
секции со ссылкой на корневые серверы.
Могу ли я настроить BIND так, чтобы он полностью игнорировал эти запросы, не отправляя ответ вообще?
источник
iptables -t raw -S PREROUTING
. Вывод: с-P PREROUTING ACCEPT
последующим-A PREROUTING -i eth0 -p udp -m udp --dport 53 -m string --hex-string "|01000001000000000000|" --algo kmp --from 30 --to 65535 -j DROP
. Я проверил, что он работает правильноhost -ar exampledomain.com dns-server.example.net
. Конечно, он не работал правильно, пока я не добавил-r
опцию.-r
выбор имеет значение. Мне лично не нравится, что простыеhost
запросы больше не работают, и это может быть очень запутанным. Тем не менее, это, вероятно, правильный (пока лучший) ответ, и я дам вам вознаграждение, поскольку срок его действия истекает, даже если я продолжу использовать свой собственный подход, отфильтровывая OUTPUT.Я бы попробовал:
Ответы, направляющие клиентов к корневым серверам, контролируются зоной «перенаправления». Это должно сказать ему не отвечать на те.
На это намекают документы Bind9: http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
Вы можете заменить его
"none"
своей локальной подсетью.Если у вас уже есть
zone "."
объявление, просто добавьтеallow-query "none";
к нему.источник
zone "." { type hint; file "/etc/bind/db.root"; };
объявление с db.root, перечисляющее корневые серверы. Удаление этого объявления останавливает ответы для сторонних доменов, но сервер, тем не менее, отвечает «сбой сервера» и, таким образом, все еще может использоваться для DoS.allow-query "none";
в конфигzone "."
?Как правило, я бы предложил:
Включите журналы привязки и запишите ips, который получает отклоненный ответ. Установите программу fail2ban, добавьте действие blackhole: http://pastebin.com/k4BxrAeG (поместите правило в файл в /etc/fail2ban/actions.d)
Создайте файл фильтра связывания в /etc/fail2ban/filter.d примерно так (нужно отладить!)
Отредактируйте fail2ban.conf, добавьте раздел:
Надеюсь, это поможет!
источник
Основная идея: пусть bind классифицирует ответ DNS как Отказанный, а затем использует iptables для преобразования Отказанного в игнорируемое.
Отказаться - это простая часть в разделе параметров named.conf:
Или, конечно, ваши любимые ACL для локальных исключений ...
Далее сумасшедшая магия iptables, настройте или удалите "-o eth0" по мере необходимости. Эта команда предполагает стандартный 20-байтовый заголовок уровня IPv4 до UDP.
Это ключи в поле флагов ответа DNS со следующими установленными битами
Заметил сообщение журнала, выполняющее связывание в отладке «ошибка отправки ответа: хост недоступен», когда правило соответствует, чтобы иметь некоторую обратную связь для тестирования.
Должен признать, что это все несколько бессмысленное упражнение. Если усиление отсутствует, злоумышленник может так же легко отразить TCP SYN. В конечном итоге DNS не работает, просто нет жизнеспособного решения, кроме использования TCP или развертывания файлов cookie Eastlake DNS.
источник
Вы пытались заблокировать строку isc.org или заблокировать шестнадцатеричную строку для нее?
Это сработало для меня:
источник
iptables -A OUTPUT -p udp -m string -hex-string "|726f6f742d73657276657273|" –algo bm –to 65535 -j DROP
но я бы действительно предпочел решение, основанное только на конфигурации BIND, если это вообще возможно.'bnrexex.www.sf97.net/A/IN' 'whzpkacpxpiuycm.www.tpa.net.cn/A/IN'
Эта атака называется усиленным отказом в обслуживании. Вы должны правильно настроить привязку, но этот трафик не должен в первую очередь попасть на вашу привязку. Заблокируйте его на первом сетевом устройстве, которое способно сделать это в вашей сети. У меня была такая же проблема, и я справился с ней по правилу глухого фырканья:
источник
Во-первых, я знаю, что это старый вопрос, но ...
Я десятилетиями управлял своим собственным авторитетным, не рекурсивным DNS-сервером, но никогда не был жертвой каких-либо DNS-атак DDoS - до тех пор, пока я не переключился на нового интернет-провайдера. Тысячи поддельных DNS-запросов наводнили мои журналы, и я был действительно раздражен - не столько о влиянии на мой сервер, сколько о том, что он загромождает мои журналы и неприятном ощущении злоупотребления. Похоже, что злоумышленник пытается использовать мой DNS в « Атаке авторитетного сервера имен ».
Поэтому я решил, что, хотя я ограничиваю рекурсивные запросы своей внутренней сетью (отказывая во всех остальных), я скорее трачу свои циклы ЦП на сопоставление строк в iptables, чем на отправку отрицательных ответов на поддельные IP-адреса (меньше беспорядка в моих журналах, меньше сетевой трафик и мой более высокий уровень удовлетворенности).
Я начал с того, что поступил так же , как и все остальные , выяснил, какие доменные имена запрашиваются, и создал совпадение строк в этом домене с целевым DROP. Но вскоре я понял, что получу огромное количество правил, каждое из которых потребляет циклы процессора. Так что делать? Поскольку я не запускаю рекурсивный сервер имен, я подумал, что мог бы сопоставить действительные зоны, для которых я уполномочен, и отбросить все остальное.
Моя политика по умолчанию в iptables - ПРИНЯТЬ, если ваша политика DROP, вам, вероятно, нужно внести некоторые изменения, если вы хотите использовать следующее решение.
Я храню конфигурацию своей зоны в отдельном файле (/etc/bind/named.conf.local), давайте использовать это в качестве примера:
Обратите внимание на комментарий «// Private» в моих первых двух зонах, я использую его в следующем сценарии, чтобы исключить их из списка допустимых зон.
Запустите приведенный выше скрипт с файлом конфигурации зоны в качестве аргумента.
Сохраните вывод в сценарии, передайте его в оболочку или скопируйте и вставьте в свой терминал, чтобы создать новую цепочку и начать отфильтровывать все недействительные DNS-запросы.
запустить / SBIN / Iptables -L DNSvalidate -nvx видеть пакетов (и байтов) счетчики по каждому правилу в новой цепи (вы можете захотеть , чтобы переместить зону с большинством пакетов в верхней части списка , чтобы сделать его более эффективным).
В надежде, что кто-то найдет это полезным :)
источник