Назад | Перейти на главную страницу

Блокировать неправильно настроенные записи DNS в BIND DNS Cache

Я использую поисковый робот с собственным кешем BIND DNS. Наш код разрешает использование нашего DNS-кеша и делает запрос GET с помощью библиотеки запросов Python.

Проблема в том, что многие FQDN настроены неправильно и указывают на IP-адреса RFC1918 или IP-адреса обратной связи, например 127.0.0.1 или 10.0.0.0/8. В результате наш сканер пытался подключить эти IP-адреса, и в результате получился отчет о сканировании из нашего центра обработки данных.

Мы внесли изменения в краулер, и теперь он сначала разрешает IP для полного доменного имени и пропускает его, если IP находится в частных / петлевых / зарезервированных диапазонах.

После прослушивания с помощью tcpdump я обнаружил, что на частные IP-адреса все еще идет трафик. Я предполагаю, что они возникают из-за перенаправления HTTP, потому что мы проверяем исходное полное доменное имя, но мы не проверяем перенаправленные узлы, поскольку эта часть происходит в библиотеке запросов Python.

Есть ли у BIND возможность заблокировать разрешение частных, замкнутых или зарезервированных IP-адресов? Можно ли настроить его так, чтобы он возвращал какую-то ошибку "не решена"?

Редактировать: Я попытался сбросить кеш BIND в файл и проверил его, теперь я уверен, что это происходит из-за перенаправления HTTP, но изменить код непросто, и я ищу ярлык, например, настройку BIND, или я заблокирую их на брандмауэре.

С BIND вы можете использовать Зона политики реагирования (RPZ) возможность блокировки разрешения адресных записей (A/AAAA) со ссылкой на определенные адреса.

В частности, РПЗ-ИП тип записи актуален:

РПЗ-ИП

IP-триггеры - это IP-адреса в записи A или AAAA в разделе ANSWER ответа. Они кодируются как триггеры клиентского IP, за исключением субдоменов rpz-ip.

В качестве примера использования в руководстве используется следующее:

; IP policy records that rewrite all responses containing A records in 127/8
;       except 127.0.0.1
8.0.0.0.127.rpz-ip      CNAME   .
32.1.0.0.127.rpz-ip     CNAME   rpz-passthru.

Общее представление о конфигурации кратко изложено в руководстве следующим образом:

Например, вы можете использовать этот оператор option

response-policy { zone "badlist"; };

и это заявление о зоне

zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };

с этим файлом зоны

$TTL 1H 
@                       SOA LOCALHOST. named-mgr.example.com    (1 1h 15m 30d 2h)
                        NS  LOCALHOST.
; [snip]

; IP policy records that rewrite all responses containing A records in 127/8
;       except 127.0.0.1
8.0.0.0.127.rpz-ip      CNAME   .
32.1.0.0.127.rpz-ip     CNAME   rpz-passthru.

; [snip]


Прочтите подробности, чтобы понять общую настройку, а также довольно специфическую семантику внутри зоны RPZ! (Он имеет обычный синтаксис зоны, но, как вы можете видеть, некоторые специальные имена имеют очень специфическое значение.)

Я предполагаю, что они возникают из-за перенаправления HTTP, потому что мы проверяем исходное полное доменное имя, но мы не проверяем перенаправленные узлы, поскольку эта часть происходит в библиотеке запросов Python.

Я надеюсь, что вы очистили кеш DNS BIND после того, как изменили свой код. Двигаемся дальше ...

Убийца говорит: «Я полагал». Вы должны убедиться. Сначала проверьте, есть ли какие-либо частные IP-адреса в вашем кеше BIND с rndc dumpdb. Найдите в этом файле преступников.

Если есть: Очистите кеш. Посмотрим, вернутся ли они. Я не уверен, что частные IP-адреса будут в вашем кеше в результате перенаправления HTTP. Для общедоступного веб-сайта было бы очень необычно иметь много экземпляров перенаправления HTTP, которое приводит посетителя к имени хоста, которое разрешается в IP-адрес RFC 1918. Частные IP-адреса в публичных зонах ... содрогаться.

Если нет: Затем трафик на частные IP-адреса поступает в приложение в другом месте. Возможно, кеш приложения какой-то. Что-то в памяти, о чем вы не подозреваете. Возможно, это совсем другой процесс, а может, это все-таки не ваше приложение.

Есть ли у BIND возможность заблокировать разрешение частных, замкнутых или зарезервированных IP-адресов? Можно ли настроить его так, чтобы он возвращал какую-то ошибку "не решена"?

Нет. BIND разрешает, и поэтому в вашем сценарии у вас есть теоретическое условие гонки, где: вам не нужен IP-адрес, но чтобы узнать, является ли это IP-адресом, который вам не нужен, вы должны его получить. Вам нужен обратный DNS RPZ, которого не существует.

Я не прав. Да, вы, вероятно, сможете использовать RPZ-IP, как указывает знаменитый Хокан Линдквист. Проверь это: http://ftp.isc.org/isc/bind9/cur/9.10/doc/arm/Bv9ARM.ch06.html#id2589969 Также проголосовать за его ответ.

В этом случае вам нужно втянуть логику в приложение и более тщательно проверять каждое имя хоста в соответствии с вашим локальным кешем и запретить поисковому роботу переходить на адреса RFC 1918.

Давайте разберемся с тем, что вы говорите, немного ближе:

... мы не проверяем перенаправленные хосты ...

Поэтому проверьте перенаправленные хосты, и проблема будет решена без каких-либо дополнительных усилий. знак равно