Proxy zincirleme, ağ trafiğini sırayla birden fazla proxy sunucusu üzerinden yönlendirmeyi ifade eder; burada her sunucu aracı görevi görerek isteği zincirdeki bir sonraki proxy'ye iletir ve bu, nihai hedefe ulaşana kadar sürer. Transparent proxy ise trafiği istemci tarafında yapılandırma gerektirmeden araya girerek yakalar.
Transparent proxy'ler
Inline proxy veya araya giren proxy olarak da bilinen transparent proxy, ağ katmanında çalışır ve istemcinin açık bilgisi ya da yapılandırması olmadan istemci isteklerini yakalar. İstemcinin ağ trafiği, genellikle yönlendirici yapılandırmalarıyla (örneğin güvenlik duvarı kuralları, DNS yönlendirmesi veya WCCP) transparent proxy'ye yönlendirilir. İstemci açısından trafik doğrudan hedef sunucuya gidiyormuş gibi görünür.
Transparent proxy'ler nasıl çalışır
- Yönlendirme: Ağ cihazları (yönlendiriciler, güvenlik duvarları), istemci makinelerden çıkan belirli trafiği (örneğin HTTP/S) transparent proxy sunucusunun IP adresine ve portuna yönlendirecek şekilde yapılandırılır. Bu genellikle Destination Network Address Translation (DNAT) kurallarıyla yapılır.
- Yakalama: Transparent proxy istemcinin isteğini alır. Yakalanan paket başlıklarından orijinal hedef IP ve portu yeniden oluşturur.
- İşleme: Proxy isteği işler (örneğin önbellekleme, filtreleme, günlükleme).
- İletme: Proxy, orijinal hedef sunucuya kendi bağlantısını kurar ve değiştirilmiş isteği iletir.
- Yanıt: Hedef sunucu yanıtını proxy'ye geri gönderir, proxy de bunu istemciye iletir.
Örnek DNAT kuralı (Linux iptables):
# HTTP trafiğini (port 80) aynı makinede 3128 portunda çalışan bir proxy'ye yönlendir
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Transparent proxy kullanım senaryoları
- Kurumsal içerik filtreleme: Belirli web sitelerine veya içerik kategorilerine erişimi engelleyerek kabul edilebilir kullanım politikalarını uygulama.
- ISP izleme ve önbellekleme: Sık erişilen içeriği önbelleğe alarak upstream bant genişliği kullanımını azaltma ve aboneler için yükleme sürelerini iyileştirme.
- Devlet gözetimi: İnternet trafiğini ulusal veya bölgesel düzeyde yakalama ve izleme.
- Misafir Wi-Fi yönetimi: Halka açık ağlarda captive portal veya temel içerik filtreleme uygulama.
Transparent proxy'lerin sınırlamaları
- İstemci kontrolünün olmaması: İstemciler, ağ düzeyinde değişiklik yapmadan transparent proxy'yi kolayca aşamaz.
- Gizlilik endişeleri: Trafik açık rıza olmadan yakalanır, bu da gizlilik sorunları doğurur.
- HTTPS zorlukları: HTTPS trafiğini yakalamak Man-in-the-Middle (MITM) tekniklerini gerektirir; bu da trafiği şifresini çözüp yeniden şifrelemek için istemci cihazlara güvenilir bir kök sertifika kurmayı içerir. Bu olmadan HTTPS trafiği genellikle dokunulmadan geçirilir ya da engellenir.
Proxy zincirlerini anlamak
Kademeli proxy olarak da bilinen proxy zincirleme, ağ trafiğini nihai hedefe ulaşmadan önce birden fazla aracı proxy sunucusundan oluşan bir dizi üzerinden yönlendirme yöntemidir. Zincirdeki her proxy isteği bir sonrakine ileterek çok atlamalı bir yol oluşturur.
Temel kavram
İstemcinin tek bir proxy'ye doğrudan bağlanması ya da tek bir proxy'nin doğrudan hedefe bağlanması yerine, istemci Proxy 1'e (P1) bağlanır, P1 Proxy 2'ye (P2) bağlanır, P2 Proxy 3'e (P3) bağlanır ve bu böyle devam ederek son proxy (Pn) nihai hedef sunucuya (D) bağlanır. Yanıt ise zinciri ters yönde kat eder.
Görsel gösterim:
Client <-> Proxy 1 <-> Proxy 2 <-> ... <-> Proxy N <-> Destination Server
Proxy zincirlemenin amacı
- Artırılmış anonimlik: Zincirdeki her atlama bir gizleme katmanı ekler. Hedef sunucu yalnızca Proxy N'in IP adresini görür. Proxy N yalnızca Proxy N-1'in IP'sini görür ve bu böyle devam eder. İstemcinin orijinal IP adresini yalnızca Proxy 1 bilir. Bu, orijinal istemciyi izlemeyi zorlaştırır ve birden fazla proxy sunucusunun ele geçirilmesini gerektirir.
- Coğrafi kısıtlamaları aşma: Farklı coğrafi konumlardaki proxy'leri kullanarak kullanıcılar, belirli içerik veya hizmetlere erişim veren bir bölgeden geliyormuş gibi görünebilir.
- Artan dayanıklılık: Zincirdeki bir proxy kullanılamaz hale gelirse zincir (dinamikse) yeniden yapılandırılabilir veya işlem farklı bir zincir üzerinden tekrar denenebilir.
- Katmanlı güvenlik: Farklı proxy'ler farklı güvenlik özellikleri sağlayabilir (örneğin biri içerik filtreleme, diğeri şifreleme için).
Proxy zincirleme nasıl çalışır
Proxy zincirlemenin mekanizması, kullanılan proxy türlerine bağlıdır, ancak genel akış sıralı iletme ve başlık düzenlemesini içerir.
Adım adım akış
- İstemci isteği başlatır: İstemci uygulaması (örneğin web tarayıcısı,
curl), isteğini zincirdeki ilk proxy'ye (P1) gönderecek şekilde yapılandırılır. - P1 isteği alır: P1, isteği istemciden alır. Genellikle istek başlıklarını ve hedefi inceler.
- P1, P2'ye bağlanır: P1 daha sonra P2'ye yeni bir bağlantı kurar ve istemcinin orijinal isteğini (veya değiştirilmiş bir sürümünü) iletir. P1, P2'ye karşı istemci gibi davranır.
- P2'den Pn'e: Bu süreç zincirdeki sonraki her proxy için tekrarlanır. P(i), isteği P(i-1)'den alır, P(i+1)'e bağlantı kurar ve isteği iletir.
- Pn hedefe bağlanır: Zincirdeki son proxy (Pn), isteği P(n-1)'den alır ve nihai hedef sunucuya (D) doğrudan bağlantı kurar.
- Hedef yanıt verir: D isteği işler ve yanıtı Pn'e geri gönderir.
- Ters akış: Pn yanıtı P(n-1)'e iletir ve bu böyle devam ederek yanıt P1'e ulaşır; P1 de yanıtı orijinal istemciye geri gönderir.
Başlık değişikliği ve IP gizleme
Proxy'ler istekleri iletirken, izlenen yolu belirtmek için sıklıkla HTTP başlıklarını değiştirir.
X-Forwarded-For(XFF): Bu başlık, proxy'ler tarafından isteği başlatan istemcinin orijinal IP adresini belirtmek için yaygın olarak kullanılır.Client (1.1.1.1) -> P1 (2.2.2.2) -> P2 (3.3.3.3) -> D- P1 şunu ekleyebilir:
X-Forwarded-For: 1.1.1.1 - P2 buna ekleme yapabilir:
X-Forwarded-For: 1.1.1.1, 2.2.2.2 - Hedef sunucu D, P2'nin IP'sini ve XFF başlığını görür.
- Gizlilik açısından sonuçlar: Anonimlik için, zincirdeki proxy'ler
X-Forwarded-Forbaşlıklarını eklememek ya da bunları temizlemek üzere yapılandırılmalıdır. Ancak tüm proxy'ler buna uymaz. Viabaşlığı: Bu başlık, proxy'ler tarafından istemcinin kullandığı ara protokolleri ve ağ geçitlerini belirtmek için kullanılır. Genellikle proxy'nin ana bilgisayar adını ve sürümünü içerir.
Zincirlerdeki proxy türleri
Proxy zincirleri çeşitli proxy protokollerinden oluşabilir ve bunlar sıklıkla karışık kullanılır.
HTTP/HTTPS proxy'ler
- HTTP proxy: Öncelikle HTTP trafiği (port 80) için tasarlanmıştır. HTTPS için
CONNECTyöntemini kullanarak başka protokolleri de tünelleyebilir. - HTTPS proxy: SSL/TLS ile şifrelenmiş trafik için
CONNECTyöntemini destekleyen bir HTTP proxy'dir. - Zincirleme: HTTP proxy'ler zincirlenebilir, ancak her proxy'nin istek formatını anlaması gerekir.
SOCKS proxy'ler (SOCKS4, SOCKS5)
- SOCKS proxy: HTTP proxy'lerden daha alt bir seviyede (Katman 5 / Oturum katmanı) çalışan genel amaçlı bir proxy'dir. Yalnızca HTTP değil, her türlü TCP/UDP trafiğini işleyebilir.
- SOCKS4: TCP bağlantılarını destekler.
- SOCKS5: TCP, UDP, kimlik doğrulama ve IPv6 destekler.
- Zincirleme: SOCKS proxy'ler ham veri akışlarını ilettiği için zincirlemede oldukça esnektir ve protokolden bağımsızdır. Anonimlik zincirlerinde çoğunlukla tercih edilirler.
SSH tünelleri
- SSH tüneli (dinamik port yönlendirme): Bir SSH istemcisi, uzak bir SSH sunucusuna şifreli bir tünel oluşturarak SOCKS proxy gibi davranacak şekilde yapılandırılabilir. Yerel SOCKS portuna gönderilen tüm trafik, SSH tüneli üzerinden uzak sunucuya iletilir; uzak sunucu da hedefe asıl bağlantıyı kurar.
- Zincirleme: Bir SSH tüneli, proxy zincirinde tek bir atlama görevi görebilir ve bir sonraki proxy'ye ya da hedefe şifreli bir bağlantı sağlar.
VPN'ler
- VPN (Virtual Private Network): İstemci ile VPN sunucusu arasında şifreli bir tünel oluşturur. Tüm istemci trafiği bu tünelden geçer.
- Zincirleme: Bir VPN tüm bir proxy zincirini kapsayabilir (İstemci -> VPN -> P1 -> P2 -> D) veya tek bir VPN sunucusu daha büyük bir zincirde bir atlama görevi görebilir (İstemci -> P1 -> VPN sunucusu -> P2 -> D). VPN'ler güçlü şifreleme sağlar ve başlangıçtaki ya da aradaki görünen coğrafi konumu belirlemek için kullanılabilir.
Yapılandırma ve uygulama
proxychains-ng gibi araçlar, birden fazla proxy atlamasını yerel olarak desteklemeyen uygulamalar için proxy'leri kolayca zincirlemek amacıyla Linux sistemlerinde yaygın olarak kullanılır.
Örnek: proxychains-ng
proxychains-ng, bir uygulamadan gelen ağ çağrılarını (örneğin connect()) yakalar ve bunları yapılandırılmış bir proxy zinciri üzerinden yönlendirir.
proxychains.conf örneği:
# /etc/proxychains.conf veya ~/.proxychains/proxychains.conf
strict_chain
# dynamic_chain # dinamik zincir için yorumu kaldırın (rastgele sıra)
# random_chain # rastgele zincir için yorumu kaldırın (rastgele sıra, tüm proxy'ler kullanılır)
# chain_len = 2 # 2 proxy'lik bir zincir kullan
proxy_dns # DNS'i zincir üzerinden çöz
# Proxy listesi formatı: type ip port [user password]
[ProxyList]
socks5 192.168.1.100 9050 # Örnek SOCKS5 proxy (örneğin Tor)
http 192.168.1.101 8080 # Örnek HTTP proxy
socks4 192.168.1.102 1080 # Örnek SOCKS4 proxy
Kullanım:
proxychains4 curl ifconfig.me
Bu komut, curl isteğini önce yapılandırılmış socks5 proxy'si, sonra http proxy'si, ardından socks4 proxy'si üzerinden yönlendirir ve en son ifconfig.me adresine ulaşır.
Performans ve gecikme
Proxy zincirleme doğası gereği ek gecikme getirir. Her atlama şunları gerektirir:
- Yeni bir TCP bağlantısı kurmak (veya mevcut olanı yeniden kullanmak).
- Her proxy'de isteği ve yanıtı işlemek.
- Her proxy arasında ağ iletim süresi.
Toplam gecikme toplanarak artar ve zincirdeki proxy sayısıyla birlikte büyür. Her proxy'nin kendi hız sınırlamaları olabileceğinden bant genişliği de etkilenebilir. Yüksek performanslı ve coğrafi olarak yakın proxy'ler seçmek bu etkilerin bir kısmını azaltabilir.
Güvenlik ve anonimlik değerlendirmeleri
Proxy zincirleme anonimliği artırsa da kusursuz değildir.
- Güven modeli: Zincirin anonimliği ve güvenliği ancak en zayıf halkası kadar güçlüdür. Zincirdeki herhangi bir proxy ele geçirilirse veya trafiği günlüğe kaydederse, istemcinin kimliği ya da faaliyetleri açığa çıkabilir.
- Günlükleme: Proxy'ler bağlantı ayrıntılarını, IP adreslerini ve hatta istek içeriğini kaydedebilir. Kötü niyetli veya ele geçirilmiş bir proxy işletmecisi bu verileri toplayabilir.
- Çıkış düğümünün görünürlüğü: Nihai hedef sunucu yalnızca zincirdeki son proxy'nin ("exit node") IP adresini görür. Ancak çıkış düğümü ele geçirilmişse veya trafiği kaydediyorsa, bir önceki atlamayı açığa çıkarabilir.
- DNS sızıntısı: DNS istekleri proxy zinciri üzerinden yönlendirilmezse, DNS çözümlemesi sırasında istemcinin gerçek IP adresi açığa çıkabilir.
proxychains-ng'ninproxy_dnsseçeneği bunu önlemeye yardımcı olur. - Trafik analizi: Gelişmiş saldırganlar, birden fazla atlama boyunca trafik desenlerini ilişkilendirmek için trafik analizi tekniklerini (örneğin zamanlama saldırıları, paket boyutu korelasyonu) kullanabilir ve uzun bir zincirde bile kullanıcıların anonimliğini ortadan kaldırabilir.
- HTTPS araya girme: HTTPS, istemci ile hedef arasındaki içeriği şifrelese de zincirdeki proxy'ler bağlantı meta verilerini (kimin kime bağlandığını) yine görür. Bir proxy HTTPS üzerinde MITM yaparsa trafiğin şifresini çözüp inceleyebilir.
Zincirlerdeki transparent proxy'ler
Transparent proxy'ler ağ düzeyinde gizlice çalıştıkları için, anonimlik amacıyla açıkça yapılandırılmış bir proxy zincirinin parçası olmazlar. Ancak bir istemci, trafiği zincirindeki ilk yapılandırılmış proxy'ye ulaşmadan önce bir transparent proxy'den geçmeye zorlanabilir (örneğin ISP veya kurumsal ağ tarafından). Benzer şekilde, nihai hedef ağda gelen trafiği yakalayan bir transparent proxy bulunabilir. Bu gibi durumlarda transparent proxy, istemcinin farkında olmayabileceği başka bir atlama ekler ve trafiği kaydediyor ya da değiştiriyorsa anonimliği etkileyebilir. Anonimlik zincirleri kurmak için açık proxy yapılandırması gereklidir.
