ÇORAP - SOCKS
İnternet protokol paketi |
---|
Uygulama katmanı |
Taşıma katmanı |
İnternet katmanı |
Bağlantı katmanı |
SOCKS , bir proxy sunucusu aracılığıyla bir istemci ve sunucu arasında ağ paketlerini değiş tokuş eden bir İnternet protokolüdür . SOCKS5 isteğe bağlı olarak kimlik doğrulama sağlar, böylece yalnızca yetkili kullanıcılar bir sunucuya erişebilir. Pratik olarak, bir SOCKS sunucusu, TCP bağlantılarını rastgele bir IP adresine yönlendirir ve UDP paketlerinin iletilmesi için bir yol sağlar.
SOCKS, OSI modelinin 5. Katmanında çalışır ( oturum katmanı , sunum katmanı ile taşıma katmanı arasında bir ara katman ). Bir SOCKS sunucusu, RFC 1928'de tanımlandığı gibi, 1080 numaralı TCP bağlantı noktasında gelen istemci bağlantısını kabul eder .
Tarih
Protokol ilk olarak MIPS Computer Systems'ın sistem yöneticisi David Koblas tarafından geliştirildi/tasarlandı . MIPS, 1992'de Silicon Graphics tarafından devralındıktan sonra , Koblas, o yılki Usenix Güvenlik Sempozyumu'nda SOCKS hakkında bir bildiri sunarak, SOCKS'u halka açık hale getirdi. Protokolü Ying-Da Lee tarafından sürümüne 4'e uzatıldı NEC .
ÇORAP referans mimarisi ve müşteri aittir Permeo Technologies , bir spin-off dan NEC . ( Blue Coat Systems , Permeo Technologies'i satın aldı .)
SOCKS5 protokolü, aslen güvenlik duvarlarını ve diğer güvenlik ürünlerini yönetmeyi kolaylaştıran bir güvenlik protokolüydü . 1996 yılında IETF tarafından RFC 1928 olarak onaylanmıştır (Yazan: M. Leech, M. Ganis, Y. Lee, R. Kuris, D. Koblas ve L. Jones). Protokol, teknolojiyi Asya dışında pazarlayan Aventail Corporation ile işbirliği içinde geliştirildi .
kullanım
SOCKS , devre düzeyinde ağ geçitleri (seviye 5 ağ geçitleri) için fiili bir standarttır .
SOCKS'un devre/oturum düzeyindeki doğası, onu herhangi bir TCP (veya SOCKS5'ten beri UDP) trafiğini iletmede çok yönlü bir araç haline getirir ve her tür yönlendirme aracı için iyi bir arabirim oluşturur. Şu şekilde kullanılabilir:
- Örneğin hükümetler, işyerleri, okullar ve ülkeye özgü web hizmetleri tarafından engellenen içeriğe erişmek için trafiğin İnternet filtrelemesini atlamasına izin veren bir atlatma aracı. SOCKS çok algılanabilir olduğundan, yaygın bir yaklaşım, daha karmaşık protokoller için bir SOCKS arabirimi sunmaktır:
- Tor soğan proxy yazılımı hediyeler SOCKS müşterilerine arayüz.
- Bir sanal özel ağa benzer işlevsellik sağlayarak bağlantıların bir sunucunun "yerel" ağına iletilmesine olanak tanır:
- OpenSSH gibi bazı SSH paketleri, kullanıcının yerel bir SOCKS proxy'si oluşturmasına olanak tanıyan dinamik bağlantı noktası iletmeyi destekler. Bu, kullanıcıyı yalnızca önceden tanımlanmış bir uzak bağlantı noktasına ve sunucuya bağlanma sınırlamalarından kurtarabilir.
Protokol
SOCKS4
Tipik bir SOCKS4 bağlantı isteği şöyle görünür:
VER | CMD | DSTPORT | DSTIP | İD | |
---|---|---|---|---|---|
Bayt Sayısı | 1 | 1 | 2 | 4 | Değişken |
- VER
- SOCKS sürüm numarası, bu sürüm için 0x04
- CMD
- komut kodu:
- 0x01 = bir TCP/IP akış bağlantısı kurun
- 0x02 = bir TCP/IP bağlantı noktası bağlaması oluşturun
- DSTPORT
- 2 bayt bağlantı noktası numarası ( ağ bayt sırasına göre )
- HEDEF
- IPv4 Adresi, 4 bayt (ağ bayt sırasına göre)
- İD
- kullanıcı kimliği dizesi, değişken uzunluk, boş sonlandırılmış .
sanal ağ | REP | DSTPORT | DSTIP | |
---|---|---|---|---|
Bayt Sayısı | 1 | 1 | 2 | 4 |
- sanal ağ
- yanıt sürümü, boş bayt
- REP
- cevap kodu
Bayt Anlam 0x5A İstek verildi 0x5B İstek reddedildi veya başarısız oldu 0x5C İstemci identd çalışmadığından (veya sunucudan erişilemediğinden) istek başarısız oldu 0x5D İstemcinin kimliği, istekteki kullanıcı kimliğini doğrulayamadığı için istek başarısız oldu
- DSTPORT
- hedef bağlantı noktası, BIND'de verilirse anlamlıdır, aksi takdirde yoksay
- DSTIP
- hedef IP, yukarıdaki gibi – istemcinin bağlanması gereken ip:port
Örneğin, bu, Fred'i 66.102.7.99:80'e bağlamak için bir SOCKS4 isteğidir , sunucu bir "Tamam" ile yanıt verir:
- Müşteri:
0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
- ASCII'de son alan "Fred" ve ardından boş bir bayt.
- Sunucu:
0x00 | 0x5A | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
- 0xXX herhangi bir bayt değeri olabilir. SOCKS4 protokolü, bu baytların değerlerinin yok sayılması gerektiğini belirtir.
Bu noktadan itibaren, SOCKS istemcisinden SOCKS sunucusuna gönderilen tüm veriler 66.102.7.99'a aktarılır ve bunun tersi de geçerlidir.
Komut alanı "bağlan" için 0x01 veya "bağla" için 0x02 olabilir; "bind" komutu, etkin FTP gibi protokoller için gelen bağlantılara izin verir .
SOCKS4a
SOCKS4a , bir istemcinin IP adresi yerine bir hedef etki alanı adı belirlemesine izin vermek için SOCKS4 protokolünü genişletir; bu, istemcinin kendisi hedef ana bilgisayarın alan adını bir IP adresine çözemediğinde kullanışlıdır. SOCKS4'ün yazarı Ying-Da Lee tarafından önerildi.
İstemci, DSTIP'nin ilk üç baytını NULL olarak ve son baytı sıfır olmayan bir değere ayarlamalıdır. (Bu, 0.0.0.x IP adresine karşılık gelir, x sıfır olmayan, kabul edilemez bir hedef adrestir ve bu nedenle, istemci etki alanı adını çözebilirse asla oluşmamalıdır.) USERID'yi sonlandıran NULL baytın ardından istemci, hedef etki alanı adını göndermelidir. ve başka bir NULL bayt ile sonlandırın. Bu, hem "bağlan" hem de "bağla" istekleri için kullanılır.
İstemciden SOCKS sunucusuna:
SOCKS4_C | İHTİSAS | |
---|---|---|
Bayt Sayısı | 8+değişken | değişken |
- SOCKS4_C
- SOCKS4 istemci el sıkışma paketi (yukarıda)
- İHTİSAS
- iletişim kurulacak ana bilgisayarın etki alanı adı, değişken uzunluk, boş (0x00) sonlandırıldı
Sunucudan SOCKS istemcisine: (SOCKS4 ile aynı)
SOCKS4a protokolünü kullanan bir sunucu, istek paketindeki DSTIP'yi kontrol etmelidir . 0.0.0.x adresini sıfır olmayan x ile temsil ediyorsa, sunucu, istemcinin pakette gönderdiği etki alanı adını okumalıdır. Sunucu, etki alanı adını çözmeli ve mümkünse hedef ana bilgisayarla bağlantı kurmalıdır .
ÇORAP5
SOCKS5 protokolü, RFC 1928'de tanımlanmıştır . SOCKS4 protokolünün uyumsuz bir uzantısıdır; kimlik doğrulama için daha fazla seçenek sunar ve IPv6 ve UDP desteği ekler , bunlardan ikincisi DNS aramaları için kullanılabilir . İlk el sıkışma aşağıdakilerden oluşur:
- İstemci bağlanır ve desteklenen kimlik doğrulama yöntemlerinin bir listesini içeren bir karşılama mesajı gönderir.
- Sunucu yöntemlerden birini seçer (veya hiçbiri kabul edilebilir değilse bir hata yanıtı gönderir).
- Seçilen kimlik doğrulama yöntemine bağlı olarak, artık istemci ve sunucu arasında birkaç mesaj geçebilir.
- İstemci, SOCKS4'e benzer bir bağlantı isteği gönderir.
- Sunucu, SOCKS4'e benzer şekilde yanıt verir.
Müşteriden gelen ilk selamlama:
VER | NAUT | YETKİ | |
---|---|---|---|
bayt sayısı | 1 | 1 | değişken |
- VER
- ÇORAP sürümü (0x05)
- NAUT
- Desteklenen kimlik doğrulama yöntemlerinin sayısı, uint8
- YETKİ
- Kimlik doğrulama yöntemleri, desteklenen yöntem başına 1 bayt
- Desteklenen kimlik doğrulama yöntemleri aşağıdaki gibi numaralandırılmıştır:
- 0x00: Kimlik doğrulama yok
- 0x01: GSSAPI ( RFC 1961
- 0x02: Kullanıcı adı/şifre ( RFC 1929 )
- 0x03–0x7F: IANA tarafından atanan yöntemler
- 0x03: Challenge-El Sıkışma Kimlik Doğrulama Protokolü
- 0x04: Atanmamış
- 0x05: Meydan Okuma-Yanıt Kimlik Doğrulama Yöntemi
- 0x06: Güvenli Yuva Katmanı
- 0x07: NDS Kimlik Doğrulaması
- 0x08: Çoklu Kimlik Doğrulama Çerçevesi
- 0x09: JSON Parametre Bloğu
- 0x0A–0x7F: Atanmamış
- 0x80–0xFE: özel kullanım için ayrılmış yöntemler
VER | DİKKAT | |
---|---|---|
bayt sayısı | 1 | 1 |
- VER
- ÇORAP sürümü (0x05)
- DİKKAT
- seçilen kimlik doğrulama yöntemi veya kabul edilebilir yöntemler sunulmadıysa 0xFF
Sonraki kimlik doğrulama, yönteme bağlıdır. Kullanıcı adı ve parola doğrulaması (yöntem 0x02) RFC 1929'da açıklanmıştır :
VER | BOŞLUK | İD | PWLEN | şifre | |
---|---|---|---|---|---|
bayt sayısı | 1 | 1 | (1-255) | 1 | (1-255) |
- VER
- Kullanıcı adı/şifre doğrulamasının geçerli sürümü için 0x01
- IDLEN, kimlik
- Kullanıcı adı uzunluğu, uint8; bytestring olarak kullanıcı adı
- PWLEN, PW
- Şifre uzunluğu, uint8; bytestring olarak şifre
VER | DURUM | |
---|---|---|
bayt sayısı | 1 | 1 |
- VER
- Kullanıcı adı/şifre doğrulamasının geçerli sürümü için 0x01
- DURUM
- 0x00 başarılı, aksi takdirde hata, bağlantı kapatılmalıdır
Kimlik doğrulamadan sonra bağlantı devam edebilir. İlk önce bir adres veri tipini şu şekilde tanımlarız:
TİP | ADDR | |
---|---|---|
Bayt Sayısı | 1 | değişken |
- TİP
- adresin türü. Biri:
- 0x01: IPv4 adresi
- 0x03: Alan adı
- 0x04: IPv6 adresi
- ADDR
- takip eden adres verileri. Türüne bağlı olarak:
- IPv4 adresi için 4 bayt
- 1 bayt ad uzunluğu ve ardından alan adı için 1-255 bayt
- IPv6 adresi için 16 bayt
VER | CMD | RSV | DSTADDR | DSTPORT | |
---|---|---|---|---|---|
Bayt Sayısı | 1 | 1 | 1 | Değişken | 2 |
- VER
- ÇORAP sürümü (0x05)
- CMD
- komut kodu:
- 0x01: bir TCP/IP akış bağlantısı kurun
- 0x02: bir TCP/IP bağlantı noktası bağlaması oluşturun
- 0x03: bir UDP bağlantı noktasını ilişkilendirin
- RSV
- ayrılmış, 0x00 olmalıdır
- DSTADDR
- hedef adresi, yukarıdaki adres yapısına bakın.
- DSTPORT
- ağ bayt sırasına göre port numarası
VER | DURUM | RSV | BNDADDR | BNDPORT | |
---|---|---|---|---|---|
Bayt Sayısı | 1 | 1 | 1 | değişken | 2 |
- VER
- ÇORAP sürümü (0x05)
- DURUM
- durum kodu:
- 0x00: istek verildi
- 0x01: genel arıza
- 0x02: kural kümesi tarafından bağlantıya izin verilmiyor
- 0x03: ağa erişilemiyor
- 0x04: ana bilgisayara erişilemiyor
- 0x05: hedef ana bilgisayar tarafından bağlantı reddedildi
- 0x06: TTL'nin süresi doldu
- 0x07: komut desteklenmiyor / protokol hatası
- 0x08: adres türü desteklenmiyor
- RSV
- ayrılmış, 0x00 olmalıdır
- BNDADDR
- yukarıda belirtilen "SOCKS5 adresi" biçiminde sunucuya bağlı adres ( RFC 1928'de tanımlanmıştır )
- BNDPORT
- ağ bayt sırasına göre sunucuya bağlı bağlantı noktası numarası
İstemciler ya çözülmesi adreslerini ve alan adlarını kullanmaya izin verildiğinden, bir kongre cURL SOCKS5 "socks5h" alan adı varyantını etiketlemek için var ve diğer basitçe "socks5". SOCKS4a ve SOCKS4 arasında da benzer bir kural vardır.
Yazılım
sunucular
SOCKS proxy sunucu uygulamaları
- Sun Java Sistemi Web Proxy Sunucusu , Solaris, Linux ve Windows sunucularında çalışan, HTTPS, NSAPI G/Ç filtreleri, dinamik yeniden yapılandırma, SOCKSv5 ve ters proxy'yi destekleyen bir önbelleğe alma proxy sunucusudur .
- WinGate , Microsoft Windows için SOCKS4, SOCKS4a ve SOCKS5'i (UDP-ASSOCIATE ve GSSAPI yetkilendirme dahil) destekleyen çok protokollü bir proxy sunucusu ve SOCKS sunucusudur. Ayrıca, SOCKS bağlantılarının HTTP proxy'sine teslim edilmesini de destekler, böylece HTTP'yi SOCKS üzerinden önbelleğe alabilir ve tarayabilir.
- Socksgate5 SocksGate5, OSI modelinin 7. Katmanı olan Uygulama Katmanı üzerinde inceleme özelliğine sahip bir uygulama-SOCKS güvenlik duvarıdır. Paketler 7 OSI Düzeyinde denetlendiğinden, uygulama-SOCKS güvenlik duvarı, protokol uyumsuzluğunu arayabilir ve belirtilen içeriği engelleyebilir.
- Dante , uygun ve güvenli ağ bağlantısı sağlamak için kullanılabilen, yalnızca Dante'nin çalıştığı ana bilgisayarın harici ağ bağlantısına sahip olmasını gerektiren devre düzeyinde bir SOCKS sunucusudur.
SOCKS sunucu arayüzü sağlayan diğer programlar
- OpenSSH , CONNECT komutunu destekleyen SOCKS protokolünün bir alt kümesi aracılığıyla belirtilen dinamik tünel oluşturulmasına izin verir.
- PuTTY , uzak SSH sunucuları aracılığıyla yerel SOCKS (dinamik) tünel oluşturmayı destekleyen bir Win32 SSH istemcisidir.
- ShimmerCat , dahili bir ağı simüle etmek için SOCKS5 kullanan ve web geliştiricilerinin /etc/hosts dosyalarını değiştirmeden yerel sitelerini test etmelerini sağlayan bir web sunucusudur .
- Tor , çevrimiçi anonimliği etkinleştirmeyi amaçlayan bir sistemdir. Tor, istemcilerine yalnızca TCP'den oluşan bir SOCKS sunucu arabirimi sunar.
- Shadowsocks bir sansür aracıdır. Bir SOCKS5 arayüzü sağlar.
Müşteriler
İstemci yazılımının SOCKS üzerinden bağlanabilmesi için yerel SOCKS desteğine sahip olması gerekir. Kullanıcıların bu tür sınırlamaları aşmasına izin veren programlar vardır:
çoraplar
Socksifiers, uygulamaların herhangi bir proxy protokolünü desteklemeye gerek kalmadan bir proxy kullanmak için ağlara erişmesine izin verir. En yaygın yol, bir sanal ağ bağdaştırıcısı ve bağdaştırıcı üzerinden trafik göndermek için uygun yönlendirme tabloları kurmaktır.
- Win2Socks uygulamaları sağlar, SOCKS5, HTTPS veya Shadowsocks aracılığıyla ağa erişmesine.
- tun2socks, bir SOCKS proxy'sinden sanal TCP TUN adaptörleri oluşturan açık kaynaklı bir araç. Linux ve Windows üzerinde çalışır, bir macOS bağlantı noktasına ve Golang'da UDP özellikli bir yeniden uygulamaya sahiptir .
- proxychains, başlattığı (dinamik olarak bağlı) programlarda SOCKS veya HTTP proxy'leri aracılığıyla TCP trafiğini zorlayan bir Unix programı. Çeşitli Unix benzeri sistemlerde çalışır.
Proxy'leri çevirme
- Polipo , IPv4 destekli bir yönlendirme ve önbelleğe alma HTTP/1.1 proxy sunucusu . Linux , OpenWrt , Windows , Mac OS X ve FreeBSD üzerinde çalışan Açık Kaynak . Hemen hemen her Web tarayıcısı kullanabilir.
- Privoxy , önbelleğe almayan bir SOCKS-HTTP proxy'si.
liman işçisi tabanlı
- multsocks , vekilleri çevirmek için istemci, sunucu veya her ikisini kullanarak Docker çalıştıran herhangi bir platformda çalışacak olan Docker'a dayalı bir yaklaşım.
Güvenlik
İstek ve paket alışverişi şifrelemesinin olmaması nedeniyle, SOCKS'i ortadaki adam saldırılarına ve IP adreslerinin gizlice dinlenmesine karşı pratik olarak savunmasız hale getirir ve bu da sonuç olarak hükümetler tarafından sansürün bir yolunu temizler.
Referanslar
Dış bağlantılar
- RFC 1928 : SOCKS Protokolü Sürüm 5
- RFC 1929 : SOCKS V5 için Kullanıcı Adı/Parola Doğrulaması
- RFC 1961 : SOCKS Sürüm 5 için GSS-API Kimlik Doğrulama Yöntemi
- RFC 3089 : SOCKS tabanlı bir IPv6/IPv4 Ağ Geçidi Mekanizması
- Draft-ietf-aft-socks-chap , SOCKS V5 için Challenge-Handshake Kimlik Doğrulama Protokolü
- SOCKS: Güvenlik duvarları arasında TCP proxy için bir protokol , SOCKS Protokolü Sürüm 4 ( NEC )