Proxy judge, bir istemcinin proxy üzerinden gönderdiği HTTP başlıklarını incelemek için tasarlanmış sunucu tarafı bir betik veya hizmettir; istemcinin gerçek IP adresini ve proxy'yi tanımlayan ayrıntıları ortaya çıkararak proxy'nin anonimlik seviyesini belirler.
Proxy Judge nedir?
Proxy judge, aracı bir tanılama aracı olarak çalışır. Bir istemci proxy sunucusu üzerinden proxy judge'a bağlandığında, judge proxy'nin ilettiği HTTP istek başlıklarını analiz eder. Bu analiz, istemcinin gerçek IP adresini açığa çıkarabilecek veya kullanılan proxy sunucusunun varlığını ve türünü gösterebilecek belirli başlıkları tespit eder. Temel işlevi, proxy'nin istemcinin kimliğini gerçekten gizleyip gizlemediğini ve bunu hangi ölçüde yaptığını doğrulamaktır.
Proxy judge nasıl çalışır
Bir proxy judge'ın süreci şöyle işler:
- İstemci isteği: İstemci, web trafiğini belirlenen bir proxy sunucusu üzerinden yönlendirmek için sistemini veya uygulamasını yapılandırır.
- Proxy yönlendirmesi: Proxy sunucusu istemcinin isteğini alır ve hedef web sunucusuna, bu örnekte proxy judge'a iletir.
- Başlık incelemesi: İsteği alan proxy judge sunucusu, sunucu değişkenlerine ve HTTP başlıklarına erişir. Bu başlıklar bağlantı yolu hakkında meta veri içerir.
- Anonimlik değerlendirmesi: Judge, bu başlıkları genellikle istemci bilgisini açığa çıkaran veya proxy'yi tanımlayan belirli alanlar için ayrıştırır. Bu başlıkların varlığına, yokluğuna veya değiştirilmiş olmasına göre proxy'nin anonimlik seviyesini sınıflandırır.
- Raporlama: Judge, tespit edilen IP adreslerini ve başlık bilgilerini, proxy'nin anonimliğine dair bir değerlendirmeyle birlikte istemciye rapor olarak döndürür.
Proxy judge için önemli başlıklar arasında REMOTE_ADDR, HTTP_X_FORWARDED_FOR, HTTP_VIA, HTTP_PROXY_CONNECTION, HTTP_FORWARDED ve istemcinin gerçek IP'sini ya da proxy'nin varlığını ele verebilecek diğer başlıklar bulunur.
Proxy anonimlik seviyeleri
Proxy judge'lar, ilettikleri bilgilere göre proxy'leri farklı anonimlik seviyelerine ayırır.
Elite proxy (yüksek anonimlik)
Elite proxy en yüksek anonimlik seviyesini sağlar. İstemcinin gerçek IP adresini açığa çıkaran hiçbir başlık iletmez ve kendisini proxy olarak tanıtmaz. Hedef sunucu (proxy judge) açısından bağlantı doğrudan proxy sunucusunun IP adresinden geliyormuş gibi görünür; istemci doğrudan bağlantıdan ayırt edilemez.
- Özellikler:
REMOTE_ADDR: proxy'nin IP'sini gösterir.HTTP_X_FORWARDED_FOR: yok.HTTP_VIA: yok.HTTP_PROXY_CONNECTION: yok veya değiştirilmiş.
- Tespit: Gelişmiş fingerprinting olmadan doğrudan bağlantıdan ayırt etmek zordur.
Anonim proxy
Anonim proxy, istemcinin gerçek IP adresini gizler ancak kendi varlığını proxy sunucusu olarak açığa vurur. Yani hedef sunucu bir proxy kullanıldığını bilir, fakat asıl istemcinin kimliği gizli kalır.
- Özellikler:
REMOTE_ADDR: proxy'nin IP'sini gösterir.HTTP_X_FORWARDED_FOR: yok.HTTP_VIA: var (örneğin1.1 proxy.example.com).HTTP_PROXY_CONNECTION: bulunabilir.
- Tespit:
HTTP_VIAveya benzeri başlıkların varlığı proxy kullanımını gösterir.
Şeffaf proxy (anonim olmayan)
Şeffaf proxy — anonim olmayan veya yönlendiren proxy olarak da bilinir — istemcinin gerçek IP adresini gizlemeye çalışmaz. İstemcinin IP'sini genellikle X-Forwarded-For gibi başlıklarla hedef sunucuya iletir. Hedef sunucu hem proxy'nin varlığından hem de asıl istemcinin IP'sinden tamamen haberdardır.
- Özellikler:
REMOTE_ADDR: proxy'nin IP'sini gösterir.HTTP_X_FORWARDED_FOR: var, istemcinin gerçek IP'sini içerir.HTTP_VIA: çoğunlukla var.HTTP_PROXY_CONNECTION: bulunabilir.
- Tespit: İstemcinin IP'sini taşıyan
HTTP_X_FORWARDED_FORbaşlığı kesin kanıttır.
Distorting proxy (çarpıtan proxy)
Distorting proxy, X-Forwarded-For başlığında sahte veya rastgele bir IP adresi ileterek hedef sunucuyu yanıltmaya çalışan bir türdür. Gerçek istemci IP'sini gizlese de kendisini yine proxy olarak tanıtır ve verdiği X-Forwarded-For değeri gerçek istemci IP'si değildir. Bu bazen anonim proxy türü sayılabilir, ancak açıkça sahte veri üretmesi onu ayırır.
- Özellikler:
REMOTE_ADDR: proxy'nin IP'sini gösterir.HTTP_X_FORWARDED_FOR: var, ancak sahte/rastgele bir IP içerir.HTTP_VIA: çoğunlukla var.
- Tespit:
HTTP_X_FORWARDED_FORiçindeki IP'nin, önceki adımınREMOTE_ADDRdeğeriyle uyuşmaması (birden fazla proxy zincirlenmişse) veya açıkça geçersiz olması.
Anonimlik tespiti için önemli HTTP başlıkları
Proxy judge'ın analizi belirli HTTP başlıklarının ve sunucu değişkenlerinin incelenmesine dayanır:
REMOTE_ADDR: Bu sunucu değişkeni, proxy judge sunucusuna bağlanan istemcinin IP adresini doğrudan gösterir. Proxy kullanılıyorsa bu genellikle proxy'nin IP'sidir.HTTP_X_FORWARDED_FOR: Proxy'lerin asıl istemcinin IP adresini belirtmek için kullandığı fiili standart başlık. Birden fazla proxy zincirlenmişse virgülle ayrılmış IP listesi içerebilir.HTTP_VIA: İsteğin kendisi üzerinden geçtiğini belirtmek için proxy sunucusu tarafından eklenen başlık. Genellikle proxy'nin protokolünü ve hostname/IP bilgisini içerir.HTTP_PROXY_CONNECTION: Bazı proxy'lerin kullandığı, standart olmayan bir başlık; proxy'ye özgü bağlantı ayrıntılarını gösterir.HTTP_FORWARDED:X-Forwarded-ForveViabaşlıklarına daha sağlam bir alternatif olan standartlaştırılmış başlık (RFC 7239). İstemci, proxy ve host bilgisini taşıyabilir.HTTP_CLIENT_IP: Daha az yaygın, standart olmayan bir başlık; istemcinin IP'sini içerebilir.
Proxy judge'ın pratik kullanımı
Bir proxy judge'ı etkili biçimde kullanmak için istemcinizi test etmek istediğiniz proxy üzerinden trafiği yönlendirecek şekilde yapılandırın, ardından bir proxy judge hizmetine istek gönderin.
Örnek: curl ile proxy kullanımı
proxy.example.com adresindeki 8080 portunda çalışan bir proxy'yi curl ile test etmek için:
curl -x http://proxy.example.com:8080 http://proxyjudge.com
http://proxyjudge.com adresini gerçek bir proxy judge hizmetinin URL'siyle değiştirin. Çıktı, judge'ın raporu olacaktır.
Örnek: Basit bir proxy judge betiği (PHP)
Temel bir PHP betiği proxy judge olarak kullanılabilir:
<?php
header('Content-Type: text/plain');
echo "--- Proxy Judge Report ---\n";
echo "Your IP (REMOTE_ADDR): " . $_SERVER['REMOTE_ADDR'] . "\n";
echo "--------------------------\n";
$headers_to_check = [
'HTTP_X_FORWARDED_FOR',
'HTTP_VIA',
'HTTP_PROXY_CONNECTION',
'HTTP_FORWARDED',
'HTTP_CLIENT_IP'
];
foreach ($headers_to_check as $header) {
if (isset($_SERVER[$header])) {
echo $header . ": " . $_SERVER[$header] . "\n";
} else {
echo $header . ": Not Present\n";
}
}
echo "--------------------------\n";
// Anonimlik seviyesi için temel tahmin
$anonymity_level = "Elite Proxy"; // Varsayılan kabul
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$anonymity_level = "Transparent Proxy";
// X-Forwarded-For'un açıkça sahte olup olmadığını kontrol et
$xf_ip = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]);
if ($xf_ip !== $_SERVER['REMOTE_ADDR'] && !filter_var($xf_ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
// Bu basitleştirilmiş bir kontroldür; gerçek "distorting" için daha sağlam doğrulama gerekir
// Basit bir judge için, XFF varsa en katı anlamda Elite/Anonim değildir.
}
} elseif (isset($_SERVER['HTTP_VIA']) || isset($_SERVER['HTTP_PROXY_CONNECTION'])) {
$anonymity_level = "Anonymous Proxy";
}
echo "Estimated Anonymity Level: " . $anonymity_level . "\n";
?>
Bu betik, tespit edilen IP'yi ve ilgili başlıkları yazdırarak temel bir değerlendirme sunar.
Proxy judge sonuçlarını yorumlama
Belirli başlıkların varlığı veya yokluğu, doğrudan proxy'nin anonimlik seviyesiyle ilişkilidir.
| Başlık | Elite proxy | Anonim proxy | Şeffaf proxy | Distorting proxy |
|---|---|---|---|---|
REMOTE_ADDR |
Proxy IP'si | Proxy IP'si | Proxy IP'si | Proxy IP'si |
HTTP_X_FORWARDED_FOR |
Yok | Yok | Gerçek istemci IP'si | Sahte/rastgele IP |
HTTP_VIA |
Yok | Var | Çoğunlukla var | Çoğunlukla var |
HTTP_PROXY_CONNECTION |
Yok | Bulunabilir | Bulunabilir | Bulunabilir |
HTTP_FORWARDED |
Yok | Bulunabilir | İstemci IP'si içerebilir | Sahte IP içerebilir |
| Anonimlik puanı | En yüksek | Orta | En düşük | Düşük (tespit edilebilir) |
Proxy judge'ların sınırları
Faydalı olsalar da proxy judge'ların sınırları vardır:
- HTTP başlığı odaklılık: Öncelikle standart HTTP başlıklarını analiz ederler. Diğer katmanlarda veya farklı protokollerde oluşan sızıntıları (örneğin WebRTC IP sızıntıları, DNS sızıntıları) tespit edemeyebilirler.
- Tarayıcı fingerprinting: Proxy judge'lar, kullanıcıyı benzersiz şekilde tanımlayabilen tarayıcı fingerprinting unsurlarını (user agent, ekran çözünürlüğü, yüklü fontlar, Canvas API verileri) değerlendirmez.
- Gelişen teknikler: İleri düzey tespit yöntemleri basit başlık kontrollerinin ötesine geçer; proxy anonimliğini aşmak için JavaScript, Flash veya diğer tarayıcı tarafı teknolojileri kullanır.
- Proxy zinciri karmaşıklığı: Karmaşık proxy zincirlerinde, ara proxy'ler başlıkları tutarsız biçimde değiştirir veya siler ise asıl istemcinin IP'sini doğru belirlemek zorlaşır.
- SSL/TLS araya girme: HTTPS trafiğinde proxy SSL/TLS araya girme yapmıyorsa, judge yalnızca dıştaki TLS bağlantısını görebilir, içerideki HTTP başlıklarını göremez; bu da özel proxy yapılandırmaları olmadan tespiti zorlaştırır.
Proxy anonimliği için en iyi uygulamalar
Etkili proxy anonimliğini korumak için:
- Düzenli doğrulama: Proxy'lerinizi periyodik olarak birden fazla proxy judge hizmetiyle test edin; farklı judge'lar farklı yönleri tespit edebilir.
- Proxy türlerini bilin: Anonimlik gereksinimlerinize göre uygun proxy türünü seçin (örneğin geniş trafik için SOCKS5, web için HTTP/HTTPS).
- Diğer kontrollerle birleştirin: Kapsamlı anonimlik için proxy judge sonuçlarını WebRTC sızıntı testleri, DNS sızıntı testleri ve tarayıcı fingerprinting araçlarıyla tamamlayın.
- Güvenli yapılandırma: Uygulamalarınızın ve işletim sisteminizin ilgili tüm trafiği proxy üzerinden yönlendirecek şekilde doğru yapılandırıldığından emin olun; doğrudan bağlantıları ve sızıntıları engelleyin.
- HTTPS kullanımı: HTTPS bağlantılarına öncelik verin. Proxy judge şifreli tünelin içini göremese de HTTPS, verilerinizi proxy'den hedefe kadar şifreleyerek ek bir güvenlik katmanı sağlar.
