Güvenlik

Proxy ve DNS sızıntısı testi: ad çözümlemesi nereye gidiyor?

Proxy kullanıyorsanız bile alan adı sorguları yerel DNS çözümleyicinize gidiyor olabilir. Sızıntının nasıl oluştuğunu, nasıl test edildiğini ve nasıl kapatıldığını adım adım gösteriyoruz.

Kategori
Güvenlik
Okuma süresi
9 dk okuma
Yayın:

DNS sızıntısı, bir proxy üzerinden bağlanmanıza rağmen ziyaret ettiğiniz alan adlarının sorgusunun proxy üzerinden değil, yerel ağınızın ya da internet servis sağlayıcınızın DNS çözümleyicisine gitmesidir. Trafik proxy'den geçer ama "hangi siteye gidiyorsunuz?" bilgisi yerelde açıkça görünür. Bu rehber sızıntının nasıl oluştuğunu, proxy ve DNS sızıntısı testini kendi ortamınızda nasıl yapacağınızı ve nasıl kapatacağınızı anlatıyor.

Sızıntı nasıl oluşur?

Bir web adresine ulaşmak için iki iş yapılır: alan adı IP adresine çevrilir (DNS), sonra bağlantı kurulur. Bu iki işin kim tarafından yapıldığı, kullandığınız proxy türüne ve istemci ayarına göre değişir.

KurulumAd çözümlemesini kim yapar?Sızıntı riski
HTTP proxy, düz HTTP isteğiProxy (istek alan adını taşır)Düşük, istemci kusursuz davranıyorsa
HTTP proxy, HTTPS için CONNECTProxy (CONNECT satırında ad vardır)Düşük
SOCKS5, socks5:// şemasıİstemci, yereldeYüksek: ad yerel DNS'e gider
SOCKS5, socks5h:// şemasıProxyDüşük
Proxy dışında kalan uygulama/hizmetYerel sistemProxy'yi hiç kullanmadığı için tam sızıntı
Konsept · eğitim amaçlı

SOCKS5 (RFC 1928): yöntem pazarlığı, isteğe bağlı kullanıcı adı/parola (RFC 1929), bağlantı isteği ve yanıt.

SOCKS5 proxy mesaj sırasıSOCKS5 proxy için istemci, proxy ve hedef arasındaki 8 adımlı mesaj sırası. Şu an 1. adım: İstemci desteklediği yöntemleri sunar. Tüm adımlar aşağıdaki gizli listede yazılıdır.
  1. 1. İstemci → Proxy: İstemci desteklediği yöntemleri sunar
  2. 2. Proxy → İstemci: Proxy bir yöntem seçer
  3. 3. İstemci → Proxy: Kullanıcı adı ve parola gönderilir (isteğe bağlı)
  4. 4. Proxy → İstemci: Proxy kimlik bilgisini onaylar (isteğe bağlı)
  5. 5. İstemci → Proxy: İstemci bağlantı ister
  6. 6. Proxy → Hedef: Proxy hedefe TCP bağlantısı açar
  7. 7. Proxy → İstemci: Proxy sonucu bildirir
  8. 8. İstemci → Hedef: Veri proxy üzerinden aktarılır
adım 1/8 · İstemci → Proxy

Düz bağlantı

İstemci desteklediği yöntemleri sunar

VER
0x05
NMETHODS
sunulan yöntem sayısı
METHODS
0x00 kimlik yok · 0x02 kullanıcı/parola

SOCKS5 kendi başına şifrelemez. socks5:// ile ad istemcide, socks5h:// ile proxy’de çözülür. Kontrol aracımız yalnızca TCP CONNECT sınar.

SOCKS5 isteğinde hedef bir alan adı (ATYP 3) olarak bildirilirse çözümleme proxy'ye bırakılır; IP (ATYP 1/4) olarak bildirilirse ad önceden yerelde çözülmüştürKonsept animasyonu

SOCKS5 protokolü adresi üç biçimde taşıyabilir: IPv4, IPv6 ya da alan adı. socks5h şeması istemciye "alan adını çözmeden olduğu gibi gönder" der; socks5 ise önce yerelde çözer ve proxy'ye bir IP verir. Aynı proxy, aynı hedef; tek fark şemadır. Ayrıntılı karşılaştırma için HTTP ve SOCKS5 farkı rehberine bakın.

Sızıntının diğer kaynakları

  • Proxy kullanmayan uygulamalar: Sistem ayarını okumayan bir uygulama ya da arka plan hizmeti doğrudan çıkar ve yerel DNS'i kullanır.
  • Tarayıcıda şifreli DNS (DoH): Etkin olduğunda sorgular 53 portunda görünmez ama bir DoH hizmetine gidebilir. Tarayıcı hedef adı proxy'ye bırakıyorsa sorun yoktur; emin olmak için testi tekrarlayın.
  • IPv6: Proxy yalnızca IPv4 taşıyorsa ve makinenizde IPv6 etkinse bazı bağlantılar proxy'yi hiç kullanmadan IPv6 üzerinden çıkabilir. IPv4 / IPv6 bilgisi aracı bağlantınızın durumunu gösterir.
  • WebRTC: DNS değil, gerçek IP'nizi gösterebilen ayrı bir tarayıcı özelliğidir. DNS sızıntısı testini WebRTC testiyle karıştırmayın.
  • Ön çözümleme (prefetch): Bazı tarayıcılar sayfadaki bağlantıların adlarını önceden çözer; ayarı proxy ile uyumlu olmayabilir.

Test 1: curl ile şema farkını görmek

En basit yöntem, yerelde asla çözülemeyecek bir alan adı kullanmaktır. .invalid uzantısı bu amaç için ayrılmıştır ve hiçbir DNS çözümleyicisinde sonuç döndürmez. İki şemayla aynı komutu çalıştırdığınızda hatanın kaynağı hangi tarafın ad çözdüğünü gösterir.

Bash
curl -sS -v --max-time 15 -x socks5://KULLANICI:[email protected]:1080 http://yerel-cozulemez.invalid/
curl -sS -v --max-time 15 -x socks5h://KULLANICI:[email protected]:1080 http://yerel-cozulemez.invalid/
socks5 ile socks5h'ı karşılaştırma
  • socks5:// ile hata, proxy'ye hiç ulaşılmadan "Could not resolve host" olur: ad yerelde çözülmeye çalışılmıştır.
  • socks5h:// ile bağlantı proxy'ye gider ve hata bir SOCKS5 bağlantı hatası olarak döner: çözümlemeyi proxy denemiş, bulamamıştır.

Test 2: 53 portunu izleyerek gerçek sızıntıyı görmek

Kesin sonuç, ağ arayüzünden çıkan DNS paketlerine bakarak alınır. Yöntem: dinlemeyi başlatın, proxy'li oturumda hedef siteyi açın, dinlemede o alan adının sorgusu görünüyor mu bakın.

  1. 1

    Yerel DNS önbelleğini temizleyin

    Aksi halde önceden çözülmüş adlar yeniden sorulmaz ve sızıntıyı kaçırırsınız. Windows'ta ipconfig /flushdns; macOS'ta sudo dscacheutil -flushcache; systemd-resolved kullanan Linux'ta resolvectl flush-caches.

  2. 2

    DNS paketlerini izleyin

    Linux/macOS terminalinde aşağıdaki tcpdump komutunu çalıştırın. Windows'ta Wireshark'ı açıp görüntü filtresine dns yazın.

  3. 3

    Proxy'li tarayıcıdan test alan adını ziyaret edin

    Daha önce ziyaret etmediğiniz bir alan adı seçin ki önbellekte olmasın.

  4. 4

    Sonucu yorumlayın

    Alan adı için bir sorgu çıkışı görüyorsanız ad yerelde çözülüyor demektir (sızıntı). Hiç sorgu görünmüyorsa çözümleme proxy'de yapılıyordur. DoH etkinse sorgular 53 portunda görünmez; tarayıcının güvenli DNS ayarını geçici olarak kapatarak testi tekrarlayın.

Bash
sudo tcpdump -i any -n udp port 53 or tcp port 53
Linux ve macOS: DNS sorgularını canlı izleme
Metin
ipconfig /flushdns
ipconfig /displaydns | findstr /i "ziyaret-ettiginiz-alan-adi"
Windows: önbelleği temizleyin, ziyaretten sonra yerelde çözülen adları listeleyin

Sızıntıyı kapatma

  1. 1SOCKS5 kullanıyorsanız şemayı `socks5h://` yapın. Python requests'te socks5h://KULLANICI:[email protected]:1080, cURL'de -x socks5h://... yazın.
  2. 2Firefox'ta SOCKS v5 seçiliyken "DNS sorgularını proxy üzerinden yap" kutusunu işaretleyin. Adımlar için proxy nasıl ayarlanır rehberine bakın.
  3. 3HTTP proxy kullanıyorsanız istemcinin hedefi yerelde çözüp IP'ye bağlanmadığından emin olun; kendi yazdığınız kodda hedef olarak IP değil alan adı verin.
  4. 4Proxy dışında kalan uygulamalar için sistem geneli proxy ayarlayın ya da o uygulamanın kendi proxy seçeneğini kullanın.
  5. 5IPv6 çıkışını denetleyin; proxy IPv6 taşımıyorsa makinenizde IPv6'yı geçici olarak kapatıp testi tekrarlayın.
Python
import requests

proxy = "socks5h://KULLANICI:[email protected]:1080"  # pip install "requests[socks]"
r = requests.get("https://example.com/", proxies={"http": proxy, "https": proxy}, timeout=15)
print(r.status_code)
requests ile socks5h: ad çözümlemesi proxy'de yapılır

Sonucu DNS araçlarıyla çapraz doğrulamak

Bazı alan adları, çözümleyiciye göre farklı IP döner (coğrafi yönlendirme). Proxy üzerinden ulaşılan IP ile yerel çözümleyicinizin döndürdüğü IP farklıysa ve bağlantı yerel IP'ye değil proxy'nin çözdüğü IP'ye kurulduysa çözümleme proxy'de yapılıyordur. DNS Sorgulama aracı bir alan adı için genel çözümleyicilerden gelen kayıtları gösterir; bunu kendi yerel sonuçlarınızla karşılaştırabilirsiniz. Bu yöntem bir ipucu verir, paket yakalama testi kadar kesin değildir.

Proxy'nin kendisinin çalıştığından emin değilseniz önce proxy kontrol aracını kullanın; bağlantı sorunlarıyla DNS sızıntısını karıştırmamak için proxy bağlantı hataları rehberi de yardımcı olur.

Önce proxy bağlantınızın çalıştığını doğrulayın, sonra DNS testini yapın.

Proxy Kontrol Et

Bu yazıda kullanılan araçlar

Sık sorulan sorular

İlgili rehberler