Я использую поисковый робот с собственным кешем 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.
Давайте разберемся с тем, что вы говорите, немного ближе:
... мы не проверяем перенаправленные хосты ...
Поэтому проверьте перенаправленные хосты, и проблема будет решена без каких-либо дополнительных усилий. знак равно