Evadiendo el filtrado VPN en WiFis públicas: fteproxy y obfsproxy

En el artículo anterior hablamos de cómo podemos montar una VPN con nuestra raspberry pi. Sin embargo, a veces esto no resulta tan fácil si el lugar que nos ofrece acceso a Internet no confiable (WiFis publicas en general) decide aplicar filtrado del tráfico de VPN.

Básicamente un filtrado consiste en evitar que los paquetes lleguen a su destino y esto puede conseguirse de diferentes formas:

  • Por un lado, pueden estar filtrando el tráfico que tenga como destino puertos “raros”, como podría ser el puerto 1194 que es el que estamos utilizando en el caso de nuestra VPN. En este caso la forma de evitarlo es sencilla: simplemente tendríamos que cambiar el puerto del servidor VPN a uno de uso común, como el 80, el 443 o incluso el 8080.
  • Por otro, podría estar implementado un filtrado de protocolos, como por ejemplo denegar el tráfico UDP en determinados puertos que habitualmente se utilizan con otros protocolos, como el 80 TCP. La solución en este caso sería cambiar el archivo de configuración de la VPN y establecer que se utilice TCP.

Con este par de sencillos pasos puede evitarse en muchos casos el filtrado de las VPN, pero ¿y si el restaurante, cafetería, aeropuerto u hotel va más allá en el filtrado de nuestro tráfico VPN (que recordemos, es imprescindible para establecer una conexión segura)?

Para estos casos vamos a ver un par de herramientas del proyecto TOR dedicadas a evadir este filtrado de paquetes por inspección (mediante expresiones regulares o similar):

  • fteproxy es una herramienta que según sus creadores proporciona protección en la capa de transporte para evitar el filtrado de palabras clave, censura y políticas de encaminamiento. Se basa en transmitir flujos de datos como si se tratara de navegación web.
  • obfsproxy es otra herramienta que intenta encapsular el tráfico para evitar filtros de censura. Soporta diferentes protocolos para ello.

Una vez hecha esta breve introducción, pongámonos manos a la obra; vamos a montar el sistema en la VPN. Tal como se tiene montado el sistema no es necesaria ninguna modificación en el archivo de configuración de la VPN en el servidor; bastaría con instalar obfsproxy y fteproxy para la distribución que se esté usando y lanzar el programa.

En resumen la configuración tanto para fteproxy com obfsproxy consiste en un programa cliente y otro en el lado del servidor. Los pasos para montar el sistema son:

En cuanto al cliente hay que modificar el archivo de conexión del cliente de la VPN y lanzar el programa.

Si estamos utilizando fteproxy habría que cambiar lo siguiente del archivo de configuración de OpenVPN:

Remote 127.0.0.1 9090

El puerto 9090 sería el utilizado a la hora de lanzar fteproxy en el cliente con el siguiente comando:

fteproxy --client-port 9090 --server_ip 172.20.3.32 --server-port 8080

server_ip indica la IP de nuestro servidor (para el ejemplo, hemos utilizado la 172.20.3.32) y server_port indica el puerto que tenemos a la escucha de fteproxy.

Para acabar habría que lanzar el fteproxy en el servidor y ya tendríamos el invento funcionando:

fteproxy --server_ip 0.0.0.0 --server_port 8080 --proxy_ip 127.0.0.1 --proxy_port 1194 --mode server

El comando anterior establece el puerto a la escucha para fteproxy (en el servidor), el 8080 en este caso, y por otro indicamos donde está escuchando el servidor de la VPN, por defecto en el 1194.

Si estamos utilizando obfsproxy, en el archivo de configuración del cliente openVPN debemos sustituir el campo remote por lo siguiente:

remote 172.20.3.32 80

y añadir:

socks-proxy-retry
socks-proxy 127.0.0.1 9090

Se lanza el servidor:

obfsproxy obfs2 –dest=127.0.0.1:1194 server 0.0.0.0:80

Y se lanza el cliente:

obfsproxy obfs2 socks 127.0.0.1:9090

Una vez vistas ambas herramientas, veamos unas capturas de wireshark con el tráfico:

1. captura de tráfico normal:

fte02. captura con la VPN montada:

fte1

3. captura con fteproxy + VPN:

fte2

4. captura con obfsproxy + VPN:

fte3

Tras esto, solo quedaría probarlo en un entorno real y de este modo, poder utilizar nuestra conexión con total seguridad incluso en entornos abiertos con el tráfico VPN filtrado.

Comments

  1. Hola, interesante artículo.

    ¿Qué diferencias habrían entre usar este tipo de herramientas y un túnel SSH por ejemplo (asumiendo que se coloca para que escuche en el puerto 80 u 8080?

    Gracias.

  2. Hola, la función de estas herramientas es enmascarar el tráfico para evitar que sean detectadas haciendolo pasar por tráfico común. Se trata de camuflar otro tráfico para que no sea detectado, por ejemplo SSH, openVPN, etc.

    La diferencia es que el SSH puedes detectarlo analizando el tráfico.

    Con obfs o fte podrías camuflar el SSH y que pareciera navegación web.

    Un saludo.