如何將 DNS 請求與託管該網域的 Web 伺服器的請求關聯起來?

如何將 DNS 請求與託管該網域的 Web 伺服器的請求關聯起來?

我們註冊了一個網域名稱(例如「example.com」),我們想要查看誰正在嘗試解析該網域以及他向該網域的 Web 伺服器發送了什麼樣的請求。

為此,我們建立了一個名稱伺服器並收集 BIND 的日誌,以找出誰在查詢名稱伺服器來解析「example.com」(我們不關心人們透過快取解析網域名稱的情況)遞歸解析器中的資料)。我們也收集 Apache Web 伺服器的日誌。但問題是我們無法找出哪個 DNS 請求對應到哪個 Web 伺服器請求?

為了將這兩個日誌映射在一起,我正在考慮創建一個隨機子網域並將其作為每個DNS 請求的example.com 的CNAME 返回,然後配置Apache 將所有這些子網域重定向到“example.com”主頁。因此,如果某人請求該特定子網域,我知道相應的 DNS 查詢是什麼。

這是這樣做的正確方法嗎?有其他方法可以做到這一點嗎?

我很欣賞任何想法或想法。

答案1

您無法關聯 IP 位址。

這是因為您的權威名稱伺服器是由遞歸名稱伺服器查詢的,而不是由最終客戶端直接查詢的。因此,您將獲得客戶端使用的最後一個遞歸(它們可以連結)名稱伺服器的 IP 位址。

即使使用 EDNS 子網路用戶端選項,您最多也只能獲得一段 IP,而不是真正的用戶端 IP。

同樣,在 HTTP 前端,客戶端不一定直接聯繫您的網頁伺服器,他可以透過代理。

我已經回答了與該問題相關的另一個問題並提供了一些提示:我們可以根據請求更新 CNAME 嗎? 特別請參閱最後一段以及傑夫休斯頓所做的所有研究。

因此,您有另一種方法:只需向每個人提供www.example.com,但在內容中插入一些動態內容(1x1 像素圖像,或指向CSS 或JS 檔案的連結),並在主機名稱部分中插入一些唯一的標記。可以使用通配符將其綁定到您的名稱伺服器。無需任何 CNAME,您就可以輕鬆關聯存取:

  • 一些客戶去http://www.example.com/
  • 在回覆中,網頁伺服器會新增 a<img src="https://eecahquai5thuu9ji0iepha.tracking.example.net">並將其記錄在其日誌檔案中(因此這將唯一令牌與目前 HTTP 交換連結起來)
  • 配置權威名稱伺服器tracking.example.net(我建議您僅對區域使用單獨的區域,否則通配符可能充滿驚喜)以擁有通配符記錄;然後,您的名稱伺服器記錄檔中將包含此唯一令牌和關聯的 DNS 資料(遞歸解析器的 IP 等)
  • (並成為真正的網民)確實配置一個網頁伺服器,以適當的資源和內容類型回應此位址,即使它只是一個 1x1 像素的透明圖像。

相關內容