ProxyChains, bir programın kurduğu her TCP bağlantısını belirtilen bir proxy sunucu listesi üzerinden geçmeye zorlayan, Linux için bir komut satırı aracıdır; bu şekilde daha yüksek gizlilik için veya ağ kısıtlamalarını aşmak için bir "zincir" oluşturur. Ağ ile ilgili sistem çağrılarını dinamik olarak yakalayarak çalışır ve bunları hedefe ulaşmadan önce yapılandırılmış bir veya daha fazla proxy sunucusu üzerinden yönlendirir.
ProxyChains'e genel bakış
ProxyChains, başka programlar için bir sarmalayıcı (wrapper) olarak çalışır ve onların ağ trafiğinin bir proxy dizisi üzerinden yönlendirilmesini sağlar. Bu zincirleme mekanizması ağ isteklerinin kaynağını gizleyebilir ve gerçek kaynak IP adresinin izini sürmeyi zorlaştırır. Sıklıkla anonimlik sağlamak, coğrafi kısıtlamaları aşmak veya IP tabanlı erişim denetimi olan ağlara erişmek için kullanılır.
ProxyChains nasıl çalışır
ProxyChains, Linux'taki LD_PRELOAD mekanizmasını kullanır. LD_PRELOAD, C standart kütüphanesi (libc) dahil olmak üzere diğer tüm kütüphanelerden önce yüklenecek paylaşımlı kütüphanelerin listesini belirten bir ortam değişkenidir. ProxyChains, standart ağ fonksiyonlarının (örneğin connect(), send(), recv()) değiştirilmiş sürümlerini içeren kendi paylaşımlı kütüphanesini (libproxychains4.so) sağlar.
Bir program ProxyChains ile çalıştırıldığında (örneğin proxychains4 <command>), libproxychains4.so önceden yüklenir. Bu kütüphane, programın ağ fonksiyonlarına yaptığı çağrıları yakalar. Doğrudan bağlantı kurmak yerine, yakalanan bu çağrılar yapılandırılmış proxy zinciri üzerinden yönlendirilir. Bu süreç, sarmalanan uygulama için şeffaftır; uygulama doğrudan ağ bağlantısı kuruyormuş gibi çalışmaya devam eder.
Kurulum
Kurulum adımları Linux dağıtımına göre biraz farklılık gösterir.
Debian/Ubuntu
sudo apt update
sudo apt install proxychains4
Fedora/CentOS/RHEL
sudo dnf install proxychains-ng
# Veya daha eski sistemler için:
sudo yum install proxychains-ng
Arch Linux
sudo pacman -S proxychains-ng
Kaynaktan derleme
Diğer dağıtımlar veya belirli sürümler için ProxyChains kaynaktan derlenebilir.
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install
sudo make install-config # Varsayılan yapılandırma dosyasını /etc/proxychains.conf konumuna kurar
Yapılandırma
ProxyChains'in birincil yapılandırma dosyası genellikle /etc/proxychains.conf veya ~/.proxychains/proxychains.conf konumunda bulunur. İkisi de yoksa, proxychains.conf dosyası kaynak dizininden veya /usr/share/proxychains/proxychains.conf konumundan /etc/proxychains.conf konumuna kopyalanabilir.
Temel direktifler
Yapılandırma dosyası, proxy'lerin nasıl kullanılacağını ve hangi proxy'lerin mevcut olduğunu tanımlar.
strict_chain: Listedeki tüm proxy'ler göründükleri sırayla kullanılır. Zincirdeki herhangi bir proxy başarısız olursa bağlantı başarısız olur.dynamic_chain: Listedeki tüm proxy'ler kullanılır, ancak biri başarısız olursa atlanır ve zincir bir sonraki proxy'yle devam eder. Bu, daha fazla dayanıklılık sağlar.random_chain: Listeden rastgele seçilen belirli sayıda proxy (chain_len) rastgele bir sırayla kullanılır.chain_len: (random_chainile kullanılır) Rastgele seçilecek proxy sayısını belirtir.proxy_dns: DNS isteklerinin proxy zinciri üzerinden çözümlenmesini zorunlu kılar ve DNS sızıntılarını azaltır. Anonimlik için kritiktir.remote_dns_subnet: (proxy_dnsile kullanılır)proxy_dnsetkinleştirildiğinde uzak DNS sorguları için kullanılacak IP alt ağını belirtir. Varsayılan değer10.0.0.0/8'dir.
Proxy listesi biçimi
Proxy'ler, proxychains.conf dosyasının sonunda [ProxyList] bölümünde tanımlanır. Her proxy girdisi şu biçimi izler:
type ip_address port [username] [password]
Desteklenen türler arasında socks4, socks5 ve http bulunur.
Örnek proxychains.conf parçası
# ProxyChains configuration file
# Uncomment one of the proxy chain types:
# strict_chain
# dynamic_chain
random_chain
# Randomize the proxy list - no, this doesn't make sense.
# Keep the default order of proxies in the proxy list and use them in that order.
# If you want to randomize, use 'random_chain' above.
# random_chain_len 2
# Make a host where the chain starts from.
# This can be useful for some applications.
# chain_len 2
# Proxy DNS requests through the chain.
# This is highly recommended for anonymity.
proxy_dns
# Remote DNS subnet
# When proxy_dns is enabled, this subnet is used for remote DNS queries.
# Default is 10.0.0.0/8
# remote_dns_subnet 10.0.0.0/8
# Timeout for proxy connections.
# proxy_timeout 10000
# Proxy list - add your proxies here
# Format: type ip_address port [username] [password]
[ProxyList]
# socks4 127.0.0.1 9050 # Example for Tor (default SOCKS port)
# socks5 192.168.1.1 1080
# http proxy.example.com 8080 user pass
# Example using multiple proxies for a chain
socks5 192.168.1.10 1080
socks5 192.168.1.11 1080
http 192.168.1.12 8080
Desteklenen proxy türleri
ProxyChains aşağıdaki proxy protokollerini destekler:
- SOCKS4: TCP uygulamaları için basit bir proxy protokolü. UDP'yi ve kimlik doğrulamayı desteklemez.
- SOCKS5: TCP, UDP ve kimlik doğrulamayı destekleyen gelişmiş proxy protokolü. Çoğu kullanım senaryosu için önerilir.
- HTTP: TCP bağlantılarını tünellemek için HTTP proxy'lerini destekler. Kimlik doğrulamayla veya kimlik doğrulaması olmadan kullanılabilir.
Kullanım örnekleri
ProxyChains'i kullanmak için, proxy'ler üzerinden çalıştırmak istediğiniz komutun başına proxychains4 (bazı sistemlerde proxychains) yazın.
Temel kullanım
Proxy zinciri üzerinden dış IP adresinizi kontrol edin:
proxychains4 curl ifconfig.me
Bu komut curl isteğini yapılandırılmış proxy zinciri üzerinden yönlendirir ve ifconfig.me zincirdeki son proxy'nin IP adresini, dynamic_chain etkinse çalışan ilk proxy'nin adresini bildirir.
DNS sızıntılarını test etme
proxychains.conf içinde proxy_dns etkinken:
proxychains4 curl https://ipleak.net/
DNS isteklerinin yerel DNS sunucunuz yerine proxy zinciri üzerinden çözümlendiğini doğrulamak için ipleak.net üzerindeki DNS bölümünü inceleyin.
Ağ tarayıcılarıyla kullanım
Bir hedefi proxy zinciri üzerinden taramak, taramanın kaynağını gizleyebilir.
proxychains4 nmap -sT -Pn target.example.com
Not: nmap'in -sS (SYN taraması) ve diğer ham paket modları ProxyChains ile çalışmaz, çünkü LD_PRELOAD yalnızca üst seviye soket çağrılarını yakalar, ham paket üretimini değil. -sT (TCP connect taraması) kullanın.
Secure Shell (SSH) ile kullanım
Proxy zinciri üzerinden bir SSH bağlantısı kurmak için:
proxychains4 ssh user@remote_host.com
Wget ile kullanım
Proxy zinciri üzerinden dosya indirme:
proxychains4 wget https://example.com/file.zip
Web tarayıcısıyla kullanım (örneğin Firefox)
ProxyChains komut satırı uygulamaları için tasarlanmıştır. Web tarayıcıları gibi grafik uygulamalarda genellikle tarayıcının proxy ayarlarını doğrudan yapılandırmak veya özel bir proxy yöneticisi eklentisi kullanmak daha etkilidir. Yine de zorlanabilir:
proxychains4 firefox
Bu yöntem, karmaşık GUI uygulamalarında yerel proxy ayarlarına kıyasla genellikle daha az kararlı ve güvenilirdir.
Zincir türlerinin karşılaştırması
| Özellik | strict_chain |
dynamic_chain |
random_chain |
|---|---|---|---|
| Proxy kullanımı | Listedeki tüm proxy'ler, sırayla. | Listedeki tüm proxy'ler, sırayla; başarısız olanlar atlanır. | Rastgele seçilip sıralanan chain_len proxy. |
| Hata toleransı | Düşük (herhangi bir proxy başarısız olursa bağlantı kopar). | Yüksek (başarısız proxy'leri atlar). | Orta (seçilen rastgele proxy'ler başarısız olursa kopar). |
| Anonimlik | Yüksek (sabit yol, tüm proxy'ler kullanılır). | Yüksek (sabit yol, çalışan tüm proxy'ler kullanılır). | Değişken (rastgele yol, her seferinde farklı). |
| Performans | Sabit ve tam yol nedeniyle potansiyel olarak daha yavaş. | Bazı proxy'ler yavaş/kapalıysa daha hızlı. | Değişken, seçilen proxy'lere bağlı. |
| Kullanım senaryosu | Tüm proxy'ler güvenilir olduğunda ve sıra önemliyse. | Dayanıklılık önemli olduğunda. | Anonimlik için yolun değişmesi istendiğinde. |
Güvenlik değerlendirmeleri ve sınırlamalar
ProxyChains trafiği yönlendirmek için bir araçtır, eksiksiz bir anonimlik çözümü değildir. Kullanıcılar sınırlamalarını anlamalıdır.
DNS sızıntıları
proxy_dns etkin değilken DNS istekleri doğrudan yerel sistem tarafından çözümlenebilir ve kullanıcının gerçek IP adresi DNS sunucusuna ifşa olur. Anonimlik için proxy_dns'i etkinleştirmek çok önemlidir.
Trafik sızıntıları
ProxyChains öncelikle TCP bağlantılarını yakalar. UDP'yi veya diğer protokolleri doğrudan kullanan uygulamalar (örneğin bazı VPN istemcileri, VoIP uygulamaları, bazı oyunlar veya nmap'in ham paket modları) proxy zincirini atlayarak trafik sızıntısına yol açabilir. Tüm ağ yığınının anonimleştirilmesini gerektiren uygulamalar için uygun değildir.
Performans maliyeti
Birden fazla proxy'yi zincirlemek gecikme ekler ve verimi düşürür. Zincirdeki her adım işlem süresi ve ağ gecikmesi ekler. Zincirde ne kadar çok proxy varsa bağlantı o kadar yavaş olur.
Anonimlik için sihirli değnek değildir
ProxyChains ek bir gizleme katmanı sağlar ancak mutlak anonimliği garanti etmez. Gelişmiş saldırganlar yine de trafik desenlerini ilişkilendirebilir veya başka zafiyetleri (örneğin tarayıcı parmak izi, WebRTC sızıntıları) kullanarak bir kullanıcının kimliğini açığa çıkarabilir. Güvenli bir işletim sistemi, sağlam güvenlik duvarı kuralları ve dikkatli uygulama seçimi gibi diğer güvenlik uygulamalarıyla birlikte kullanılmalıdır.
Uygulama uyumluluğu
ProxyChains, kütüphane çağrılarını yakalamak için LD_PRELOAD'a dayanır. Ağ fonksiyonları yakalandığında her uygulama öngörülebilir şekilde davranmaz. Özel ağ kütüphaneleri, statik bağlama veya belirli çekirdek arayüzleri kullanan uygulamalar ProxyChains ile doğru çalışmayabilir veya hiç çalışmayabilir.
