SOCKS es un protocolo de red que permite que las aplicaciones cliente-servidor utilicen de forma transparente los servicios de un firewall . SOCKS es la abreviatura del término en inglés " sockets " y " Secured Over Credential-based Kerberos ".
Las aplicaciones de red protegidas detrás del firewall que deseen acceder a servidores externos deben conectarse a través de un servidor proxy tipo SOCKS. Dicho servidor decide sobre la elegibilidad del cliente para acceder al servidor externo y transmite su solicitud al servidor. SOCKS también se puede usar a la inversa, lo que permite que las aplicaciones externas se conecten a servidores detrás del firewall.
El protocolo fue desarrollado originalmente por David Koblas , uno de los administradores de sistemas de la compañía MIPS . En el año de la adquisición de MIPS por Silicon Graphics , en 1992, Koblas presentó un documento sobre SOCKS en una conferencia de seguridad de Usenix , y SOCKS se convirtió efectivamente en un protocolo público. El protocolo ha sido mejorado en la versión 4 por Ying-Da Lee de la empresa NEC .
La versión 4a, "no oficial", agrega soporte para servidores de resolución de nombres a SOCKS.
La versión actual 5 del protocolo, especificada en RFC 1928 , amplía la versión anterior al agregar la capacidad de transmitir UDP , permite la autenticación, la resolución de nombres de dominio por parte del propio servidor SOCKS e IPv6 .
La arquitectura y la aplicación cliente de referencia son propiedad de Permeo Technologies.
Según el modelo OSI , el protocolo SOCKS es una capa intermedia entre la capa de aplicación y la capa de transporte.
Lista de software del servidor SOCKS:
Hay programas disponibles para socksify otras aplicaciones, lo que permite que cualquier software con capacidades de red utilice SOCKS, incluso si no está diseñado para admitir SOCKS.
Lista de clientes de SOCKS
Cliente | Licencia | Versión | Fecha de creación | Plataforma | Versión del protocolo |
---|---|---|---|---|---|
ProxyCap | Shareware | 5.26 | 03/2007 | Windows , Mac OS X | v4, v5, HTTPS, túnel SSH, HTTP |
socat | GLP | 1,6 | 03/2007 | POSIX | túnel multi-opcional |
WideCap | Shareware | 1.4 | 12/2007 | Ventanas | v4, v5, HTTPS |
Proxificar | Shareware | 3,21 | 02/2007 | Windows , Mac OS X | v4, v5, HTTPS, HTTP |
Cliente de túnel HTTP | Freeware | 4.4.400 | 01/2007 | Ventanas | v4, v5, HTTP |
calcetines | GLP | 1,6 | 10/2006 | * BSD, Mac OS X | v4, v5 |
conectar | GLP | 1,95 | 08/2006 | Ventanas , POSIX | v4, v5, HTTPS |
nylon | Cláusula 3-BSD | 1.2.1 | 07/2006 | OpenBSD | v4, v5 |
cadenas de proxy | GLP | 3.1 | 05/2006 | POSIX (fuente) | v4, v5, HTTPS |
FreeCap | GLP | 3,18 | 02/2006 | Ventanas | v4, v5, HTTPS |
Cliente Dante | BSD / Universidad Carnegie Mellon | 1.1.19 | 01/2006 | POSIX | v4, v5, HTTP |
Túnel | Shareware | 1.4 | 06/2005 | Ventanas | Túnel SSH |
Biblioteca de GNet | GLP | 2.0.7 | 02/2005 | POSIX (fuente) | v4, v5 |
CALCETINES Colibrí | Freeware | 8.0 | 10/2003 | Ventanas | v4, v5 |
calcetines | GLP | 1.8 | 10/2002 | POSIX (fuente) | v4, v5 |
Gorila Kernel Socks | GLP | 0.0.4 | 1/2005 | POSIX (fuente) | v5 |
Una conexión SOCKS normal consiste en intercambiar las siguientes tramas TCP:
Del cliente a los servidores de SOCKS
Luego del servidor al cliente
Ejemplo:
Aquí está la solicitud SOCKS que permite conectar un cliente Fred a la dirección 66.102.7.99:80, en este ejemplo el servidor responde con un "OK":
A partir de este punto, todos los datos enviados en este flujo TCP se transferirán en el puerto 80 a la dirección 66.102.7.99
El valor 0x02 ("bind") para el segundo campo de la solicitud permite la apertura de conexiones entrantes para protocolos como FTP en modo activo.
SOCKS 4a es una extensión simple del protocolo SOCKS 4 que permite a un cliente que no puede resolver el nombre de dominio del host de destino incluirlo en su solicitud.
El cliente debe establecer los primeros tres bytes de la dirección IP de destino en NULL y el último byte en un valor que no sea NULL (esto corresponde a una dirección IP de tipo 0.0.0.x, con x un valor diferente a 0, que no es una dirección válida y, por lo tanto, nunca podría haberse utilizado si el cliente hubiera podido resolver el nombre de dominio). Luego, el cliente debe enviar el nombre de dominio de destino después del byte NULL que termina el nombre de usuario y terminarlo con otro byte NULL. Esto se usa de la misma manera para las solicitudes de "conexión" y "vinculación".
Una conexión SOCKS con una solicitud de resolución de nombre de dominio se ve así:
De cliente a servidor
Luego del servidor al cliente
Un servidor que admita el protocolo 4a debe examinar la dirección IP de destino en la solicitud. Si es una dirección 0.0.0.x con una x distinta de cero, el servidor debe leer el nombre de dominio especificado por el cliente en el paquete. A continuación, debe resolver él mismo el nombre de dominio y establecer la conexión, si es posible.
SOCKS v5 es una extensión de SOCKS v4 que ofrece más posibilidades de autenticación y compatibilidad con UDP. El apretón de manos inicial consta del siguiente procedimiento:
Los métodos de autenticación admitidos se enumeran de la siguiente manera:
La solicitud inicial del cliente al servidor es:
A continuación, el servidor comunica su elección:
El resto de la autenticación depende del método elegido.
Después de la autenticación, el cliente envía su solicitud de conexión:
El servidor transmite su respuesta: