SOCKS

SOCKS, client-server uygulamalarının şeffafça network güvenlik duvarıservislerini kullanmasına izin veren bir internet protokolüdür. SOCKS ,SOCKETS in kısaltılmış şeklidir.

Bu protokol MIPS Computer Systems sistem müdürü David Koblas tarafındangeliştirilmiştir. MIPS firmasının Silicon Garphics tarafından 1992yılında devralınmasından sonra Koblas aynı yılın Usenix Securitysempozyumunda bir sunum gerçekleştirerek SOCKS kullanımı herkese açıkhale getirildi. Protokol, 4. versiyonuna NEC firmasından Ying-Da Leetarafından getirildi.

SOCKS referans mimarisi ve clienti Permeo Technologies'e aittir. ( Not: Permeo Technologies , Blue Coat Systems tarafından satın alınmıştır). ( Blue Coat Systems , NEC firmasının bir türevidir ).

SOCKS , OSI modelinin 5. katmanında - (Session Layer : sunum (presentation ) ve taşıma ( transport ) katmanları arasındaki ortakatmandır.) işler.

İçerik:


* 1 SOCKS 4 protokol
o 1.1 SOCKS 4a protokol
* 2 SOCKS 5 protokol
* 3 SOCKS yazılım
* 4 Referanslar
* 5 Harici linkler

SOCKS 4 protokol

Tipik bir Socks 4 bağlanma isteği şuna benzerdir ( her rakam 1 byte olmak üzere ) :

Client'den SOCKS Server'a:

field ( Alan ) demek çevirme gereği duymadım.

* field 1: SOCKS versiyon numarası , 1 byte, bu versiyon için 0x04 olmalıdır
* field 2: komut kodu, 1 byte:
o 0x01 = TCP/IP kur , stream bağlantı
o 0x02 = TCP/IP port binding kur
* field 3: port numarasına göre sıralandırılmış network byte, 2 bytes
* field 4: IP adresine göre sıralandırılmış network byte, 4 bytes
* field 5: kullanıcı adı (user ID), değişken uzunluğu, boş olarak sonlandırılmış (0x00)

Server'dan SOCKS client'e:

* field 1: null byte
* field 2: status, 1 byte:
o 0x5a = istek sağlandı
o 0x5b = istek reddedildi ya da gerçekleştirilemedi
o 0x5c = istek gerçekleştirilemedi çünkü client identd' ı çalıştırmıyor (ya da server tarafından ulaşılamıyor )
o 0x5d = istek gerçekleştirilemedi çünkü client' in identd'si istekteki kullanıcı adını (user ıd ) onaylıyamadı
* field 3: 2 arbitrary bytes, görmezden gelinmeli
* field 4: 4 arbitrary bytes, görmezden gelinmeli

Örnek Olarak:

Bu Fred'i 66.102.7.990 e bağlamak için bir SOCKS 4 bağlanma isteğidir , server "OK" ile cevaplar .

* Client: 0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
o Son alanda 'Fred' ASCII karakterlerle , takiben null byte.
* Server: 0x00 | 0x5a | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
o 0xXX herhangi bir byte değeri olabilir. Socks 4 protokolünün belirttiği bu byte değerleri görmezden gelinmeli.

Bu noktadan itibaren SOCKS client den SOCKS servera gönderilen her data66.102.7.99 ile yer değiştirecektir ve bu işlem tersine de yapılabilir .
"connect" için Komut alanı 0x01 ya da "bind"için 0x02 olabilir . "bind"aktif FTP gibi protokoller için gelen bağlantılara izin verir .

SOCKS 4a protokolü

SOCKS 4a , hedefteki hostun domain ismini çözümleyemeyen clientlere,hostun domain ismini belirlenmesine izin veren basit bir SOCKS4protokol uzantısıdır

Client, DSTIP nin ilk üç byte'ına null ve son byte'ada sıfırdan farklıbir değer atamalıdır ( Bu , x sıfırdan farklı olmak üzere 0.0.0.xşeklindeki IP adresine tekabül eder- uygun görülmeyen hedef adres veeğerki client domain ismini çözebilirse böyle birşey asla meydanagelemez.) NULL byte'ın kullanıcı adını (USERID) sonlandırmasını takibenclient hedefteki domain ismini göndermeli ve diğer bir NULL byte ilebunu sonlandırmalıdır. Bu olay hem "connect" hem de "bind" isteklerindekullanılır.

Client'den Socks Server'a :

* field 1: SOCKS versiyon numarası, 1 byte, bu versiyon için 0x04 olmalı.
* field 2: komut kodu, 1 byte:
o 0x01 = Bir TCP/IP stream bağlantı kurun
o 0x02 = Bir TCP/IP port binding kurun
* field 3: port numarasına göre sıralandırılmış network byte , 2 bytes
* field 4: geçersiz IP adresi üzerinde dur, 4 bytes, ilk üçü 0x00 olmalı ve sonuncusu 0x00 dan farklı olmalı.
* field 5: kullanıcı adı , değişken uzunluğu , null ile sonlandırılmış (0x00)
* field 6: iletişim kurmak istenilen hostun domain ismi, değişken uzunluğu, null ile sonlandırılmış (0x00)

Server 'dan SOCKS client'e :

* field 1: null byte
* field 2: status, 1 byte:
o 0x5a = istek sağlandı
o 0x5b = istek reddedildi yada gerçekleştirilemedi
o 0x5c = istek gerçekleştirilemedi çünkü client identd yi çalıştırmıyor (ya da server tarafından ulaşılamaz durumda)
o 0x5d = istek gerçekleştirilemedi çünkü clientin identd si istekteki kullanıcı adını (user ID) doğrulamadı.
* field 3: port numarasına göre sıralandırılmış network byte , 2 bytes
* field 4: IP adrese göre sıralandırılmış network byte, 4 bytes

4A protokolü kullanan bir server DSTIP yi istek paketinde kontoletmelidir. Eğerki adresi x sıfırdan farklı olmak suretiyle 0.0.0.xşeklinde gösteriyorsa, server clientin gönderdiği paketteki domainismini okumalıdır. Server domain ismini çözmeli ve yapabilirse hostistikametine bağlantıyı gerçekleştirmelidir


SOCKS 5 protokolü

SOCKS 5 protokolü, daha fazla doğrulama seçeneği sunan , RFC 1928 detanımlanmış bir SOCKS 4 protokolü uzantısıdır. İlk anlaşma aşağıdakigibidir:

* Client bağlar ve desteklenen doğrulama metodlarını içeren bir karşılama gönderir.
* Server birini seçer (ya da eğerki metodlar kabul edilemez nitelikte ise gerçekleştirilemediğine dair bir cevap gönderir)
* Birkaç mesajın seçilen doğrulama methoduna dayanarak client ve server arasında geçişi sağlanır.
* Client SOCKS 4 e benzer bir bağlanma isteği gönderir.
* Server SOCKS 4 e benzer olarak cevaplar.

Desteklenen Doğrulama Metodları aşağıda numaralandırılmıştır:

* 0x00 - Doğrulama yok
* 0x01 - GSSAPI [6]
* 0x02 - Kullanıcı Adı / Şifre [7]
* 0x03-0x7F - metodlar IANA tarafından atanır [8]
* 0x80-0xFE - methodlar özel kullanım için rezerv edilmiştir.

Clientten gelen ilk karşılama şöyledir:

* field 1: SOCKS versiyon numarası ( bu versiyon için 0x05 olmalıdır )
* field 2: desteklenen doğrulama metodu adedi, 1 byte
* field 3: doğrulama metodları, değişken uzunluğu , desteklenen her metod için 1 byte

Serverın seçimi şöyle ifade edilir:

* field 1: SOCKS versiyon, 1 byte ( bu versiyon için 0x05 )
* field 2: seçilen doğrulama metodu, 1 byte, ya da 0xFF eğerki hiç bir metod kabul edilemez durumda ise.

Sonraki doğrulama metoda dayalıdır ve RFC 1929 da tanımlanmıştır:

Clientin doğrulama isteği şöyledir:


* field 1: versiyon numarası, 1 byte ( 0x01 olmalı )
* field 2: kullanıcı adı uzunluğu , 1 byte
* field 3: kullanıcı adı
* field 4: şifre uzunluğu , 1 byte
* field 5: şifre

Doğrulamak için Serverın cevabı şöyledir:


* field 1: versiyon, 1 byte
* field 2: status kodu, 1 byte.
o 0x00 = başarılı
o herhangi başka değer = başarısız, bağlantı kapatılmalıdır

Clientin bağlanma isteği şöyledir:

* field 1: SOCKS versiyon numarası, 1 byte ( bu versiyon için 0x05 olmalı )
* field 2: komut kodu, 1 byte:
o 0x01 = bir TCP/IP stream bağlantısı kur
o 0x02 = bir TCP/IP port binding kur
o 0x03 = bir UDP portu birleştir
* field 3: rezerv edilmiştir, 0x00 olmalıdır
* field 4: adres şekli, 1 byte:
o 0x01 = IPv4 adresi
o 0x03 = Domain ismi
o 0x04 = IPv6 adresi
* field 5: Hedef adres :
o IPv4 adresi için 4 byte
o Domain name için ismi takiben isim uzunluğu 1 byte
o IPv6 adresi için 16 byte
* field 6: network byte sıralanışıyla port numarası , 2 bytes

Server cevabı:

* field 1: SOCKS protokol versiyonu, 1 byte (bu versiyon için 0x05)
* field 2: status, 1 byte:
o 0x00 = istek sağlandı
o 0x01 = genel başarısızlık
o 0x02 = kurallara dayanarak bağlantıya izin verilmedi
o 0x03 = network ulaşılamaz durumda
o 0x04 = host ulaşılamaz durumda
o 0x05 = bağlantı hedefteki host tarafından reddedildi
o 0x06 = TTL zaman aşımına uğradı
o 0x07 = komut desteklenmiyor / protokol hatası
o 0x08 = adres tipi desteklenmiyor
* field 3: rezerv edildi, 0x00 olmalı
* field 4: adres tipi, 1 byte:
o 0x01 = IPv4 adresi
o 0x03 = Domain name
o 0x04 = IPv6 adresi
* field 5: Hedef adres:
o IPv4 adresi için 4 byte
o Domain name için ismi takiben isim uzunluğu 1 byte
o IPv6 adresi için 16 byte
* field 6ort numarasına göre sıralandırılmış network byte , 2 byte

Herhangi bir network yazılımının SOCKS vasıtasıyla harici networklerebağlanmasında adaptasyonu sağlayan Client Programları vardır.


SOCKS yazılımı

* Kernel SOCKS Bouncer ksb26 (Kernel Socks Bouncer) TCP bağlantılarınısocks 4/5 zinciri yoluyla yeniden yönlendiren (kullanıcı tanımlı hedefhostlara ) bir Linux Kernel 2.6.x Yüklenebilir Kernel Modulüdür.
* SS5 Socks Server , açık kaynaklı bir SOCKS4/SOCKS5 serverıdır.
* Dante, Inferno Nettverk A/S tarafından geliştirilmiş açık kaynaklı ve ticari destekli bir SOCKS4/SOCKS5 uygulamasıdır.
* OpenSSH , SSH tünelinden uzaktan kontrollü servera SOCKS isteklerinin gönderilmesini destekler.
* WinSocks , Proxy Labs tarafından geliştirilmiş küçük ama işlevsel bir SOCKS4/SOCKS5 serverıdır.
* SOcat Multipurpose relay (SOcket CAT): SOCKS4 ve SOCKS4a fonksiyonelliğini içerir.(Linux / Mac)
* FreeCap Socksifyer ( Windows için ), herhangi bir uygulama kendinetwork trafiğini SOCKS veya HTTP proxy vasıtasıyla şeffafçagerçekleştirebilir.
* Simple Socks Server ( Perl için) - SSS -Simple SOCKS Server perl dilinde yazılmış ve SOCKSS v5 protokolünü tamamlar.

Referanslar

1. ^ Hummingbird SOCKS FAQ
2. ^ Darmohray, Tina. "Firewalls and fairy tales". ;LOGIN:. Vol 30, no. 1.
3. ^ http://www.socks.permeo.com/ (broken link as of July 2008)
4. ^ News Release from Bluecoat
5. ^
6. ^ RFC 1961
7. ^ RFC 1929
8. ^ SOCKS Methods

Harici Linkler

* draft-ietf-aft-socks-chap Challenge-Handshake Authentication Protocol for SOCKS V5
* RFC 3089 - SOCKS tabanlı bir IPv6/IPv4 Geçit Mekanizması
* RFC 1961 - SOCKS Version 5 için GSS-API doğrulama metodu.
* RFC 1929 - SOCKS V5 için kullanıcı adı / şifre doğrulaması
* RFC 1928 - SOCKS Protocol Version 5
* SOCKS: TCP proxy için bir protokol - SOCKS Protokol Versiyon 4 (NEC)