ZeroCold Posted November 25, 2010 Report Posted November 25, 2010 (edited) Protocolul SOCKS Protocolul SOCKS este un protocol Internet care permite rutarea pachetelor de re?ea între aplica?ii client server printr-un server proxy. SOCKS opereaz? la nivelul 5 – Sesiune – al modelului OSI. Server Proxy Un server proxy este un server prin care se trimit cereri de la aplica?ii client care caut? resurse pe alte servere. Aplica?ia client se conecteaz? la un server proxy cerându-i ni?te servicii cum ar fi un fi?ier, o conexiune, o pagin? web sau orice resurs? disponibil? pe un alt server. Serverul proxy analizez? cererea conform regulilor lui de filtrare (poate filtra traficul pe baza adresei IP sau a protocolului de comunicare folosit). Dac? cererea este validat? de c?tre filtru, proxy-ul va pune la dispozi?ia aplica?iei client resursa cerut? conectându-se la server ?i cerând informa?ia în locul aplica?iei client. Uneori serverul proxy poate deservi cererea clientului f?r? a se mai conecta la serverul specificat. In acest caz el salveaz? într-o memorie tampon r?spunsurile de la server pentru a le deservi mai tarziu la o eventual? nou? cerere client. Un server proxy are dou? scopuri importante:p?streaz? anonimatul ma?inilor client.Cre?te viteza de acces la resurse prin salvarea lor în memoria tampon. Istoric Protocolul a fost dezvoltat de David Koblas, un inginer de sistem de la MIPS Computer Systems si l-a f?cut public în anului 1992. Compara?ie cu proxy HTTP SOCKS folose?te un protocol de negociere pentru a informa despre conexiunea pe care clientul încearc? s? o stabileasc? ?i poate fi folosit cu orice fel de conexiune prin socket TCP sau UDP. Un proxy HTTP pe de alt? parte analizeaz? antetele HTTP trimise prin el pentru a deduce adresa serverului ?i din aceast? cauz? poate fi folosit numai pentru trafic HTTP. Exemplul de mai jos descrie protocolul HTTP: Bogdan vrea s? descarce o pagin? web de la Maria, care ruleaz? un server web. Bogdan nu poate accesa direct serverul Mariei din cauza unui firewall care a fost pus în re?eaua lui. Ca s? comunice cu serverul Mariei, Bogdan se conecteaz? la serverul lui proxy HTTP. Navigatorul lui de internet comunic? cu proxy-ul exact ca ?i cum ar fi serverul destina?ie: trimite antete HTTP standard. Proxy-HTTP cite?te cererea ?i se uit? la antetul Host. Apoi se conecteaz? la serverul specificat în antet ?i îi transmite datele serverului. Vom vedea în continuare detaliile protocolului SOCKS. SOCKS Pachete TCP Când o aplica?ie client bazat? pe pachete TCP dore?te s? stabileasc? o conexiune cu o resurs? accesibil? doar prin firewall, ea trebuie s? deschid? o conexiune TCP pe serverul proxy. Serviciul SOCKS ascult? de obicei pe portul 1080. Dac? conexiune a reu?e?te, clientul va cere negocierea metodei de autentificare folosit?, se autentific? prin metoda aleas?, ?i trimite cererea pentru server. Proxy-ul SOCKS evalueaz? aceast? cerere ?i stabile?te conexiunea cu serverul sau refuz? s? o fac?. NOT? Valorile decimale din descrierea formatelor pachetelor reprezint? lungimea câmpului respectiv în octe?i. Acolo unde un octet trebuie s? ia o valoare anume, sintaxa X’hh’ este folosit? ?i indica un singur octet în acel câmp. Cereri Clientul se conecteaz? la proxy ?i trimite un identificator de versiune ?i mesajul de selec?ie a metodei folosite: VER NMETHODS METHODS Câmpul VER e setat la 05 pentru versiune a 5 a protocolului. Câmpul NMETHODS con?ine num?rul de octe?i care apar în câmpul METHODS. Proxy-ul alege una din metodele date în METHODS ?i trimite un mesaj clientului: VER METHOD Dac? metoda selectat? este FF nici una din metodele listate de client nu este acceptat?, iar clientul trebuie s? închid? conexiunea. Valorile definite pentru câmpul METHOD sunt: X’00? NO AUTHENTICATION REQUIRED X’01? GSSAPI X’02? USERNAME/PASSWORD de la X’03? la X’7F’ IANA ASSIGNED de la X’80? la X’FE’ RESERVED FOR PRIVATE METHODS X’FF’ NO ACCEPTABLE METHODS Apoi urmeaz? o subnegociere între client ?i server specific? metodei alese. Odat? ce subnegocierea specific? metodei s-a încheiat, clientul trimite proxy-ului detaliile cererii. Dac? metoda negociat? include încapsulare pentru verificarea integrit??ii sau confiden?ialitate, atunci aceste cereri trebuie încapsulate în detaliile metodei de autentificare. Cererea SOCKS arat? astfel: VER [FONT=Century Gothic]CMD[/FONT] [FONT=Century Gothic]RSV[/FONT] [FONT=Century Gothic]ATYP[/FONT] [FONT=Century Gothic]DST.ADDR[/FONT] [FONT=Century Gothic]DST.PORT[/FONT] Unde: VER este versiunea protocolului SOCKS: 5 CMD poate fi CONNECT X’01? BIND X’02? UDP ASSOCIATE X’03?[*] RSV RESERVED[*] ATYP tipul adresei adres? IP V4: X’01? DOMAINNAME: X’03? adres? IP V6: X’04?[*] DST.ADDR adresa destina?iei[*] DST.PORT portul destina?iei în format de re?ea. Serverul SOCKS va analiza cererea din punct de vedere al adreselor surs? ?i destina?ie ?i va returna unul sau mai multe mesaje în func?ie de tipul cererii. R?spunsuri Cererea SOCKS este trimis? de c?tre client imediat dup? ce a stabilit conexiunea cu proxy-ul ?i s-au terminat negocierile pentru autentificare. Proxy-ul evalueaz? cererea ?i d? un r?spuns asem?n?tor: VER REP RSV ATYP BND.ADDR BND.PORT Unde: VER X’05? versiunea protocolului REP câmpul r?spuns: X’00? succeeded X’01? general SOCKS server failure X’02? connection not allowed by ruleset X’03? Network unreachable X’04? Host unreachable X’05? Connection refused X’06? TTL expired X’07? Command not supported X’08? Address type not supported de la X’09? la X’FF’ neasignat[*] RSV Rezervat[*] ATYP tipul adresei IP V4: X’01? DOMAINNAME: X’03? IP V6: X’04?[*] BND.ADDR[*] BND.PORT Dac? metoda negociat? include încapsulare pentru verificarea integrit??ii sau confiden?ialitate, atunci aceste r?spunsuri trebuie încapsulate în detaliile metodei de autentificare.CONNECT Dac? comanda cerut? de client a fost CONNECT, BND.PORT va con?ine num?rul portului asignat proxy-ului pentru conexiunea cu serverul, iar BND.ADDRva con?ine adresa IP asociat?. BND.ADDR returnat este adesea diferit de adresa IP pe care clientul a folosit-o pentru a accesa proxy-ul SOCKS. BIND Cererea BIND este folosit? în protocoale la care clientul trebuie sa accepte conexiuni de la server. FTP este un astfel de exemplu, folosind o conexiune client-la-server pentru comenzi dar poate folosi ?i o conexiune server-la-client pentru a transmite date. Protocolul SOCKS cere ca partea de client a unei aplica?ii s? fac? cererea BIND numai pentru a crea o conexiune secundar? dup? ce o conexiune primar? a fost deja facut? cu CONNECT. Serverul SOCKS va folosi DST.ADDR ?i DST.PORT pentru a evalua cererea BIND. Serverul SOCKS trimite dou? r?spunsuri clientului în timpul unei opera?ii BIND.Primul este trimis dup? ce serverul creaz? ?i face bind pentru un nou socket. Câmpul BND.PORT va con?ine num?rul portului pe care serverul SOCKS l-a asignat pentru o conexiune a?teptat?, iar BND.ADDR va con?ine adresa IP asociat?. Cel de-al doilea r?spuns este trimis clientului numai dup? ce conexiunea a?teptat? are succes sau a e?uat. BND.PORT ?i BND.ADDR vor con?ine adresa ?i portul serverului destina?ie.Exemplu de utilizare Tunel SSHUnul dintre cele mai la îndemân? servere proxy SOCKS este OpenSSH[4]. Dac? ave?i un cont pe un calculator ce are OpenSSH instalat nu mai trebuie decât s? deschide?i o conexiune ssh pentru portforwarding. S? zicem c? ave?i numele de utilizator ‘ion’ pe serverul exemplu.ro Pe un calculator cu Linux instalat tot ce trebuie s? face?i este s? rula?i comanda: ssh -D 1080 -fCN ion@exemplu.ro O s? v? cear? parola pentru utilizatorul ion. Aceast? comand? va porni un proces a carui stare o pute?i. Pute?i verifica faptul c? procesul înc? ruleaz? cu comanda: ps -ef | grep ssh | grep 1080 Pentru a face acest? opera?ie pe Windows ave?i nevoie de Putty[5]. Pentru a seta un tunel SSH pâna la exemplu.ro, merge?i la câmpul Connection->SSH->Tunnels, ad?uga?i num?rul portului pe care dori?i s?-l ave?i local (în general 1080), selecta?i op?iunile Dynamic ?i Ipv4, iar apoi introduce?i hostname-ul (exemplu.ro) sau IP-ul în câmpul Host Name din categoria Session. Salva?i aceast? sesiune ?i conecta?i-v?. L?sa?i consola deschis? dup? conectare. Setare navigator web (Mozilla Firefox) Unul din scopurile pentru care a?i dori s? folosi?i un server proxy este p?strarea anonimatului în timpul navig?rii pe internet. Pentru a seta un server proxy SOCKS în Mozilla Firefox, deschide?i Edit->Preferences->Network->Settings. Bifa?i Manual proxy configuration. Seta?i câmpul SOCKS Host la localhost iar câmpul Port din dreptul lui 1080 (num?rul portului pe care a?i deschis portul) Pentru a verifica faptul c? datele transmise pân? la serverul proxy SOCKS sunt criptate ?i anonimatul dumneavoastr? este asigurat put?i folosi Wireshark[6] pentru a analiza cererile f?cute în timpul navig?rii pe internet. De asemenea dac? deschide?i o pagin? web care v? determin? IP-ul, ve?i observa c? atunci când proxy-ul este setat va ap?rea adresa proxy-ului, nu a dumeavoastr?. Proxy transparent Cu libr?rii precum tsocks[7] pute?i s? utiliza?i aplica?ii de re?ea precum ssh sau telnet prin proxy SOCKS. Trebuie îns? s? instala?i ?i s? configura?i aceste libr?rii, dar apoi utilizarea este extrem de simpl?. Securitate Protocolul SOCKS este un protocol pentru nivelul sesiune pentru transmiterea de date prin firewall-uri IP. Securitatea acestei transmisii de date depinde de metodele de autenficare ?i încapsulare oferite de diverse implement?ri ?i selectate în timpul negocierii dintre clientul SOCKS ?i serverul SOCKS. Referin?e: IETF, RFC1928 – SOCKS Protocol Version 5, RFC 1928 - SOCKS Protocol Version 5 (RFC1928)Wikipedia, Proxy server - Wikipedia, the free encyclopediaWikipedia, SOCKS - Wikipedia, the free encyclopediaOpenSSH, http://www.openssh.comPutty, http://www.chiark.greenend.org.uk/~sgtatham/putty/Wireshark, Wireshark Go deep.TSOCKS, tsocks - Transparent SOCKS Proxying Library Sursa:-> Robert Sicoie Blog Archive Protocolul SOCKS________________________________________________ Edited November 25, 2010 by ZeroCold 2 Quote
p3tru Posted November 25, 2010 Report Posted November 25, 2010 thx interesant, chiar aveam de gand sa caut zilele trecute, dar imi era lene Quote
Rila_xp Posted November 25, 2010 Report Posted November 25, 2010 Mersi pentru tutorial!Foarte util,am inteles acum cum functioneaza! Quote