Как связать DNS-запросы с запросами к веб-серверу, на котором размещено это доменное имя?

Как связать DNS-запросы с запросами к веб-серверу, на котором размещено это доменное имя?

Мы зарегистрировали доменное имя (например, «example.com») и хотим узнать, кто пытается разрешить доменное имя и какие запросы он отправляет на веб-сервер этого доменного имени.

Для этой цели мы настраиваем сервер имен и собираем логи BIND, чтобы узнать, кто запрашивает сервер имен для разрешения 'example.com' (нас не интересуют случаи, когда люди разрешают доменное имя с помощью кэшированных данных в рекурсивных резолверах). Мы также собираем логи веб-сервера Apache. Но проблема в том, что мы не можем узнать, какой запрос DNS соответствует какому запросу веб-сервера?

Чтобы сопоставить эти два журнала, я думал создать случайный поддомен и возвращать его как CNAME example.com для каждого запроса DNS, а затем настроить Apache для перенаправления всех этих поддоменов на главную страницу «example.com». Таким образом, если кто-то запросит этот конкретный поддомен, я буду знать, какой будет соответствующий запрос DNS.

Правильный ли это способ сделать это? Есть ли другой способ сделать это?

Я ценю любые мысли и идеи.

решение1

Вы не можете установить корреляцию по IP-адресу.

Это потому, что ваш авторитетный сервер имен запрашивается рекурсивными серверами имен, а не конечными клиентами напрямую. Таким образом, вы получите IP-адрес последнего рекурсивного (они могут быть связаны в цепочку) сервера имен, используемого клиентом.

Даже с опцией EDNS Subnet Client вы получите в лучшем случае блок IP-адресов, а не настоящий клиентский IP-адрес.

Точно так же, на HTTP-фронте, ваш веб-сервер не обязательно должен подключаться к клиенту напрямую, он может использовать прокси-сервер.

Я уже ответил на ваш другой вопрос, связанный с этим, с некоторыми подсказками:Можем ли мы обновить CNAME по запросу? Особое внимание уделите последнему абзацу и всем исследованиям, проведенным Джеффом Хьюстоном.

У вас есть другой способ: просто дайте всем, www.example.comно вставьте в контент что-то динамическое (либо изображение 1x1 пиксель, либо ссылку на файл CSS или JS), с каким-то уникальным токеном в части имени хоста. Это можно привязать к вашим серверам имен с помощью подстановочного знака. Без всякого CNAME вы сможете легко сопоставить доступ:

  • какой-то клиент идет кhttp://www.example.com/
  • В ответе веб-сервер добавляет <img src="https://eecahquai5thuu9ji0iepha.tracking.example.net">и записывает это в свой лог-файл (таким образом, это связывает уникальный токен с текущим HTTP-обменом)
  • настройте авторитетные серверы имен tracking.example.net(я рекомендую вам использовать отдельную зону только для зоны, так как в противном случае подстановочные знаки могут быть полны сюрпризов) для создания записи с подстановочными знаками; тогда в файлах журналов сервера имен будет этот уникальный токен и связанные с ним данные DNS (IP-адрес рекурсивного преобразователя и т. д.)
  • (и чтобы быть настоящим пользователем сети) настройте веб-сервер, отвечающий по этому адресу с соответствующим ресурсом и типом контента, даже если это всего лишь прозрачное изображение размером 1x1 пиксель.

Связанный контент