AccueilđŸ‡«đŸ‡·Chercher

SOCKS

SOCKS est un protocole réseau qui permet à des applications client-serveur d'employer les services d'un pare-feu. SOCKS est l'abréviation du terme anglophone « sockets ».

Les applications du rĂ©seau protĂ©gĂ©es derriĂšre le pare-feu qui souhaitent accĂ©der Ă  des serveurs extĂ©rieurs doivent se connecter via un serveur proxy utilisant le protocole SOCKS. Un tel serveur dĂ©cide de l'Ă©ligibilitĂ© du client Ă  accĂ©der au serveur externe et transmet sa requĂȘte au serveur. Le protocole peut Ă©galement ĂȘtre employĂ© de maniĂšre inverse, permettant aux applications Ă  l'extĂ©rieur de se connecter aux serveurs derriĂšre le pare-feu.

Histoire

Le protocole a été à l'origine développé par David Koblas, un des administrateurs systÚme de la société MIPS. L'année du rachat de MIPS par Silicon Graphics, en 1992, Koblas a présenté un papier sur SOCKS à un colloque sur la sécurité Usenix, et SOCKS est devenu de fait un protocole public. Le protocole a été amélioré dans sa version 4 par Ying-Da Lee de la société NEC.

La version 4a, « officieuse Â», ajoute le support des serveurs de rĂ©solution de noms Ă  SOCKS.

L'actuelle version 5 du protocole, spĂ©cifiĂ©e dans la RFC 1928, Ă©tend la version prĂ©cĂ©dente en ajoutant la possibilitĂ© de transmettre de l'UDP, permet l'authentification, la rĂ©solution des noms de domaines par le serveur SOCKS lui-mĂȘme, et IPv6.

L'architecture et l'application cliente de référence sont la propriété de Permeo Technologies.

Classification

D'aprÚs le modÚle OSI, le protocole SOCKS est une couche intermédiaire entre la couche applicative et la couche transport.

Serveurs SOCKS

Liste de logiciels serveur SOCKS:

  • Dante Socks Server - Open Source - Gratuit - Plateformes POSIX
  • WinSocks - Socks Proxy Server WinSocks - PropriĂ©taire - Evaluation de 30 jours - Uniquement sous Windows
  • FreeProxy inclut un serveur SOCKS. Non Open Source - Gratuit - Uniquement sous Windows
  • AnalogX Proxy inclut un serveur SOCKS. Non Open Source - Gratuit - Uniquement sous Windows
  • Java Socks Server - Open source - Gratuit - Toutes plateformes.
  • Socks4 Server - Open source - Gratuit - Toutes plateformes.
  • SS5 Socks Server - Open source - Gratuit - Fedora, FreeBSD
  • nylon - Open source - Gratuit - OpenBSD
  • 3proxy - Open source - Gratuit - Toutes plateformes
  • WinGate - Non Open source - Payant - Uniquement sous Windows
  • OpenSSH - Open source - Gratuit - Plateformes POSIX
  • DeleGate - PropriĂ©taire[1] - Gratuit - Toutes plateformes
  • Antinat - Open source - Gratuit - Toutes plateformes
  • srelay - Open source - Gratuit - Plateformes POSIX
  • sSocks - Open source - Gratuit - Plateformes POSIX
  • PuTTY Tunnel de type Dynamic - Open Source - Gratuit - Uniquement sous Windows

clients SOCKS

Il existe des programmes permettant de socksifier[2] d'autres applications, ce qui permet Ă  n'importe quel logiciel possĂ©dant des capacitĂ©s rĂ©seau d'utiliser SOCKS, mĂȘme s'il n'est pas prĂ©vu pour supporter SOCKS.

Liste de clients SOCKS

ClientLicenceVersionDate de créationPlateformeVersion de protocole
ProxyCapShareware5.2603/2007Windows, Mac OS Xv4, v5, HTTPS, SSH tunnel, HTTP
socatGPL1.603/2007POSIXmulti-optional tunnel
WideCapShareware1.412/2007Windowsv4, v5, HTTPS
ProxifierShareware3.2102/2007Windows, Mac OS Xv4, v5, HTTPS, HTTP
HTTP-Tunnel ClientFreeware4.4.40001/2007Windowsv4, v5, HTTP
dsocksGPL1.610/2006*BSD, Mac OS Xv4, v5
connectGPL1.9508/2006Windows, POSIXv4, v5, HTTPS
nylon3-clause BSD1.2.107/2006OpenBSDv4, v5
proxychainsGPL3.105/2006POSIX (source)v4, v5, HTTPS
FreeCapGPL3.1802/2006Windowsv4, v5, HTTPS
Dante clientBSD/Carnegie Mellon University1.1.1901/2006POSIXv4, v5, HTTP
TunnelItShareware1.406/2005WindowsSSH tunnel
GNet LibraryGPL2.0.702/2005POSIX (source)v4, v5
Hummingbird SOCKSFreeware8.010/2003Windowsv4, v5
tsocksGPL1.810/2002POSIX (source)v4, v5
Kernel Socks BouncerGPL0.0.41/2005POSIX (source)v5

SOCKS v4

Une connexion SOCKS normale consiste Ă  Ă©changer les trames TCP suivantes :

Du client vers le serveurs SOCKS

  • champ 1 : Version du protocole, 1 octet, 0x04 pour cette version
  • champ 2 : octet de commande, 1 octet:
    • 0x01 = Ă©tablir un pipe TCP/IP
    • 0x02 = Ă©tablir une correspondance de port TCP
  • champ 3 : numĂ©ro de port, (sur 2 octets, big endian)
  • champ 4 : adresse IPv4 (sur 4 octets)
  • champ 5 : chaĂźne d'authentification de l'utilisateur (ascii, longueur variable, terminĂ©e par un caractĂšre NULL 0x00)

Puis du serveur vers le client

  • champ 1 : constante 0x0, 1 octet
  • champ 2 : octet de statut :
    • 0x5a = requĂȘte acceptĂ©e
    • 0x5b = requĂȘte rejetĂ©e ou erreur
    • 0x5c = requĂȘte Ă©chouĂ©e car le client n'a pas lancĂ© le dĂ©mon identd (ou identd n'est pas accessible par le serveur)
    • 0x5d = requĂȘte Ă©chouĂ©e car le service identd du client n'a pas authentifiĂ© la chaĂźne envoyĂ©e dans la requĂȘte.
  • champ 3 : 2 octets, ignorĂ©
  • champ 4 : 4 octets, ignorĂ©

Exemple :

Voici la requĂȘte SOCKS qui permet de connecter un client Fred Ă  l'adresse 66.102.7.99:80, dans cet exemple le serveur rĂ©pond par un "OK" :

  • Client: 0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
    • Le dernier champ contient la chaine "Fred\0" en ASCII
  • RĂ©ponse serveur SOCKS : 0x00 | 0x5a | 0xDE 0xAD | 0xBE 0xEF 0xFF 0xFF
    • Les deux derniers champs contiennent des valeurs arbitraires, que le protocole invite a ignorer.

À partir de ce point toutes les donnĂ©es, envoyĂ©es dans ce flux TCP seront transfĂ©rĂ©es sur le port 80 Ă  l'adresse 66.102.7.99

La valeur 0x02 ("bind") pour le deuxiĂšme champ de la requĂȘte permet l'ouverture de connexions entrantes pour les protocoles tels que le FTP en mode actif.

SOCKS v4a

SOCKS 4a est une simple extension au protocole SOCKS 4 qui permet Ă  un client qui ne peut pas rĂ©soudre le nom de domaine de l'hĂŽte de destination de l'indiquer dans sa requĂȘte.

Le client doit mettre les trois premiers octets de l'adresse IP de destination Ă  NULL et le dernier octet Ă  une valeur diffĂ©rente de NULL (cela correspond Ă  une adresse IP du type 0.0.0.x, avec x une valeur diffĂ©rente de 0, ce qui n'est pas une adresse valide et qui n'aurait donc jamais pu ĂȘtre utilisĂ©e si le client avait pu rĂ©soudre le nom de domaine). Le client doit ensuite envoyer le nom de domaine de destination aprĂšs l'octet NULL qui termine le nom d'utilisateur et le terminer par un autre octet NULL. Cela est utilisĂ© de la mĂȘme maniĂšre pour les requĂȘtes "connect" et "bind".

Une connexion SOCKS avec demande de résolution de nom de domaine se présente comme suit :

Du client vers le serveur

  • champ 1 : Version du protocole, 1 octet, 0x04 pour cette version
  • champ 2 : octet de commande, 1 octet:
    • 0x01 = Ă©tablir un pipe TCP/IP
    • 0x02 = Ă©tablir une correspondance de port TCP
  • champ 3 : numĂ©ro de port, (sur 2 octets, big endian)
  • champ 4 : adresse IPv4 (sur 4 octets) dĂ©libĂ©rĂ©ment invalide, les premiers octets doivent ĂȘtre 0x00 et le dernier doit ĂȘtre diffĂ©rent de 0x00
  • champ 5 : chaĂźne d'authentification de l'utilisateur (ascii, longueur variable, terminĂ©e par un NULL)
  • champ 6 : nom de domaine de l'hĂŽte Ă  contacter (ascii, longueur variable, terminĂ© par un NULL)

Puis du serveur vers le client

  • champ 1 : constante 0x0
  • champ 2 : octet de statut :
    • 0x5a = requĂȘte acceptĂ©e
    • 0x5b = requĂȘte rejetĂ©e ou erreur
    • 0x5c = requĂȘte Ă©chouĂ©e car le client n'a pas lancĂ© le dĂ©mon identd (ou identd n'est pas accessible par le serveur)
    • 0x5d = requĂȘte Ă©chouĂ©e car le service identd du client n'a pas authentifiĂ© la chaĂźne envoyĂ©e dans la requĂȘte.
  • champ 3 : numĂ©ro de port, 2 octets
  • champ 4 : adresse IPv4, 4 octets

Un serveur supportant le protocole 4a doit examiner l'adresse IP de destination dans la requĂȘte. S'il s'agit d'une adresse 0.0.0.x avec x non nul, le serveur doit lire le nom de domaine indiquĂ© par le client dans le paquet. Il doit ensuite rĂ©soudre lui-mĂȘme le nom de domaine et Ă©tablir la connexion si possible.

SOCKS v5

SOCKS v5 est une extension de SOCKS v4 qui offre davantage de possibilités d'authentification ainsi que le support de l'UDP. La poignée de main initiale consiste en la procédure suivante :

  • Le client se connecte et envoie une annonce qui inclut une liste de mĂ©thodes d'authentification qu'il supporte.
  • Le serveur choisit l'une de ces mĂ©thodes ou envoie une erreur si aucune mĂ©thode n'est acceptable.
  • Plusieurs messages sont alors Ă©changĂ©s selon la mĂ©thode d'authentification choisie.
  • Une fois authentifiĂ© le client envoie une requĂȘte de connexion similaire mais diffĂ©rente du protocole SOCKS v4.
  • Le serveur rĂ©pond d'une maniĂšre similaire Ă  SOCKS v4.

Les méthodes d'authentification supportées sont numérotées comme suit :

  • 0x00 - Pas d'authentification
  • 0x01 - GSSAPI
  • 0x02 - Nom d'utilisateur/Mot de passe
  • 0x03-0x7F - mĂ©thodes dĂ©finies par l'IANA
  • 0x80-0xFE - mĂ©thodes rĂ©servĂ©e pour des utilisations privĂ©es.

La requĂȘte initiale du client vers le serveur est :

  • champ 1 : numĂ©ro de version de SOCKS (0x05 pour cette version), sur un octet
  • champ 2 : nombre de mĂ©thodes d'authentification supportĂ©es, sur un octet
  • champ 3 : liste des mĂ©thodes d'authentification supportĂ©es (un octet par mĂ©thode), de taille variable

Le serveur communique alors son choix :

  • champ 1 : numĂ©ro de version de SOCKS (0x05 pour cette version), sur un octet
  • champ 2 : mĂ©thode d'authentification choisie, sur un octet, ou 0xFF si aucune des mĂ©thodes proposĂ©es n'est convenable

La suite de l'authentification dépend de la méthode choisie.

AprĂšs l'authentification, le client envoie sa demande de connexion :

  • champ 1 : numĂ©ro de version de SOCKS (devrait ĂȘtre 0x05 pour cette version), sur un octet
  • champ 2 : code de commande sur un octet :
    • 0x01 = Ă©tablir une connexion TCP/IP
    • 0x02 = mettre en place une correspondance de port TCP
    • 0x03 = associer un port UDP
  • champ 3 : rĂ©servĂ©, doit ĂȘtre 0x00
  • champ 4 : type de l'adresse de destination, sur un octet :
    • 0x01 = adresse IPv4 (le champ adresse sera de longueur 4 octets)
    • 0x03 = nom de domaine (le champ adresse sera de longueur variable)
    • 0x04 = adresse IPv6 (le champ adresse sera de longueur 16 octets)
  • champ 5 : adresse de destination, de longueur 4 ou 16 octets, ou de la longueur du nom de domaine + 1.
    • Si le type d'adresse est 0x03 alors l'adresse est constituĂ©e d'un octet indiquant la longueur du nom de domaine suivi du nom lui-mĂȘme
  • champ 6 : numĂ©ro de port, sur 2 octets

Le serveur transmet sa réponse :

  • champ 1 : numĂ©ro de version de SOCKS (devrait ĂȘtre 0x05 pour cette version), sur un octet
  • champ 2 : statut, sur un octet :
    • 0x00 = requĂȘte acceptĂ©e
    • 0x01 = Ă©chec
    • 0x02 = connexion interdite
    • 0x03 = rĂ©seau injoignable
    • 0x04 = hĂŽte de destination injoignable
    • 0x05 = connexion refusĂ©e par l'hĂŽte de destination
    • 0x06 = TTL expirĂ©
    • 0x07 = commande non supportĂ©e/erreur de protocole
    • 0x08 = type d'adresse non supportĂ©
  • champ 3 : rĂ©servĂ©, doit ĂȘtre 0x00
  • champ 4 : type de l'adresse d'association sur socks proxy, sur un octet :
    • 0x01 = adresse IPv4 (le champ adresse sera de longueur 4 octets)
    • 0x03 = nom de domaine (le champ adresse sera de longueur variable)
    • 0x04 = adresse IPv6 (le champ adresse sera de longueur 16 octets)
  • champ 5 : adresse d'association sur socks proxy, de longueur 4 ou 16 octets, ou de la longueur du nom de domaine + 1.
    • Si le type d'adresse est 0x03 alors l'adresse est constituĂ©e d'un octet indiquant la longueur du nom de domaine suivi du nom lui-mĂȘme
  • champ 6 : numĂ©ro de port d'association sur socks proxy, sur deux octets

Notes et références

  1. ftp://ftp.delegate.org/pub/DeleGate/COPYRIGHT
  2. (en) Roedy Green, (250) 361-9093 of Canadian Mind Products. For email see contact page., « SOCKSIFY : Java Glossary », sur mindprod.com (consulté le ).

Liens externes

  • RFC 3089 - A SOCKS-based IPv6/IPv4 Gateway Mechanism
  • RFC 1961 - GSS-API Authentication Method for SOCKS Version 5
  • RFC 1929 - Username/Password Authentication for SOCKS V5
  • RFC 1928 - SOCKS Protocol Version 5
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.