SOCKS5 ve SOCKS4 Proxy Sunucuları

SOCKS5 ve SOCKS4 Proxy Sunucuları

SOCKS proxy, uygulamanın aracı sunucudan kendisi adına hedefe bağlanmasını istemesini sağlar. Proxy sunucusu istenen bağlantıyı açar ve veriyi iki yönde aktarır. Uygulama kendi protokolünü kullanmayı sürdürür; bu nedenle yöntem web isteklerinde, API istemcilerinde, dosya aktarımlarında ve SOCKS destekli diğer yazılımlarda çalışır.

Yeni kurulumda SOCKS5 genellikle en yararlı seçenekleri verir: daha çok adres biçimi, kimlik doğrulama yöntemi seçimi ve UDP desteği. SOCKS4, eski sürümü gerektiren yazılımlar için yararlılığını korur. Bu protokollerle HTTP proxy sunucuları arasındaki genel seçim SOCKS ve HTTP Proxy Sunucuları makalesinde ele alınır.

Uygulama SOCKS üzerinden nasıl bağlanır?

SOCKS5 proxy üzerinden https://example.com/ açan uygulamayı düşünün. Önce proxy sunucusuna ulaşır, web sitesine bağlantı açmasını ister ve ancak sonra site verisini alıp verir. Sürecin dört aşaması vardır:

Proxy sunucusuna bağlanma, erişim üzerinde uzlaşma, hedefi isteme, ardından HTTPS verisi alışverişi. TLS uygulamayla web sitesi arasında çalışır.
  1. Uygulama, proxy sunucusunun ana makine adı veya IP adresi ve dinleme portuna TCP üzerinden bağlanır.
  2. Uygulamayla proxy sunucusu erişim yöntemi seçer. Yöntem erişim bilgisi gerektiriyorsa uygulama bunları sağlar, proxy sunucusu kontrol eder.
  3. Uygulama, hedef adresiyle portu içeren SOCKS CONNECT isteği gönderir. Proxy sunucusu erişim kurallarını kontrol eder, sonraki bağlantıyı dener ve sonucu bildirir.
  4. Başarılı yanıttan sonra uygulama proxy üzerinden hedefle iletişim kurar. HTTPS web sitesinde, web isteğini göndermeden önce siteyle TLS kurup sertifikasını doğrular.

İki port numarası farklı sunuculara aittir. Örnek proxy proxy.example:1080 üzerinde dinlerken web sitesine example.com:443 üzerinden ulaşılabilir. 1080, SOCKS için yaygın porttur; ancak hizmet başka port kullanabilir. Proxy sunucunuza atanmış dinleme portunu kullanın; bu, hedef portunun yerine geçmez.

Olağan TCP iletiminde SOCKS, her HTTP isteğini veya dosya komutunu yorumlamak zorunda kalmadan uygulamanın bayt akışını geçirir. Uygulama hedefle kendi protokolünü konuşmayı sürdürür. Bu nedenle aynı SOCKS bağlantı mekanizması web istemcilerine ve başka yazılım türlerine hizmet verebilir.

CONNECT, SOCKS içinde kendi ileti biçimi olan komuttur; HTTP CONNECT yönteminden farklıdır. SOCKS, etkin FTP’de olabildiği gibi sunucunun proxy üzerinden geri bağlanmasını gerektiren uygulamalar için BIND de tanımlar. BIND ayrı destek gerektirir ve olağan web sitesi veya API isteğinde kullanılmaz.

SOCKS4, SOCKS4a ve SOCKS5 arasında ne değişir?

SOCKS4, IPv4 adreslerine TCP bağlantıları açar. SOCKS4a, proxy sunucusunun DNS ile IP adresini bulabilmesi için ana makine adı gönderme seçeneğini ekler. SOCKS5, kimlik doğrulama yöntemi seçimi ekler; IPv4, IPv6 adreslerini ve ana makine adlarını kabul eder ve UDP iletimini tanımlar.

YetenekSOCKS4SOCKS4aSOCKS5
Giden TCP bağlantısıEvetEvetEvet
İstekteki hedefIPv4 adresiIPv4 adresi veya alan adıIPv4 adresi, IPv6 adresi veya alan adı
Proxy sunucusu ana makine adını çözümleyebilirHayırEvetEvet
Standart kullanıcı adı/parola yöntemiHayırHayırEvet
UDP aktarma mekanizmasıHayırHayırEvet

Bunlar protokolün yetenekleridir. İstemci ve proxy hizmeti, kullanmak istediğiniz belirli özelliği uygulamalıdır. Örneğin SOCKS5 hizmeti, kullanılabilir UDP aktarımı sunmadan TCP bağlantılarını işleyebilir.

SOCKS5 isteğinde IPv6 hedefi taşıyabilir; ancak proxy sunucusu o IPv6 sunucusuna da ulaşabilmelidir. İki bağlantı farklı IP sürümleri kullanabilir: Uygulama proxy sunucusuna IPv4 üzerinden, proxy sunucusu ise hedefe IPv6 üzerinden bağlanabilir.

SOCKS4a, SOCKS4’ün uzantısıdır; her SOCKS4 bağlantısının başka adı değildir. Eski istemci yalnızca IPv4 adresi gönderiyorsa SOCKS4 seçmek ona uzaktan DNS sağlamaz. SOCKS4a iki uçta da destek gerektirir. İki uç da desteklediğinde SOCKS5 normalde daha basit seçimdir; SOCKS4 seçmek tek başına çıkış IP adresinin itibarını veya hızını iyileştirmez.

Hedef adını kim çözümler?

Bağlantı, adı belirtilmiş sunucuya ulaşmadan önce adı IP adresine çevrilmelidir. SOCKS5 bu sorgunun sonucunu da adın kendisini de kabul edebilir. Hangisini göndereceğini istemcinin DNS ayarı belirler.

Yerel DNS’de uygulama yapılandırılmış çözümleyicisine reports.example sorar. Yanıtın 203.0.113.27 olduğunu varsayın: Uygulama sonra 203.0.113.27:443 hedefine SOCKS bağlantısı ister. Sonraki web sitesi bağlantısı proxy üzerinden geçse de sorgu zaten istemci tarafında yapılmıştır.

Proxy tarafında DNS’de uygulama, hedefi önce yerelde sorgulamadan reports.example:443 gönderir. Proxy sunucusu IP adresini DNS ile alır ve istenen bağlantıyı açar. Ana makine adı SOCKS isteğinin parçası olarak proxy sunucusuna ulaşır.

Yerel DNS modunda uygulama DNS çözümleyicisine sorup sonuç IP adresini SOCKS’a gönderir. Uzaktan DNS modunda ana makine adı gönderir; proxy sunucusu kendi çözümleyicisine sorar.

Bu, istemcinin çözemediği bir adı proxy sunucusunun çözebildiği durumda yararlıdır. Bazı hizmetler DNS çözümleyicisine göre farklı adres döndürür; sorguyu taşımak hangi sunucunun bağlantıyı aldığını değiştirebilir. Proxy sunucusunun çıkış ülkesini ayarlamaz veya sitenin isteği kabulünü garantilemez.

curl’de aşağıdaki iki komut iki DNS modunu seçer:

curl --proxy socks5://proxy.example:1080 https://example.com/
curl --proxy socks5h://proxy.example:1080 https://example.com/

socks5://, curl’ün site adını yerelde çözümlemesini sağlar; socks5h:// adı proxy sunucusuna geçirir. İkisi de SOCKS5 kullanır. h, bu istemcinin URL sözdiziminde ana makine adının proxy tarafından çözümlenmesi demektir. SOCKS5’i HTTPS’ye dönüştürmez veya şifreleme eklemez. Diğer uygulamalar onay kutusu kullanabilir veya uzaktan DNS’yi otomatik seçebilir. Örnek proxy ana makine adı ve portunu hizmet bilgilerinizle değiştirip gereken kimlik doğrulamasını sağlayın.

SOCKS5 TCP isteğinde alan adı geçirmek UDP aktarım desteği gerektirmez. Proxy sunucusu sorguyu kendi DNS yapılandırmasıyla yapar. Bu, SOCKS5’ten istemcinin UDP paketlerini taşımasını istemekten farklıdır.

İstemci hedef DNS çözümlemesini proxy sunucusuna bırakacak şekilde ayarlanmışken sorguyu yerelde yaparsa istenen adı amaçlanan rotanın dışında açığa çıkarır. Bu bir DNS sızıntısıdır. Şifreli DNS çözümleyiciyle alışverişi korur, ancak çözümleyici adı yine alır. Proxy sunucusunun kendi ana makine adını sorgulamak ayrı iştir; diğer uygulamalar kendi DNS davranışlarını korur. Tek programdaki uzaktan DNS, cihazın her sorgusunu taşımaz.

Kimlik doğrulama ve şifreleme

SOCKS5, istemcinin desteklenen kimlik doğrulama yöntemlerini sunmasına ve proxy sunucusunun birini seçmesine izin verir. Kullanıcı adı ve parola seçeneklerden biridir. Diğeri SOCKS giriş alışverişi olmadan bağlantıdır; hizmet bunu istemcinin kaynak IP adresini izin listesinde kontrol ettikten sonra kabul edebilir. Dolayısıyla parola alanı olmayan uç nokta da erişimi kısıtlayabilir.

Yöntemde uzlaşılamaması, parolanın reddinden farklıdır: İlk durumda parola alışverişi henüz gerçekleşmemiştir. Kullanıcı adı/parola desteği olmayan istemci, SOCKS5 ayarı var diye yalnızca parola kabul eden SOCKS5 uç noktasını kullanamaz. SOCKS4’te kullanıcı kimliği alanı vardır, ancak eşdeğer standart parola alışverişi yoktur; sunucusu yine de erişim kuralları uygulayabilir.

Olağan SOCKS5 kullanıcı adı/parola alışverişi erişim bilgilerini şifrelemez. Uygulama hedefle HTTPS kurmadan önce gerçekleşir; dolayısıyla sonraki HTTPS bağlantısı önceki proxy girişini korumaz. İstemci ile proxy arasındaki yolu şifrelemek için ayrı korumalı bağlantı veya açıkça desteklenen güvenlik mekanizması gerekir.

Normal SOCKS5 kullanıcı adı/parola alışverişi, erişim bilgilerini proxy sunucusuna şifrelemeden gönderir. CONNECT sonrasında TLS, web sitesi verisini aktarma yolu boyunca uçtan uca korur.

Olağan SOCKS iletiminde HTTPS; sertifika doğrulaması açık ve TLS müdahalesi yokken uygulamanın web sitesiyle alışverişini korur. Şifrelenmemiş uygulama protokolü aktarımda da şifrelenmemiş kalır. Tek başına SOCKS5 desteği veya parolalı kimlik doğrulama, şifreli trafik vaat etmez.

Proxy sunucusu istemcinin bağlanan IP adresini, istenen hedefi ve bağlantı zamanlamasını yine bilir. Hedef, proxy sunucusunun çıkış IP adresini görür ve kendisine yönelik uygulama verisini alır. Çerezler, hesap girişleri ve diğer uygulama tanımlayıcıları kullanıcıyı tanımlayabilir; SOCKS sürümünü değiştirmek bunları kaldırmaz.

SOCKS5 TCP ve UDP’yi nasıl taşır?

TCP sıralı bayt akışı sağlar. İstemci o rotayı destekliyor ve proxy sunucusu hedefe izin veriyorsa tarayıcı isteği, API çağrısı veya SSH oturumu SOCKS TCP bağlantısı kullanabilir. Web sitesinin 443 portundaki başarı, başka uygulamanın portunun açık olduğunu göstermez.

UDP ayrı datagramlar gönderir. SOCKS5 istemcisi önce TCP kontrol bağlantısı açıp UDP ASSOCIATE ile aktarma ister. Proxy sunucusu aktarma adresini ve UDP portunu döndürür. İstemci datagramlarını, hedeflerini tanımlayan SOCKS başlıklarıyla oraya gönderir. TCP kontrol bağlantısını kapatmak bu UDP ilişkilendirmesini bitirir; datagramlar olağan SOCKS CONNECT akışı içinde değil, kontrol bağlantısından ayrı ilerler.

TCP, CONNECT bayt akışı kullanır. UDP, UDP ASSOCIATE içeren TCP kontrol bağlantısı ve ayrı UDP aktarma yolu kullanır. Kontrol bağlantısı açık kalmalıdır.

Hem uygulama hem hizmet bu mekanizmayı desteklemeli, ağ da UDP yoluna izin vermelidir. Programın TCP girişi tamamlanırken ses, oyun veya başka UDP işlevi yine başarısız olabilir. SOCKS CONNECT üzerinden başarılı HTTPS isteği, çalışan UDP’yi değil TCP iletimini gösterir. QUIC UDP kullanır, ancak kullanılabilir QUIC istemciye ve yolun tamamına da bağlıdır; tek başına SOCKS5 etiketi bunu doğrulamaz.

SOCKS nerede yararlıdır?

SOCKS, yazılımın kendi uygulama protokolünü korurken aracı bağlantıya ihtiyaç duyduğu yerde yararlıdır. Betik atanmış çıkış IP adresinden API verisi isteyebilir; dosya aktarım istemcisi onaylı rotadan uzak sunucuya ulaşabilir; uyumlu masaüstü uygulaması tarayıcı olmadan proxy kullanabilir. Her durum, istemcinin SOCKS desteğine ve hizmetin izin verdiği hedef portlara bağlıdır.

Aynı hesap veya sunucuyla tekrarlanan işte sabit çıkış uygun olabilir. Ayrı görevlerde dönen hizmet yararlı olabilir. SOCKS4 ve SOCKS5 bu davranışı belirlemez: Çıkış IP adresini, ağ türünü, diğer müşterilerin kullanıp kullanmadığını ve ne zaman değişeceğini hizmet belirler. Protokol sürümü hız sıralaması da vermez; rota uzunluğu, sunucu yükü ve kullanılabilir bant genişliği sonucu etkiler.

İstemci desteği protokolden daha dar olabilir. Chrome’un yerleşik SOCKS5 uygulaması hedef adlarını proxy sunucusunda çözümler, ancak SOCKS5 kullanıcı adı/parola kimlik doğrulaması veya UDP aktarımı yapmaz. Dolayısıyla yalnızca parola kabul eden uç nokta curl’de çalışıp yerleşik tarayıcı ayarında başarısız olabilir. Dış bağdaştırıcı, kendi yetenekleri olan ayrı bağlantı parçasıdır.

Tek programda yapılandırılmış proxy, o programın desteklenen bağlantılarına uygulanır. Ayrı indirme aracını veya betiği yapılandırmaz. Sistem proxy ayarları da bunları kullanan yazılımları etkiler. Bağdaştırıcı, yerleşik SOCKS desteği olmayan uygulamanın bağlantılarını yönlendiriyorsa TCP, UDP ve DNS kapsamı önemlidir. SOCKS olağan ICMP iletimi sağlamaz; bu nedenle ping bu proxy yolunun testi değildir.

Bağlantı ayarları ve yararlı bir test

Uç nokta için verilen proxy adresi, dinleme portu, SOCKS sürümü ve erişim yöntemiyle başlayın. 1080 gibi sayı tek başına protokolü tanımlamaz. Aynı adresi yalnızca HTTP kabul eden proxy alanına girmek yerine istemcide SOCKS seçin.

Proxy erişim bilgileri aracının kullanımını; web sitesi girişi ise web sitesinin kullanımını yetkilendirir. Farklı ayarlara aittirler. curl’de --proxy-user proxy erişim bilgilerini, --user hedef erişim bilgilerini sağlar. IP tabanlı erişimde izin listesi, proxy sunucusunun gördüğü istemci kaynak IP adresiyle eşleşmelidir; istemci ağ değiştirdiğinde bu adres değişebilir.

Amaçlanan DNS modunu seçip atlama kurallarını kontrol edin. Hariç tutulanlar listesindeki hedeflerde yapılandırılmış proxy atlanabilir. curl’de NO_PROXY buna yol açabilir; bilinçli olarak proxy rotasını test etmek istediğinizde --noproxy "" tek çağrı için bu istisnaları temizler.

İşi yapacak gerçek programdan test edin. IP kontrol uç noktası veya kontrolünüzdeki hedef sunucu günlüğü isteğin kaynak IP adresini gösterebilir. Sonucu doğrudan istekle karşılaştırın. Proxy sunucusuna ulaşmak için kullanılan adresle hedefin gördüğü çıkış adresi aynı olmak zorunda değildir.

Ardından gerçek görevi deneyin. Değişen IP, test edilen isteğin rotasını gösterir; ancak tüm taşıma türlerini ölçmez veya başka sitenin yanıtını belirlemez. Görev gerektiriyorsa UDP ya da IPv6’yı ayrı test edin; temsilî iş yükünde yanıt süresini ve bağlantı kararlılığını değerlendirin.

Hatayı bağlantı aşamasına göre bulun

Proxy sunucusuna ulaşmayı, erişim almayı, hedef bağlantısını açmayı ve uygulama yanıtını almayı ayırt edin. Bu aşamalardaki hataların nedenleri farklıdır.

Başarısız olanKontrol edilecekler
Proxy bağlantısı zaman aşımına uğrar veya reddedilirProxy ana makine adı, dinleme portu, ağdan ulaşılabilirlik ve erişim kısıtlamaları. Hedef bağlantısı henüz açılmamıştır.
Kabul edilebilir kimlik doğrulama yöntemi yokturİstemcinin bu uç noktanın kabul ettiği bir yöntemi destekleyip desteklemediği. Bu henüz parolaya ilişkin karar değildir.
Kullanıcı adı/parola girişi reddedilirParola yönteminin seçildiğini doğruladıktan sonra proxy erişim bilgileri ve hesap erişimi.
Hedef adı çözümlenemezSorguyu hangi tarafın yaptığı. Yerel DNS hatası, istemci SOCKS’tan hedef bağlantısını açmasını istemeden önce oluşabilir. Uzaktan DNS’de proxy sunucusu hedef IP adresini almalıdır.
Proxy sunucusu hedefi veya işlemi reddederErişim kuralları, hedef portlar ve istenen komut ya da adres türünün desteği. Politika gereği ret, desteklenmeyen UDP komutu veya IPv6 adresinden farklıdır.
Proxy sunucusu hedefe ulaşamazProxy ağından hedef adresi, portu ve kullanılabilirliği. Hedefe ulaşılamıyor veya hedef bağlantıyı reddediyor olabilir.

Doğrulanmış HTTPS bağlantısı başarılı olup site giriş sayfası, CAPTCHA veya erişim reddi döndürüyorsa SOCKS bağlantısı o alışverişi zaten taşımıştır. Sitenin yanıtını ve uygulama davranışını araştırın. İstek bunun yerine normal genel IP adresinizi gösteriyorsa o programdaki seçili proxy sunucusunu ve atlama kurallarını kontrol edin.

Bilgi bankasına dön