Bypasseando firewalls con Shadowsocks

En shaalgunas ocasiones queremos ocultar nuestro tráfico en la red en la que nos encontramos.

Por ejemplo cuando nos conectamos a redes wifi públicas o no fiables. En otras ocasiones, simplemente, queremos eludir un firewall.

Para esto hay diferentes opciones. Una muy utilizada es usar TOR. Sin embargo, es posible que no queramos utilizarla. Sencillamente queremos usar una conexión a Internet y usar nuestro propia red para navegar. Para ello es para lo que nos sirven los proxys.

En nuestra red segura, levantamos el servidor proxy. En los dispositivos cliente, sencillamente nos conectamos a ella. En el caso de los proxys socks5, podemos, además enrutar tráfico UDP (en el caso de TOR, aunque sea un proxy socks5, y el los túneles ssh, no se puede usar el tráfico UDP ).

Shadowsocks es un proxy socks5, multiplataforma y con una alta flexibilidad en el cifrado. La idea básica es crear un túnel desde nuestro dispositivo cliente hasta el servidor socks. El tráfico pasará por él y saldrá por el servidor, permitiéndonos eludir firewalls e impidiendo que nuestro tráfico sea capturado.

 

Es algo similar a una VPN, pero mucho más sencillo de desplegar. Además, con el añadido de disponer clientes para casi todas las plataformas.

 

Empecemos instalando el servidor. En el caso de Linux, la gestión del servicio no tiene interfaz gráfica, aunque sí que la hay para los clientes. En el caso de IOS o Windows, para la configuración del servicio se puede utilizar la herramienta, que ya viene con su GUI.

 

Vamos a ver el ejemplo en Arch Linux. Empezamos instalando el servidor:

# pacman -Syu shadowsocks

Ahora vamos a crear un fichero de configuración. Se hace formato json, en la ruta /etc/shadowsocks/. Por ejemplo, creamos el fichero /etc/shadowsocks/mitunel.json, con el siguiente contenido:

{
“server”:”ip_del_servidor”,
“server_port”:8080,
“local_address”: “127.0.0.1”,
“local_port”:1080,
“password”:”password”,
“timeout”:300,
“method”:”aes-128-ctr”,
“fast_open”: false,
“workers”: 1
}

Se puede ver que es una configuración muy sencilla:

  • Indicamos el servidor al que nos queremos conectar. Si queremos indicar varios, se hace con la sintaxis siguiente: [“ip1”,”ip2″…]. De esta forma, si tenemos diferentes servidores, podremos balancear carga entre ellos.
  • Indicamos el puerto en el que está escuchando el servidor.
  • Indicamos un puerto local, que será al que conectemos nuestras aplicaciones para tunelizarlas.
  • Indicamos la IP donde escuchará. Si la idea es evadir cortafuegos u ocultar nuestro tráfico, deberá ser 127.0.0.1.
  • Indicamos la clave para el cifrado.
  • Indicamos el método de cifrado, por defecto es aes-128-ctr. Para dispositivos OpenWRT, se recomienda utilizar RC4-MD5. Si disponemos de un kernel x86_64, podríamos utilizar salsa20 o chacha20. Salsa20 es mucho más rápido que RC4, pero para móviles, es muy lento. Para poder utilizar estos dos últimos, es necesario instalar libsodium. Si vamos a utilizar aes-128-ctr, puede interesarnos instalar m2crypto, para python2, para que sea más rápido el cifrado.
  • fast-open: Indicamos si queremos utilizar TCP fast open, necesitamos tener un kernel de Linux con versión igual o superior a la 3.7.1. Además de establecer el parámetro a true, necesitaremos establecer el valor de la variable /proc/sys/net/ipv4/tcp_fastopen a 3. Para la sesión actual:

 

#echo 3 > /proc/sys/net/ipv4/tcp_fastopen

  • Si queremos que sea permanente, creamos el fichero en /etc/sysctl.d/99_fastopen.conf, y le añadimos:

 

net.ipv4.tcp_fastopen = 3

  • Workers: El número de hilos que queremos. Para la configuración del servidor, debería ser al menos el número de procesadores que dispongamos.

El mismo fichero puede usarse tanto para configurar el servidor, como el cliente. Se aplicarán los parámetros específicos para cada uno, es decir, si se levanta el servidor, se ignorarán las direcciones locales, pues no aplican.

¿Cómo lo levantamos? Fácil con systemd:

#systemctl start shadowsocks-server@mitunel

En el caso del cliente:

#systemctl start shadowsocks@mitunel

Si queremos hacerlo vía línea de comandos:

ssserver -c /etc/shadowsocks/mitunel

sslocal -c /etc/shadowsocks/mitunel

Bien, una vez tenemos el túnel local conectado al servidor, bastará indicar a las aplicaciones que usen ese servidor proxy, por ejemplo, a firefox.

Algunas capturas del cliente shadowsocks-qt (interfaz gráfica para configurar el cliente, con posiblidad de códigos QR, etc.)

sh1sh3

¡¡Espero que os haya gustado !!

@MMontesDiaz