<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Robert Sicoie &#187; tunnel</title>
	<atom:link href="http://www.sicoie.ro/robert/tag/tunnel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sicoie.ro/robert</link>
	<description></description>
	<lastBuildDate>Sun, 15 May 2011 08:47:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Protocolul SOCKS</title>
		<link>http://www.sicoie.ro/robert/2009/06/24/protocolul-socks/</link>
		<comments>http://www.sicoie.ro/robert/2009/06/24/protocolul-socks/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 19:55:50 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[ro]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[SOCKS]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.sicoie.ro/robert/2009/06/24/protocolul-socks/</guid>
		<description><![CDATA[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 &#8211; 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 <a href='http://www.sicoie.ro/robert/2009/06/24/protocolul-socks/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p><meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta name="GENERATOR" content="OpenOffice.org 2.4  (Linux)" /></p>
<style type="text/css"> 	<!-- 		@page { size: 8.27in 11.69in; margin: 0.79in } 		P { margin-bottom: 0.08in } 		H1 { margin-bottom: 0.08in } 		H1.western { font-family: "Nimbus Sans L", "Arial", sans-serif; font-size: 16pt } 		H1.cjk { font-family: "DejaVu Sans"; font-size: 16pt } 		H1.ctl { font-family: "DejaVu Sans"; font-size: 16pt } 		TD P { margin-bottom: 0in } 	--> 	</style>
<p>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 &#8211; al modelului OSI.</p>
<p style="margin-top: 0.17in; page-break-after: avoid"><font face="Nimbus Sans L, Arial, sans-serif"><font size="4">Server Proxy</font></font></p>
<p>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.</p>
<p>Un server proxy are două scopuri importante:</p>
<ul>
<li>păstrează anonimatul mașinilor client.</li>
<li>Crește viteza de acces la resurse prin salvarea lor în 	memoria tampon.</li>
</ul>
<p style="margin-top: 0.17in; page-break-after: avoid"><font face="Nimbus Sans L, Arial, sans-serif"><font size="4">Istoric</font></font></p>
<p>Protocolul a fost dezvoltat de <a href="http://www.skitoy.com/" target="_blank">David Koblas</a>, un inginer de sistem de la MIPS Computer Systems si l-a făcut public în anului 1992.</p>
<h3>Comparație cu proxy HTTP</h3>
<p>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.</p>
<p>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.</p>
<p>Exemplul de mai jos descrie protocolul HTTP:</p>
<p>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.</p>
<p>Vom vedea în continuare detaliile protocolului SOCKS.</p>
<h3>SOCKS</h3>
<p><strong>Pachete TCP</strong></p>
<p>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ă.</p>
<p><strong><font color="#999999">NOTĂ</font></strong> 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&#8217;hh&#8217; este folosită și indica un singur octet în acel câmp.</p>
<p><u>Cereri</u></p>
<p>Clientul se conectează la proxy și trimite un identificator de versiune și mesajul de selecție a metodei folosite:</p>
<table border="1" bordercolor="#000000" cellpadding="4" cellspacing="0" height="25" width="170">
<tr valign="top">
<td width="39">VER</td>
<td width="98">NMETHODS</td>
<td width="89">METHODS</td>
</tr>
</table>
<p>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.</p>
<p>Proxy-ul alege una din metodele date în METHODS și trimite un mesaj clientului:</p>
<table border="1" bordercolor="#000000" cellpadding="4" cellspacing="0" height="25" width="113">
<tr valign="top">
<td width="39">VER</td>
<td width="96">METHOD</td>
</tr>
</table>
<p>Dacă metoda selectată este FF nici una din metodele listate de client nu este acceptată, iar clientul trebuie să închidă conexiunea.</p>
<p>Valorile definite pentru câmpul METHOD sunt:</p>
<ul>
<li>
<p style="margin-bottom: 0in">X&#8217;00&#8242; NO AUTHENTICATION REQUIRED</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;01&#8242; GSSAPI</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;02&#8242; USERNAME/PASSWORD</p>
</li>
<li>
<p style="margin-bottom: 0in">de la X&#8217;03&#8242; la X&#8217;7F&#8217; IANA ASSIGNED</p>
</li>
<li>
<p style="margin-bottom: 0in">de la X&#8217;80&#8242; la X&#8217;FE&#8217; RESERVED FOR 	PRIVATE METHODS</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;FF&#8217; NO ACCEPTABLE METHODS</p>
</li>
</ul>
<p style="margin-bottom: 0in">Apoi urmează o subnegociere între client și server specifică metodei alese.</p>
<p style="margin-bottom: 0in">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.</p>
<p style="margin-bottom: 0in">Cererea SOCKS arată astfel:</p>
<table border="1" bordercolor="#000000" cellpadding="4" cellspacing="0" height="25" width="355">
<tr valign="top">
<td width="98">VER</td>
<td width="99">CMD</td>
<td width="99">RSV</td>
<td width="99">ATYP</td>
<td width="99">DST.ADDR</td>
<td width="98">DST.PORT</td>
</tr>
</table>
<p style="margin-bottom: 0in">Unde</p>
<ul>
<li>
<p style="margin-bottom: 0in">VER este versiunea protocolului 	SOCKS: 5</p>
</li>
<li>
<p style="margin-bottom: 0in">CMD poate fi</p>
<ul>
<li>
<p style="margin-bottom: 0in">CONNECT X&#8217;01&#8242;</p>
</li>
<li>
<p style="margin-bottom: 0in">BIND	X&#8217;02&#8242;</p>
</li>
<li>
<p style="margin-bottom: 0in">UDP ASSOCIATE X&#8217;03&#8242;</p>
</li>
</ul>
</li>
<li>
<p style="margin-bottom: 0in">RSV RESERVED</p>
</li>
<li>
<p style="margin-bottom: 0in">ATYP tipul adresei</p>
<ul>
<li>
<p style="margin-bottom: 0in">adresă IP V4: X&#8217;01&#8242;</p>
</li>
<li>
<p style="margin-bottom: 0in">DOMAINNAME: X&#8217;03&#8242;</p>
</li>
<li>
<p style="margin-bottom: 0in">adresă IP V6: X&#8217;04&#8242;</p>
</li>
</ul>
</li>
<li>
<p style="margin-bottom: 0in">DST.ADDR adresa destinației</p>
</li>
<li>
<p style="margin-bottom: 0in">DST.PORT portul destinației în 	format de rețea.</p>
</li>
</ul>
<p style="margin-bottom: 0in">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.</p>
<p style="margin-bottom: 0in"><u>Răspunsuri</u></p>
<p style="margin-bottom: 0in">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:</p>
<p style="margin-bottom: 0in">
<table border="1" bordercolor="#000000" cellpadding="4" cellspacing="0" height="25" width="316">
<tr valign="top">
<td width="50">VER</td>
<td width="42">REP</td>
<td width="53">RSV</td>
<td width="69">ATYP</td>
<td width="115">BND.ADDR</td>
<td width="82">BND.PORT</td>
</tr>
</table>
<p style="margin-bottom: 0in">Unde:</p>
<ul>
<li>
<p style="margin-bottom: 0in">VER X&#8217;05&#8242; versiunea protocolului</p>
</li>
<li>
<p style="margin-bottom: 0in">REP câmpul răspuns:</p>
<ul>
<li>
<p style="margin-bottom: 0in">X&#8217;00&#8242; succeeded</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;01&#8242; general SOCKS server 		failure</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;02&#8242; connection not allowed by 		ruleset</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;03&#8242; Network unreachable</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;04&#8242; Host unreachable</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;05&#8242; Connection refused</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;06&#8242; TTL expired</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;07&#8242; Command not supported</p>
</li>
<li>
<p style="margin-bottom: 0in">X&#8217;08&#8242; Address type not supported</p>
</li>
<li>
<p style="margin-bottom: 0in">de la X&#8217;09&#8242; la X&#8217;FF&#8217; neasignat</p>
</li>
</ul>
</li>
<li>
<p style="margin-bottom: 0in">RSV Rezervat</p>
</li>
<li>
<p style="margin-bottom: 0in">ATYP tipul adresei</p>
<ul>
<li>
<p style="margin-bottom: 0in">IP V4: X&#8217;01&#8242;</p>
</li>
<li>
<p style="margin-bottom: 0in">DOMAINNAME: X&#8217;03&#8242;</p>
</li>
<li>
<p style="margin-bottom: 0in">IP V6: X&#8217;04&#8242;</p>
</li>
</ul>
</li>
<li>
<p style="margin-bottom: 0in">BND.ADDR</p>
</li>
<li>
<p style="margin-bottom: 0in">BND.PORT</p>
</li>
</ul>
<p style="margin-bottom: 0in">Dacă metoda negociată include încapsulare pentru verificarea integrității sau confidențialitate, atunci aceste răspunsuri trebuie încapsulate în  detaliile metodei de autentificare.</p>
<p style="margin-bottom: 0in"><u>CONNECT</u></p>
<p style="margin-bottom: 0in; text-decoration: none">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.</p>
<p style="margin-bottom: 0in; text-decoration: none">&nbsp;</p>
<p style="margin-bottom: 0in"><u>BIND</u></p>
<p style="margin-bottom: 0in; text-decoration: none">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.</p>
<p style="margin-bottom: 0in; text-decoration: none">&nbsp;</p>
<p style="margin-bottom: 0in; text-decoration: none">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.</p>
<p style="margin-bottom: 0in; text-decoration: none">&nbsp;</p>
<p style="margin-bottom: 0in; text-decoration: none">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.</p>
<h3>Exemplu de utilizare</h3>
<p style="text-decoration: none"><strong>Tunel SSH</strong></p>
<p style="text-decoration: none">Unul 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 &#8216;ion&#8217; pe serverul exemplu.ro Pe un calculator cu Linux instalat tot ce trebuie să faceți este să rulați comanda:</p>
<p><code>ssh -D 1080 -fCN </code><font color="#000080"><u><a href="mailto:ion@exemplu.ro">ion@exemplu.ro</a></u></font></p>
<p style="text-decoration: none">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:</p>
<p><code><span style="text-decoration: none">ps -ef | grep ssh | grep 1080</span></code></p>
<p style="margin-bottom: 0in; text-decoration: none">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-&gt;SSH-&gt;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.</p>
<p style="margin-bottom: 0in; text-decoration: none"><strong>Setare navigator web (Mozilla Firefox)</strong></p>
<p style="margin-bottom: 0in; text-decoration: none"> 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-&gt;Preferences-&gt;Network-&gt;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)</p>
<p style="margin-bottom: 0in; text-decoration: none"> 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ă.</p>
<p style="margin-bottom: 0in; text-decoration: none"><strong>Proxy transparent</strong></p>
<p style="margin-bottom: 0in; text-decoration: none">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ă.</p>
<h3>Securitate</h3>
<p>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.</p>
<h3>Referințe:</h3>
<ol>
<li>
<p style="margin-bottom: 0in">IETF, RFC1928 &#8211; SOCKS Protocol 	Version 5, <font color="#000080"><u><a href="http://www.faqs.org/rfcs/rfc1928.html">http://www.faqs.org/rfcs/rfc1928.html</a></u></font></p>
</li>
<li>Wikipedia, <font color="#000080"><u><a href="http://en.wikipedia.org/wiki/Proxy_server">http://en.wikipedia.org/wiki/Proxy_server</a></u></font></li>
<li>Wikipedia, <font color="#000080"><u><a href="http://en.wikipedia.org/wiki/SOCKS">http://en.wikipedia.org/wiki/SOCKS</a></u></font></li>
<li>OpenSSH, <font color="#000080"><u><a href="http://www.openssh.com/">http://www.openssh.com</a></u></font></li>
<li>Putty, <font color="#000080"><u><a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/">http://www.chiark.greenend.org.uk/~sgtatham/putty/</a></u></font></li>
<li>Wireshark, <font color="#000080"><u><a href="http://www.wireshark.org/">http://www.wireshark.org/</a></u></font></li>
<li>TSOCKS, <font color="#000080"><u><a href="http://tsocks.sourceforge.net/">http://tsocks.sourceforge.net/</a></u></font></li>
</ol>

<div class="like">
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.sicoie.ro%2Frobert%2F2009%2F06%2F24%2Fprotocolul-socks%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:62px; "></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sicoie.ro/robert/2009/06/24/protocolul-socks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

