General

SOCKSificando aplicaciones en Linux

SOCKS5 es un protocolo de la IETF que fue aprobado en el año 1996, escasamente después de que yo empezara a usar Inteet. El objetivo de SOCKS es enrutar las conexiones de un cliente a un servidor utilizando un proxy SOCKS como intermediario, muy similar a un proxy HTTP (como Squid, por ejemplo) pero con la peculiaridad de que puede enrutar varios tipos de tráfico, no solamente el habitualmente relacionado con la Web.

Por ejemplo, a partir de SOCKS4a, se pueden enrutar las resoluciones de nombres de dominio (DNS) y es normal conseguir implementaciones de SOCKS donde se enruten todas las conexiones TCP y UDP posibles. A pesar de ser un estándar abierto, SOCKS se hizo más popular en plataformas de Microsoft, antes de que los administradores de sistemas empezaran a considerar otros mecanismos como VPNs, túneles y proxies en capa de aplicación para resolver estos problemas, soluciones que son más populares en sistemas Unix.

Recientemente utilicé Dante para conectar mis equipos Linux a un servidor SOCKS5, así que aquí resumo mi experiencia:

  • These are not the droids you’re looking for: en primer lugar verifique si el problema puede ser resuelto con cualquier otro método más accesible para usted en su sistema Linux; por ejemplo, si quiere permitir el acceso a HTTP y FTP desde su red corporativa, use un proxy HTTP como Squid; si quiere hacer un túnel seguro para sus conexiones cuando esté en redes públicas, use una VPN como OpenVPN, o Tor si su preocupación es el anonimato.
  • Soporte nativo: varias aplicaciones en Linux ya tienen soporte nativo para SOCKS, en particular SOCKS5, por ejemplo Firefox, Curl y OpenSSH. Aprovecho aquí para remitir al lector al contenido preparado por Rafael Bonifaz, en el que se explica como usar un proxy SOCKS con SSH.
  • Verifique que dante-client esté disponible en su distribución: en Debian necesitará utilizar squeeze o sid para obtener dante-client, de otra forma, tendrá que compilarlo obteniendo el código fuente de la página Web de sus creadores
  • Use socksify: dante-client provee la aplicación socksify, que en realidad es un shell script que hace uso del omnipresente y omnipotente LD_PRELOAD para precargar las librerías de Dante que “engañan” a las aplicaciones cuando intentan usar la red para que usen SOCKS. También puede usar la variable LD_PRELOAD en sus scripts de arranque, efectivamente socksificando todo su sistema operativo, operación que no recomiendo porque en un sistema Linux modeo se necesita hacer uso de ICMP y otros protocolos que no conviene o no se pueden socksificar.
  • Configure Dante: la configuración de Dante está documentada en el sitio Web de sus creadores, y básicamente se remite a preparar un archivo de configuración /etc/socks.conf o como su distribución lo nombre. Para ello mis recomendaciones son 1) haga una ruta directa a su proxy en caso de que la dirección IP no pertenezca a su misma subred (Dante hará rutas directas para cualquier intento de conexión a IPs en la misma subred) y 2) provea y utilice un servicio de DNS forwarding, con caché opcional, dentro de su red. La razón de esto es que a pesar de que SOCKS4a y SOCKS5 pueden enrutar las solicitudes de resolución por SOCKS, no todos los servidores SOCKS pueden hacer esto de forma correcta, así que es mejor que su servidor DHCP sirva una dirección de servidor de nombres que sea útil dentro de su red. Le ahorrará dolores de cabeza. Con esto, un archivo de configuración puede ser tan sencillo como:
route {                                                                                from: 0.0.0.0/0 to: 0.0.0.0/0 via: [IP/hostname del proxy] port = 1080        proxyprotocol: socks_v5        method: none}

Disfrute su Linux socksificado.

Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s