WebRTC ve DNS Sızıntısı Nedir, Nasıl Önlenir?

Yayın tarihi:

11 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Tarayıcı penceresinden proxy'ye giden kablonun yanında DNS ve IP bilgisini dışarı taşıyan kesik bir sızıntı kablosu

Tarayıcınıza proxy tanımladınız, IP kontrol sayfası proxy'nin adresini gösteriyor ve her şey yolunda görünüyor. Ama aynı tarayıcıda açılan bir sayfa, birkaç satır JavaScript ile gerçek IP adresinizi yine de öğrenebilir. Bunun iki yaygın yolu vardır: WebRTC ve DNS sorguları. İkisi de proxy'nin kapsadığı HTTP trafiğinin dışında çalıştığı için proxy ayarından etkilenmeyebilir.

Bu yazıda IP sızıntısının ne olduğunu, WebRTC'nin gerçek adresi hangi mekanizmayla açığa çıkardığını, DNS sızıntısının nerede oluştuğunu ve ikisini nasıl test edeceğinizi anlatıyoruz. Ardından Chrome ve Firefox'ta sızıntıyı kapatan ayarları, SOCKS5'te uzak DNS çözümlemesinin önemini ve IP dışında konumunuzu ele veren diğer sinyalleri ele alıyoruz. Yazının sonunda tek sayfalık bir kontrol listesi var.

IP sızıntısı nedir?

IP sızıntısı, proxy veya VPN kullanırken gerçek IP adresinizin trafiğin bir kısmı üzerinden görünür hâle gelmesidir. Sızıntı, proxy'nin çalışmadığı anlamına gelmez. Web sayfalarının HTTP istekleri proxy'den geçer ve hedef site bu isteklerde proxy'nin adresini görür. Sorun, tarayıcının HTTP dışında başka ağ bağlantıları da kurabilmesidir.

Proxy ayarı tarayıcıda genellikle yalnızca HTTP ve HTTPS isteklerini kapsar. Tarayıcının kurduğu diğer bağlantılar şunlardır:

  • WebRTC: Görüntülü görüşme, ekran paylaşımı ve eşler arası veri aktarımı için UDP üzerinden doğrudan bağlantı.
  • DNS sorguları: Alan adlarını IP adresine çevirmek için işletim sisteminin veya tarayıcının DNS sunucusuna gönderdiği sorgular.
  • Tarayıcı eklentileri ve uygulama içi bağlantılar: Kendi ağ ayarını kullanan bileşenler.

Bir site, bu kanallardan birinde gerçek adresinizi görürse proxy'nin gösterdiği adresle karşılaştırabilir. İki adresin farklı ülkelerden gelmesi, ziyaretçinin proxy kullandığını açıkça gösterir. Proxy'nin temel çalışma mantığını Proxy Sunucu Nedir ve Nasıl Çalışır? yazımızda anlattık.

WebRTC gerçek IP'yi nasıl gösterir?

WebRTC, iki tarayıcının bir sunucu üzerinden geçmeden doğrudan konuşabilmesi için tasarlanmıştır. Bunun için her tarayıcının kendisine ulaşılabilecek adresleri bilmesi ve karşı tarafa bildirmesi gerekir. Bu adreslere ICE adayı (candidate) denir ve bulunma süreci RFC 8445 ile tanımlanır.

Bir sayfa WebRTC bağlantısı başlattığında şu adımlar gerçekleşir:

  1. Sayfa bir RTCPeerConnection oluşturur. Kullanıcıdan izin istemesi gerekmez; kamera veya mikrofon açılmaz. Yalnızca bir veri kanalı istemek yeterlidir.
  2. Tarayıcı yerel adaylarını toplar. Bilgisayarın ağ arayüzlerindeki adresler (host adayları). Güncel tarayıcılar yerel adresi doğrudan göstermek yerine xxxx.local biçiminde rastgele bir adla gizler.
  3. Tarayıcı bir STUN sunucusuna UDP paketi gönderir. STUN sunucusu, paketin geldiği genel IP adresini ve portu geri bildirir. Bu adres srflx (server reflexive) adayı olarak kaydedilir.
  4. UDP paketi proxy'den geçmez. HTTP proxy yalnızca HTTP trafiğini taşır; tarayıcı STUN paketini doğrudan ağ arayüzünden gönderir. STUN sunucusu da paketin gerçek genel IP adresinizden geldiğini görür.
  5. Adaylar sayfaya bildirilir. JavaScript onicecandidate olayıyla aday listesini okur ve srflx adayındaki genel IP adresini kendi sunucusuna gönderebilir.

Sonuçta sayfa, HTTP istekleriyle proxy'nin adresini, WebRTC ile gerçek adresinizi görür.

Tarayıcıların WebRTC'de hangi adresleri açığa çıkarabileceği, RFC 8828 belgesinde dört mod olarak tanımlanır: bütün arayüzleri kullanmak, yalnızca varsayılan rotayı ve ilgili yerel adresi kullanmak, yalnızca varsayılan rotanın genel adresini kullanmak ve UDP'yi tamamen proxy'ye zorlamak. Chrome ve Firefox'taki ayarlar bu modlara karşılık gelir.

DNS sızıntısı nedir?

Bir web sitesine bağlanmadan önce alan adının IP adresine çevrilmesi gerekir. DNS sızıntısı, bu sorgunun proxy üzerinden değil, kendi internet sağlayıcınızın veya yerel ağınızın DNS sunucusu üzerinden yapılmasıdır.

DNS sızıntısının iki sonucu vardır:

  • Hangi sitelere gittiğiniz yerel ağdan görülür. İnternet sağlayıcınız, iş yeri ağı veya aynı Wi-Fi ağındaki biri, proxy kullanıyor olsanız bile hangi alan adlarını sorguladığınızı görebilir.
  • Hedef site farklı bir sunucu adresi verebilir. CDN kullanan siteler DNS sorgusunu yapan sunucunun konumuna göre en yakın sunucuyu döndürür. Sorgu Türkiye'den giderken istek Almanya'daki bir proxy'den çıkarsa, site size uzak bir sunucuya yönlendirilmiş olursunuz ve konum tutarsızlığı oluşur.

DNS sızıntısı en çok şu durumlarda oluşur:

  • SOCKS5 proxy'de istemcinin alan adını kendisi çözüp proxy'ye yalnızca IP adresi göndermesi.
  • Proxy'nin yalnızca tarayıcıda tanımlı olduğu, diğer uygulamaların sistem DNS'ini kullandığı durumlar.
  • VPN veya proxy yazılımının işletim sisteminin DNS ayarını değiştirmemesi.

HTTP ve HTTPS proxy'lerde tarayıcı CONNECT ornek.com:443 isteğiyle alan adını proxy'ye gönderir ve çözümlemeyi proxy yapar. Bu yüzden tarayıcıdaki web trafiği için HTTP proxy, DNS sızıntısı açısından daha az risklidir. İki protokolün bu konudaki farkını SOCKS ve HTTP Proxy Farkı yazımızda anlattık.

WebRTC ve DNS sızıntısı nasıl test edilir?

Sızıntıyı test etmek için hazır test sayfaları kullanılabilir, ama ne aradığınızı bilmek için testi bir kez kendiniz yapmanız öğreticidir.

WebRTC testi

Proxy açıkken tarayıcıda herhangi bir sayfa açın, geliştirici araçlarının konsolunu (F12) açın ve şu kodu çalıştırın:

javascript
const pc = new RTCPeerConnection({ iceServers: [{ urls: "stun:stun.l.google.com:19302" }] });
pc.createDataChannel("test");
pc.onicecandidate = (e) => {
  if (e.candidate) console.log(e.candidate.candidate);
};
await pc.setLocalDescription(await pc.createOffer());

Konsolda birkaç satır aday görürsünüz. Aramanız gereken, içinde typ srflx geçen satırdır. O satırdaki IP adresi:

  • Proxy'nin çıkış IP adresiyle aynıysa veya hiç srflx satırı yoksa WebRTC sızıntısı yoktur.
  • Gerçek IP adresinizse WebRTC sızıntısı vardır.

Gerçek IP adresinizi bilmiyorsanız proxy kapalıyken bir IP kontrol sayfası açarak öğrenebilirsiniz.

DNS testi

DNS sızıntısı tarayıcıdan tek başına ölçülemez, çünkü sorgunun hangi DNS sunucusundan geldiğini ancak alan adının sahibi görür. Bu yüzden DNS sızıntı testi yapan sayfalar, rastgele üretilmiş alt alan adlarını sorgulatıp hangi DNS sunucularının bu sorguları yaptığını size gösterir. Sonuçta kendi internet sağlayıcınızın DNS sunucularını görüyorsanız sorgular proxy'den geçmiyordur.

Komut satırında SOCKS5 proxy'nin DNS davranışını cURL'ün ayrıntılı çıktısıyla görebilirsiniz:

bash
# Yerel çözümleme: alan adı sizin bilgisayarınızda IP'ye çevrilir
curl -v -x "socks5://kullanici:parola@pr.proxynet.io:1080" https://httpbin.org/ip

# Uzak çözümleme: alan adı proxy'ye gönderilir, çözümlemeyi proxy yapar
curl -v -x "socks5h://kullanici:parola@pr.proxynet.io:1080" https://httpbin.org/ip

İlk komutun çıktısında cURL bağlantıdan önce alan adını çözdüğünü ve proxy'ye bir IP adresi gönderdiğini yazar. İkinci komutta proxy'ye alan adının kendisi gönderilir. cURL'deki proxy seçeneklerinin tamamı cURL ile Proxy Nasıl Kullanılır? yazımızda.

Chrome'da WebRTC sızıntısı nasıl önlenir?

Chrome'un ayarlar menüsünde WebRTC'yi kapatan bir seçenek yoktur. Bu davranış kurumsal ilke (policy) ile ya da eklentilerle değiştirilir. İlke yöntemi eklenti gerektirmez ve Google'ın resmi belgesine dayanır.

Chrome Enterprise WebRtcIPHandling ilkesi şu değerleri alır:

DeğerDavranışRFC 8828 karşılığı
defaultBütün ağ arayüzleri kullanılırMod 1
default_public_and_private_interfacesVarsayılan rotanın genel ve yerel adresiMod 2
default_public_interface_onlyYalnızca varsayılan rotanın genel adresiMod 3
disable_non_proxied_udpProxy'den geçmeyen UDP kapatılır; WebRTC proxy üzerinden TCP'ye düşerMod 4

Proxy kullanırken sızıntıyı kapatan değer disable_non_proxied_udp'dir. Windows'ta bu ilkeyi yönetici olarak açılmış PowerShell ile kayıt defterine yazabilirsiniz:

powershell
New-Item -Path "HKLM:\SOFTWARE\Policies\Google\Chrome" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Google\Chrome" -Name "WebRtcIPHandling" -Value "disable_non_proxied_udp"

Chrome'u tamamen kapatıp açtıktan sonra adres çubuğuna chrome://policy yazarak ilkenin yüklendiğini kontrol edin. Ardından yukarıdaki WebRTC testini tekrarlayın.

Bu ayarın bir bedeli vardır: tarayıcı tabanlı görüntülü görüşme ve ekran paylaşımı araçları UDP kullanamadığı için yavaşlayabilir veya hiç çalışmayabilir. Aynı bilgisayarda hem proxy'li iş hem görüntülü görüşme yapıyorsanız, iki iş için ayrı tarayıcı profili veya ayrı tarayıcı kullanmak daha pratiktir. Chrome'un proxy ayarını nereden okuduğunu Windows ve Chrome Proxy Ayarları yazımızda anlattık.

Firefox'ta WebRTC sızıntısı nasıl önlenir?

Firefox bu ayarları about:config sayfasında sunar. Adres çubuğuna about:config yazın, uyarıyı kabul edin ve aşağıdaki ayarları arayın.

AyarDeğerEtkisi
media.peerconnection.ice.proxy_only_if_behind_proxytrueProxy tanımlıyken WebRTC yalnızca proxy üzerinden bağlanır
media.peerconnection.ice.default_address_onlytrueYalnızca varsayılan rotanın adresi kullanılır
media.peerconnection.ice.no_hosttrueYerel (host) adaylar gönderilmez
media.peerconnection.enabledfalseWebRTC tamamen kapanır

İlk ayar, proxy'li kullanımda görüşme araçlarını tamamen bozmadan sızıntıyı kapatmayı hedefler. media.peerconnection.enabled ayarını false yapmak en kesin çözümdür, ancak tarayıcıdaki bütün görüntülü görüşme ve ekran paylaşımı özelliklerini devre dışı bırakır.

Firefox'ta DNS için ayrıca proxy ayarları ekranındaki "SOCKS v5 kullanırken DNS'i proxy üzerinden yap" seçeneğini işaretleyin. Bu seçenek about:config içinde network.proxy.socks_remote_dns olarak geçer. Firefox'ta proxy kurulumunun tamamı Firefox Proxy Ayarları yazımızda; profil bazında proxy yönetimi için SwitchyOmega rehberimize bakabilirsiniz.

SOCKS5'te uzak DNS neden önemli?

SOCKS5 protokolü, istemcinin hedefi iki şekilde bildirmesine izin verir: IP adresi olarak ya da alan adı olarak. İstemci IP adresi gönderirse alan adını kendisi çözmüş demektir; bu da DNS sorgusunun kendi ağınızdan gittiği anlamına gelir.

Kütüphanelerde ve araçlarda bu davranış farklı adlarla ayarlanır:

  • cURL: socks5:// yerel, socks5h:// uzak çözümleme.
  • Python Requests ve HTTPX: Proxy adresinde socks5h:// şeması.
  • Firefox: "SOCKS v5 kullanırken DNS'i proxy üzerinden yap" seçeneği.
  • Chrome: SOCKS5 proxy'de alan adını proxy'ye gönderir.
  • Proxifier gibi yönlendirme araçları: "Resolve hostnames through proxy" benzeri bir seçenek.

Uzak çözümlemenin ikinci faydası konum tutarlılığıdır: DNS'i proxy çözdüğünde CDN'ler proxy'nin konumuna yakın sunucuyu döndürür. SOCKS5'in teknik ayrıntıları için SOCKS5 Proxyler Nedir? yazımıza bakabilirsiniz. Uygulama trafiğini de kapsayan kurulumlar için SOCKS5 Proxy paketleri kullanılır.

Sızıntı dışında konumu ele veren sinyaller

IP ve DNS sızıntılarını kapattıktan sonra da bir sayfa, tarayıcının kendisi hakkında bildiklerinden konumunuzla ilgili ipuçları toplayabilir. Bunlar ağ sızıntısı değildir, ama proxy'nin konumuyla çeliştiklerinde aynı etkiyi yaratır.

  • Saat dilimi. JavaScript Intl.DateTimeFormat().resolvedOptions().timeZone ile sistem saat dilimini okur. Almanya'dan çıkan bir IP ile Europe/Istanbul saat dilimi çelişir.
  • Dil tercihleri. navigator.languages ve Accept-Language başlığı tarayıcının dil sırasını gösterir.
  • Konum izni. Bir siteye tarayıcıdan konum izni verdiyseniz Geolocation API, Wi-Fi ağlarına göre gerçek konumunuzu verebilir.
  • Çerezler ve oturumlar. Proxy'siz açtığınız bir oturumun çerezi, proxy'li ziyarette de gönderilir ve iki ziyareti birleştirir.
  • Tarayıcı parmak izi. Ekran çözünürlüğü, yazı tipleri ve grafik kartı bilgisi gibi özellikler tarayıcıyı IP'den bağımsız olarak tanımlar. Ayrıntılar Tarayıcı Parmak İzi yazımızda.

Birden fazla kimlikle çalışmanız gerekiyorsa her profilin proxy'sini, saat dilimini ve dilini birbirine uygun tutan yapılar vardır; bu yapıları Antidetect Tarayıcı Nedir? yazımızda anlattık.

Kullanım senaryoları

  • Farklı ülkelerdeki reklam ve içeriği kontrol eden ekip: WebRTC sızıntısı, sitenin sizi yanlış konumda sınıflandırmasına yol açabilir. Gerçek kullanıcı hatlarından çıkan Residential Proxy ile birlikte tarayıcı ayarları da düzeltilmelidir.
  • Mobil görünümlü trafik test eden geliştirici: Mobil operatör IP'si ile masaüstü ağındaki gerçek adresin WebRTC'de birlikte görünmesi tutarsızlık yaratır. Mobil Proxy kullanırken aynı kontrol yapılır.
  • Masaüstü uygulamasını proxy'ye yönlendiren kullanıcı: Uygulamanın DNS sorguları sistem DNS'inden gidebilir; yönlendirme aracında uzak çözümleme açılmalıdır.
  • Tarayıcı otomasyonu çalıştıran ekip: Otomasyon tarayıcıları da WebRTC'yi destekler. Chrome'u başlatırken aynı ilke veya eşdeğer bir başlatma ayarı kullanılmalıdır.

Sık yapılan hatalar

  • IP kontrol sayfasının sonucunu yeterli saymak. Bu sayfalar yalnızca HTTP isteğinin adresini gösterir; WebRTC ve DNS'i ayrıca test etmek gerekir.
  • Ayarı değiştirip tarayıcıyı yeniden başlatmamak. Chrome ilkeleri tarayıcı tamamen kapatılıp açılana kadar yüklenmez.
  • VPN ile proxy'yi birlikte kullanıp sızan adresi yanlış okumak. VPN açıksa WebRTC testinde VPN'in adresi görünür; bu gerçek adres değildir ama proxy adresiyle de uyuşmaz.
  • socks5:// şemasını varsayılan bırakmak. Kütüphane örneklerinin çoğu yerel çözümleme yapan şemayı kullanır.
  • WebRTC'yi tamamen kapatıp görüşme araçlarının neden çalışmadığını aramak. proxy_only_if_behind_proxy veya ayrı profil daha az yan etkiyle aynı sonucu verir.
  • Saat dilimi ve dili unutmak. Ağ sızıntıları kapansa bile bu sinyaller konum tutarsızlığını gösterir.

Kontrol listesi

KontrolNasıl yapılır?Beklenen sonuç
HTTP çıkış adresiIP kontrol sayfasıProxy'nin adresi
WebRTC adaylarıKonsolda RTCPeerConnection testisrflx yok veya proxy adresi
Chrome ilkesichrome://policyWebRtcIPHandling: disable_non_proxied_udp
Firefox WebRTCabout:configproxy_only_if_behind_proxy: true
SOCKS5 DNSProxy adresinde şemasocks5h:// veya uzak DNS seçeneği açık
DNS sunucularıDNS sızıntı testiKendi sağlayıcınızın sunucuları görünmez
Saat dilimi ve dilTarayıcı ve işletim sistemi ayarıProxy konumuyla uyumlu
ÇerezlerAyrı profil veya temiz oturumProxy'siz oturum çerezi yok

Sık sorulan sorular

WebRTC sızıntısı yalnızca proxy kullanıcılarını mı etkiler?

VPN kullanıcılarını da etkileyebilir, ancak çoğu VPN işletim sistemi düzeyinde çalıştığı için UDP trafiğini de tünelden geçirir ve sızıntı daha az görülür. Proxy yalnızca tarayıcının HTTP trafiğini kapsadığı için risk daha yüksektir.

WebRTC'yi kapatmak siteleri bozar mı?

Tarayıcı tabanlı görüntülü görüşme, sesli sohbet, ekran paylaşımı ve bazı dosya aktarım servisleri çalışmaz ya da yavaşlar. Normal web sitelerinin büyük çoğunluğu etkilenmez.

Yerel IP adresim (192.168...) hâlâ sızıyor mu?

Güncel Chrome ve Firefox sürümleri, yerel adresleri varsayılan olarak .local uzantılı rastgele adlarla gizler. Asıl risk, STUN üzerinden öğrenilen genel IP adresidir.

HTTP proxy kullanırken DNS sızıntısı olur mu?

Tarayıcıdaki web trafiği için genellikle olmaz, çünkü alan adı CONNECT isteğiyle proxy'ye gönderilir. Ancak proxy'nin tanımlı olmadığı diğer uygulamalar ve işletim sistemi bileşenleri kendi DNS sorgularını yapmaya devam eder.

Mobil cihazda WebRTC sızıntısı olur mu?

Olabilir. Mobil tarayıcılar da WebRTC destekler ve telefonda tanımlanan Wi-Fi proxy'si yalnızca HTTP trafiğini kapsar. iPhone'da proxy kurulumunu iPhone Proxy Ayarları yazımızda anlattık; aynı WebRTC testini mobil tarayıcıda da yapabilirsiniz.

Sızıntıyı kapattım, site hâlâ proxy kullandığımı anlıyor. Neden?

IP adresinin kendisi bir veri merkezine ait olabilir, saat dilimi ve dil ayarı proxy konumuyla çelişebilir ya da tarayıcı parmak izi önceki ziyaretinizle eşleşiyor olabilir. Ağ sızıntısı bu sinyallerden yalnızca biridir.

Özetle

Proxy, tarayıcının HTTP trafiğini taşır; WebRTC'nin UDP bağlantıları ve bazı DNS sorguları ise bu kapsamın dışında kalabilir. WebRTC sızıntısını Chrome'da WebRtcIPHandling ilkesiyle, Firefox'ta media.peerconnection ayarlarıyla kapatın. DNS sızıntısı için SOCKS5'te uzak çözümlemeyi kullanın ve sonuçları konsol testi ile doğrulayın. Ardından saat dilimi, dil ve çerezlerin proxy konumuyla uyumlu olduğundan emin olun. Tarayıcı ve uygulama trafiği için uygun paketleri proxy hizmetlerimizde bulabilirsiniz.

ChatGPT'ye sorClaude'a sor