Articulo de referencia

MEDIAS

SOCKS es un protocolo de Internet que intercambia paquetes de red entre un cliente y un servidor a través de un servidor proxy . SOCKS5 proporciona autenticación opcionalmente ,...

SOCKS es un protocolo de Internet que intercambia paquetes de red entre un cliente y un servidor a través de un servidor proxy . SOCKS5 proporciona autenticación opcionalmente , de modo que solo los usuarios autorizados pueden acceder a un servidor. En la práctica, un servidor SOCKS actúa como proxy para las conexiones TCP a una dirección IP arbitraria y proporciona un medio para que se reenvíen los paquetes UDP. El protocolo SOCKS opera entre la capa de aplicación y la capa de transporte . [ 1 ] Un servidor SOCKS acepta conexiones de clientes entrantes en el puerto TCP 1080. [ 1 ] [ 2 ]

Historia

El protocolo fue diseñado y desarrollado originalmente por David Koblas, administrador de sistemas de MIPS Computer Systems . Después de que MIPS fuera adquirida por Silicon Graphics en 1992, Koblas presentó un artículo sobre SOCKS en el Simposio de Seguridad Usenix de ese año, [ 3 ] haciendo que SOCKS estuviera disponible públicamente. [ 4 ] El protocolo fue extendido a la versión 4 por Ying-Da Lee de NEC .

La arquitectura de referencia y el cliente SOCKS son propiedad de Permeo Technologies , [ 5 ] una empresa derivada de NEC . ( Blue Coat Systems compró Permeo Technologies y a su vez fue adquirida por Symantec ).

El protocolo SOCKS5 fue originalmente un protocolo de seguridad que facilitaba la administración de cortafuegos y otros productos de seguridad. Fue aprobado por la IETF en 1996. [ 1 ] El protocolo se desarrolló en colaboración con Aventail Corporation , que comercializa la tecnología fuera de Asia. [ 6 ]

Acrónimo

SOCKS se define a veces como un acrónimo de "socket secure" desde al menos 2001, [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] aunque no se definió originalmente como tal en el RFC de la versión 5 del protocolo SOCKS en 1996 [ 1 ] o en el documento del Simposio de Seguridad UNIX III en 1992 [ 3 ] sino que simplemente se refería a un protocolo proxy específico diseñado para facilitar la comunicación entre clientes y servidores a través de un cortafuegos.

Uso

SOCKS es un estándar de facto para pasarelas de nivel de circuito (pasarelas de nivel 5). [ 12 ]

La naturaleza de nivel de circuito/sesión de SOCKS lo convierte en una herramienta versátil para reenviar cualquier tráfico TCP (o UDP desde SOCKS5), creando una interfaz para todo tipo de herramientas de enrutamiento. Se puede utilizar como:

  • Una herramienta de elusión que permite que el tráfico evite el filtrado de Internet para acceder a contenido que de otro modo estaría bloqueado, por ejemplo, por gobiernos, lugares de trabajo, escuelas y servicios web específicos de cada país. [ 13 ] Dado que SOCKS es muy detectable, un enfoque común es presentar una interfaz SOCKS para protocolos más sofisticados:
    • El software proxy Tor onion presenta una interfaz SOCKS a sus clientes. [ 14 ]
  • Proporciona una funcionalidad similar a la de una red privada virtual , permitiendo que las conexiones se reenvíen a la red "local" de un servidor:
    • Algunos paquetes SSH, como OpenSSH , admiten el reenvío dinámico de puertos, lo que permite al usuario crear un proxy SOCKS local. [ 15 ] Esto puede liberar al usuario de las limitaciones de conectarse únicamente a un puerto y servidor remoto predefinidos.

Protocolo

CALCETINES4

Una solicitud de conexión SOCKS4 típica tiene este aspecto:

VER : 8 bits
Número de versión de SOCKS, 0x04 para esta versión.
CMD : 8 bits
Código de comando:
  • 0x01: Establecer una conexión de flujo TCP/IP .
  • 0x02: Establece una vinculación de puerto TCP/IP.
DSTPORT : 16 bits
Número de puerto de destino, en orden de bytes de red .
DESTIP : 32 bits
Dirección IPv4 de destino , en orden de bytes de red.
ID : variable
La cadena de ID de usuario, terminada en nulo .

El servidor responde con:

VN : 8 bits
Versión de respuesta (un byte nulo).
REP : 8 bits
Código de respuesta:
  • 0x5a: Solicitud concedida.
  • 0x5b: Solicitud rechazada o fallida.
  • 0x5c: La solicitud falló porque el cliente no está ejecutando identd (o no es accesible desde el servidor).
  • 0x5d: La solicitud falló porque el identd del cliente no pudo confirmar el ID de usuario en la solicitud.
DSTPORT : 16 bits
El número de puerto de destino, que tiene sentido si se proporciona en BIND, debe ignorarse en caso contrario.
DESTIP : 32 bits
Dirección IPv4 de destino . Junto con DSTPORT, la dirección IP:puerto a la que debe vincularse el cliente.

Por ejemplo, esta es una solicitud SOCKS4 para conectar a Fred a 66.102.7.99:80 , el servidor responde con un "OK":

  • Cliente:0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
    • El último campo es "Fred" en ASCII , seguido de un byte nulo.
  • Servidor:0x00 | 0x5A | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
    • 0xXX puede ser cualquier valor de byte. El protocolo SOCKS4 especifica que los valores de estos bytes deben ignorarse.

A partir de este momento, cualquier dato enviado desde el cliente SOCKS al servidor SOCKS se reenvía a 66.102.7.99 , y viceversa.

El campo de comando puede ser 0x01 para "connect" o 0x02 para "bind"; el comando "bind" permite conexiones entrantes para protocolos como FTP activo .

CALCETINES4a

SOCKS4a extiende el protocolo SOCKS4 para permitir que un cliente especifique un nombre de dominio de destino en lugar de una dirección IP; esto es útil cuando el propio cliente no puede resolver el nombre de dominio del host de destino a una dirección IP. Fue propuesto por Ying-Da Lee, autor de SOCKS4. [ 16 ]

El cliente debe establecer los tres primeros bytes de DSTIP en NULL y el último byte en un valor distinto de cero. (Esto corresponde a la dirección IP 0.0.0.x, donde x es distinto de cero, una dirección de destino inadmisible que, por lo tanto, nunca debería aparecer si el cliente puede resolver el nombre de dominio). Tras el byte NULL que finaliza USERID, el cliente debe enviar el nombre de dominio de destino y finalizarlo con otro byte NULL. Esto se utiliza tanto para las solicitudes de "conexión" como de "enlace".

Cliente al servidor SOCKS:

CALCETINES4_C
Paquete de protocolo de enlace del cliente SOCKS4 (arriba)
DOMINIO
el nombre de dominio del host al que contactar, nulo (0x00) terminado

Servidor a cliente SOCKS: (Igual que SOCKS4)

Un servidor que utiliza el protocolo SOCKS4a debe verificar la dirección DSTIP en el paquete de solicitud . Si representa la dirección 0.0.0.x con x distinto de cero, el servidor debe leer el nombre de dominio que el cliente envía en el paquete. El servidor debe resolver el nombre de dominio y establecer la conexión con el host de destino si es posible.

CALCETINES5

El protocolo SOCKS5 se define en el RFC 1928. Es una extensión incompatible del protocolo SOCKS4; ofrece más opciones de autenticación y añade compatibilidad con IPv6 y UDP , este último utilizable para consultas DNS . El protocolo de enlace inicial consta de lo siguiente: 

  • El cliente se conecta y envía un saludo que incluye una lista de los métodos de autenticación compatibles.
  • El servidor elige uno de los métodos (o envía una respuesta de error si ninguno de ellos es aceptable).
  • En función del método de autenticación elegido, ahora pueden intercambiarse varios mensajes entre el cliente y el servidor.
  • El cliente envía una solicitud de conexión similar a SOCKS4.
  • El servidor responde de forma similar a SOCKS4.

El saludo inicial del cliente es:

VER
Versión SOCKS (0x05)
NAUTH
Número de métodos de autenticación admitidos, uint8
AUTORIZACIÓN
Métodos de autenticación, se admite 1 byte por método.
Los métodos de autenticación admitidos se numeran de la siguiente manera:
  • 0x00: Sin autenticación
  • 0x01: GSSAPI ( RFC 1961 ) 
  • 0x02: Nombre de usuario/contraseña ( RFC 1929 ) 
  • 0x03–0x7F: métodos asignados por IANA [ 17 ]
    • 0x03: Protocolo de autenticación de desafío-respuesta
    • 0x04: Sin asignar
    • 0x05: Método de autenticación de desafío-respuesta
    • 0x06: Capa de sockets seguros
    • 0x07: Autenticación NDS
    • 0x08: Marco de autenticación múltiple
    • 0x09: Bloque de parámetros JSON
    • 0x0A–0x7F: Sin asignar
  • 0x80–0xFE: métodos reservados para uso privado
VER
Versión SOCKS (0x05)
CAUTH
método de autenticación elegido, o 0xFF si no se ofrecieron métodos aceptables.

La autenticación posterior depende del método. La autenticación de nombre de usuario y contraseña (método 0x02) se describe en RFC 1929 : 

VER
0x01 para la versión actual de autenticación de nombre de usuario/contraseña
IDLEN, ID
Longitud del nombre de usuario, uint8; nombre de usuario como cadena de bytes
PWLEN, PW
Longitud de la contraseña, uint8; contraseña como cadena de bytes
VER
0x01 para la versión actual de autenticación de nombre de usuario/contraseña
ESTADO
0x00 éxito, de lo contrario fallo, la conexión debe cerrarse.

Tras la autenticación, la conexión puede continuar. Primero definimos un tipo de datos de dirección como:

TIPO
tipo de dirección. Una de las siguientes:
  • 0x01: Dirección IPv4
  • 0x03: Nombre de dominio
  • 0x04: Dirección IPv6
ADDR
Los datos de la dirección que se muestran a continuación. Según el tipo:
  • 4 bytes para la dirección IPv4
  • 1 byte de longitud del nombre seguido de 1–255 bytes para el nombre de dominio.
  • 16 bytes para la dirección IPv6
VER
Versión SOCKS (0x05)
CMD
código de comando:
  • 0x01: establecer una conexión de flujo TCP/IP
  • 0x02: establecer una vinculación de puerto TCP/IP
  • 0x03: asociar un puerto UDP
VSR
Reservado, debe ser 0x00
DSTADDR
Dirección de destino, consulte la estructura de direcciones anterior.
DSTPORT
Número de puerto en orden de bytes de red
VER
Versión SOCKS (0x05)
ESTADO
código de estado:
  • 0x00: solicitud concedida
  • 0x01: fallo general
  • 0x02: conexión no permitida por el conjunto de reglas
  • 0x03: red inaccesible
  • 0x04: host inaccesible
  • 0x05: conexión rechazada por el host de destino
  • 0x06: TTL expirado
  • 0x07: comando no compatible / error de protocolo
  • 0x08: tipo de dirección no compatible
VSR
Reservado, debe ser 0x00
BNDADDR
Dirección vinculada al servidor en el formato de "dirección SOCKS5" especificado anteriormente
Puerto de enlace
Número de puerto vinculado al servidor en orden de bytes de red

Dado que los clientes pueden usar direcciones resueltas o nombres de dominio, existe una convención en cURL para etiquetar la variante de nombre de dominio de SOCKS5 como "socks5h" y la otra simplemente como "socks5". Existe una convención similar entre SOCKS4a y SOCKS4. [ 18 ]

Software

Servidores

Implementaciones de servidores proxy SOCKS

  • Sun Java System Web Proxy Server es un servidor proxy de almacenamiento en caché que se ejecuta en servidores Solaris, Linux y Windows y que admite HTTPS, filtros de E/S NSAPI, reconfiguración dinámica, SOCKSv5 y proxy inverso .
  • WinGate es un servidor proxy multiprotocolo y servidor SOCKS para Microsoft Windows que admite SOCKS4, SOCKS4a y SOCKS5 (incluida la autenticación UDP-ASSOCIATE y GSSAPI). También permite transferir conexiones SOCKS al proxy HTTP, por lo que puede almacenar en caché y analizar el tráfico HTTP a través de SOCKS.
  • SocksGate5 es un firewall SOCKS de aplicación con función de inspección en la capa 7 del modelo OSI, la capa de aplicación. Dado que los paquetes se inspeccionan en la capa 7 del modelo OSI, el firewall SOCKS de aplicación puede detectar incumplimientos de protocolo y bloquear contenido específico.
  • Dante es un servidor SOCKS a nivel de circuito que puede utilizarse para proporcionar conectividad de red conveniente y segura, requiriendo únicamente que el host en el que se ejecuta Dante tenga conectividad de red externa. [ 19 ]
  • HevSocks5Server es un servidor SOCKS de alto rendimiento y bajo consumo de recursos para Unix (Linux/BSD/macOS). Admite los métodos estándar TCP-CONNECT y UDP-ASSOCIATE, así como la autenticación con múltiples nombres de usuario y contraseñas.
  • uSOCKS5 es un servidor SOCKS5 mínimo escrito en Python que admite TCP-CONNECT estándar, útil para la lectura educativa.

Otros programas que proporcionan una interfaz de servidor SOCKS

  • OpenSSH permite la creación dinámica de túneles, especificados mediante un subconjunto del protocolo SOCKS, que admite el comando CONNECT.
  • PuTTY es un cliente SSH para Win32 que admite la creación local de túneles SOCKS (dinámicos) a través de servidores SSH remotos.
  • Secure ShellFish es un cliente SSH para iOS y macOS que incluye un servidor SOCKS.
  • ShimmerCat [ 20 ] es un servidor web que utiliza SOCKS5 para simular una red interna, lo que permite a los desarrolladores web probar sus sitios locales sin modificar su archivo /etc/hosts .
  • Tor es un sistema diseñado para permitir el anonimato en línea. Tor ofrece a sus clientes una interfaz de servidor SOCKS que solo utiliza el protocolo TCP.
  • Shadowsocks es una herramienta para eludir la censura. Proporciona una interfaz SOCKS5.
  • Implementaciones de netcat , como Ncat y socat.

Clientela

El software cliente debe tener soporte nativo para SOCKS para poder conectarse a través de SOCKS.

Navegador

  • Chrome: admite SOCKS4 y SOCKS4a. [ 21 ] [ 22 ]
  • Firefox: compatible con SOCKS4, SOCKS4a y SOCKS5.
  • Internet Explorer y Microsoft Edge basado en EdgeHTML: solo admiten SOCKS4.
  • Microsoft Edge basado en Chromium: compatible con SOCKS4 y SOCKS4a.

Existen programas que permiten a los usuarios sortear dichas limitaciones:

Calcetines

Los Socksifiers permiten que las aplicaciones accedan a las redes mediante un proxy sin necesidad de admitir ningún protocolo de proxy. La forma más común es configurar un adaptador de red virtual y las tablas de enrutamiento adecuadas para enviar el tráfico a través de dicho adaptador.

  • Proxifier , un programa propietario de pago para Windows y macOS que puede forzar a los programas a usar un proxy SOCKS, HTTPS o HTTP mediante la Plataforma de filtrado de Windows (en Windows) [ 23 ] o el Marco de extensión de red (en macOS). [ 24 ]
  • tun2socks, una herramienta de código abierto que crea adaptadores TUN TCP virtuales a partir de un proxy SOCKS, con capacidad UDP si el otro extremo lo admite. Funciona en Linux y Windows, [ 25 ] tiene una versión para macOS y una reimplementación en Golang . [ 26 ] Otra implementación, escrita en C con buen rendimiento, funciona en Linux/Android/BSD/macOS e iOS. [ 27 ]
  • proxychains, un programa de Unix que fuerza el tráfico TCP a través de proxies SOCKS o HTTP en los programas (vinculados dinámicamente) que ejecuta. Funciona en varios sistemas tipo Unix . [ 28 ]

Traducción de proxies

  • Polipo , un servidor proxy HTTP/1.1 descontinuado para reenvío y almacenamiento en caché con soporte para IPv4 . De código abierto y compatible con Linux , OpenWrt , Windows , Mac OS X y FreeBSD . Casi cualquier navegador web puede usarlo.
  • Privoxy , un proxy SOCKS a HTTP sin almacenamiento en caché.
  • Tinyproxy es un demonio proxy HTTP/HTTPS ligero para sistemas operativos POSIX. Diseñado desde cero para ser rápido y compacto, ofrece una interfaz de proxy HTTP y puede conectarse a proxies ascendentes SOCKS4/5 y HTTP.

Seguridad

La falta de cifrado en el intercambio de solicitudes y paquetes hace que SOCKS sea prácticamente vulnerable a ataques de intermediario y a la interceptación de direcciones IP, lo que, en consecuencia, abre la puerta a la censura por parte de los gobiernos.

Rendimiento y limitaciones

Los proxies SOCKS, en particular SOCKS5, generalmente ofrecen un rendimiento mejorado y una compatibilidad de protocolo más amplia en comparación con SOCKS4, lo que los hace adecuados para casos de uso que implican alta concurrencia y tráfico UDP. A diferencia de los proxies HTTP, SOCKS5 opera en la capa de sesión y no inspecciona ni filtra datos, lo que reduce la sobrecarga y puede resultar en una menor latencia, beneficiosa para aplicaciones sensibles a la latencia como los juegos o la transmisión de contenido. Las pruebas de rendimiento de varias implementaciones de SOCKS5 muestran que puede manejar miles de conexiones simultáneas con tiempos de respuesta a menudo en milisegundos, lo que demuestra un alto potencial de rendimiento bajo carga. [ 29 ]

Sin embargo, SOCKS carece de cifrado integrado, lo que deja el tráfico vulnerable a la interceptación y lo hace menos seguro que las redes privadas virtuales (VPN) o los proxies HTTPS que proporcionan encapsulación e integridad de datos. Además, el uso de un proxy SOCKS añade un salto de red adicional, lo que puede aumentar la latencia y afectar a escenarios donde el rendimiento es crucial. Si bien SOCKS5 admite UDP mediante el UDP ASSOCIATEcomando, el uso de un proxy UDP complica la superación del firewall y puede resultar poco fiable en algunos entornos de red. [ 30 ]

Estas características determinan las capacidades y limitaciones prácticas de rendimiento de SOCKS, definiendo su uso apropiado en muchos escenarios de proxy, pero limitando su idoneidad cuando se requiere cifrado o una latencia mínima.

Véase también

Referencias

  1. 1 2 3 4 M. Leech; M. Ganis; Y. Lee; R. Kuris; D. Koblas; L. Jones (marzo de 1996). Protocolo SOCKS Versión 5. Grupo de Trabajo de Redes. doi : 10.17487/RFC1928 . RFC 1928 .Norma propuesta.
  2. "Registro de nombres de servicio y números de puerto de protocolo de transporte" . Autoridad de Números Asignados de Internet . 19 de mayo de 2017. Consultado el 23 de mayo de 2017 .
  3. 1 2 Koblas, David; Koblas, Michelle R. SOCKS (PDF) . Simposio de seguridad UNIX de USENIX III . Recuperado el 16 de noviembre de 2019 .
  4. Darmohray, Tina (febrero de 2005). "Cortafuegos y cuentos de hadas" (PDF) . ;login: . Vol. 30, n.º 1. Berkeley, California : USENIX Association. pág. 21. ISSN 1044-6397 . Archivado (PDF) del original el 16 de agosto de 2025. Recuperado el 3 de marzo de 2025 .    
  5. Índice del archivo en la Wayback Machine
  6. CNET: El ciberespacio desde el espacio exterior .
  7. EE. UU. US8984268B2 
  8. EE. UU. US20210058367A1 
  9. EE. UU. US11190374B2 
  10. JP JP6761452B2 
  11. EE. UU. US11425565B2 
  12. Oppliger, Rolf (2003). «Puertas de enlace a nivel de circuito». Tecnologías de seguridad para la World Wide Web (2.ª ed.). Artech House. ISBN  1580533485Consultado el 21 de enero de 2020 .
  13. "Informe de uso de herramientas de elusión de 2010" (PDF) . Centro Berkman para Internet y la Sociedad de la Universidad de Harvard. Octubre de 2010.
  14. "Preguntas frecuentes sobre Tor" .
  15. "Preguntas frecuentes sobre OpenSSH" . Archivado del original el 1 de febrero de 2002.
  16. Ying-Da Lee. "SOCKS 4A: Una extensión simple del protocolo SOCKS 4" . OpenSSH . Consultado el 3 de abril de 2013 .
  17. IANA.org
  18. "CURLOPT_PROXY" . curl.se . Consultado el 20 de enero de 2020 .
  19. "Productos desarrollados por Inferno Nettverk A/S" . www.inet.no. Consultado el 20 de marzo de 2021 .
  20. "Red fácil con SOCKS5" . shimmercat.com . ShimmerCat. Archivado del original el 13 de septiembre de 2018. Consultado el 20 de abril de 2016 .
  21. "Configuración de un servidor proxy SOCKS en Chrome" . www.chromium.org . Consultado el 19 de marzo de 2024 .
  22. "Chromium" . issues.chromium.org . Consultado el 3 de octubre de 2025 .
  23. "Proxifier para Windows v4" . www.proxifier.com . Consultado el 8 de agosto de 2025 .
  24. "Proxifier para Mac v3" . www.proxifier.com . Consultado el 8 de agosto de 2025 .
  25. Bizjak, Ambroz (20 de enero de 2020). "ambrop72/badvpn: lenguaje de scripting NCD, proxy tun2socks, VPN P2P" . GitHub . Recuperado el 20 de enero de 2020 .
  26. "xjasonlyu/tun2socks: tun2socks – impulsado por la pila TCP/IP gVisor" . GitHub .
  27. "heiher/hev-socks5-tunnel: Un tun2socks de alto rendimiento" . GitHub .
  28. Hamsik, Adam (20 de enero de 2020). "proxychains: una herramienta que obliga a que cualquier conexión TCP realizada por una aplicación determinada pase por un proxy como TOR o cualquier otro proxy SOCKS4, SOCKS5 o HTTP(S)" . GitHub . Consultado el 20 de enero de 2020 .
  29. Nonik, Oleksandr (2024). Enfoques para resolver problemas de rendimiento de proxy para los protocolos HTTP y SOCKS5 (PDF) . Actas del taller CEUR.
  30. "Investigación de mercado por delegación 2025" . Proxyway . 5 de mayo de 2025.
  • RFC 1929 : Autenticación de nombre de usuario/contraseña para SOCKS V5 
  • RFC 1961 : Método de autenticación GSS-API para SOCKS versión 5 
  • RFC 3089 : Un mecanismo de puerta de enlace IPv6/IPv4 basado en SOCKS 
  • Draft-ietf-aft-socks-chap , Protocolo de autenticación de desafío-respuesta para SOCKS V5
  • SOCKS: Un protocolo para proxy TCP a través de cortafuegos , Protocolo SOCKS Versión 4 ( NEC )