Proxy para navegación anónima usando la red Tor con Docker y RaspberryPI

Introducción

Tras leer el artículo de Un informático en el lado del mal en donde explican como usar Docker para la navegación anónima a través de la red Tor, he decidido probarlo y crear esta entrada para uso personal, y para compartir con la comunidad, aunque te animo encarecidamente a leer el artículo original.

La diferencia entre este artículo y el original es que este se centra en destinar un equipo específico para usar como Proxy en una LAN, en lugar de crearlo en el mismo host en el que estamos navegando. De esta forma podrá ser utilizado por todos los equipos de una misma red privada, cableada o inalámbrica. También hay ligeros cambios en los comandos y descarto aplicaciones de terceros centrándome en el uso de Dockerfile, restando complejidad en su despliegue.

Con Docker podemos tener el software necesario encapsulado en una instancia aislada e independiente tanto del host que alberga los Contenedores como del equipo que usamos para navegar.

Esta solución nos permitirá realizar una navegación anónima con independencia del navegador Tor, pudiendo utilizar nuestro navegador favorito.


¿Qué es la red Tor?

Primero de todo, ¿qué es la red Tor? Pues según la Wikipedia (copy&paste):

Es un proyecto cuyo objetivo principal es el desarrollo de una red de comunicaciones distribuida de baja latencia y superpuesta sobre internet, en la que el encaminamiento de los mensajes intercambiados entre los usuarios no revela su identidad, es decir, su dirección IP (anonimato a nivel de red) y que, además, mantiene la integridad y el secreto de la información que viaja por ella. Por este motivo se dice que esta tecnología pertenece a la llamada darknet o red oscura que no se debe confundir con la deep web o web profunda.

Wikipedia.

Componentes

¿Con qué vamos a montar nuestro Proxy? Básicamente con los siguientes componentes:

  • Raspberry PI 3 y el puerto 8888.
  • Imagen de Docker personalizada, creada con Dockerfile y compuesta por los siguientes programas:
    • Anonsurf, usa la red Tor para ocultar la IP real y añadir una capa de cifrado al tráfico.
    • Tiny proxy, proxy ligero para navegación HTTP/HTTPS. Página oficial aquí.

Lo probaremos en FireFox con el Plugin FoxyProxy Standard en donde indicaremos nuestra Raspberry como servidor proxy para la navegación HTTP/HTTPS.


Instalación

Primero crearemos la imagen personalizada de Docker con Dockerfile y posteriormente crearemos el Contenedor a partir de esta, en donde correrá el servicio a utilizar.

Imagen con Dockerfile

Primero cramos el archivo Dockerfile, nombrado de esta misma forma, con el siguiente contenido:

FROM ubuntu:18.04

RUN apt update && \
    apt install -y software-properties-common git curl p7zip-full wget whois locales python3 python3-pip upx psmisc && \
    add-apt-repository -y ppa:longsleep/golang-backports && \
    apt update && \
    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
WORKDIR /opt
ENV LANG en_US.utf8
ARG DEBIAN_FRONTEND=noninteractive

RUN   apt install -y tinyproxy && sed -i -e '/^Allow /s/^/#/' -e '/^ConnectPort /s/^/#/' -e '/^#DisableViaHeader /s/^#//' /etc/tinyproxy/tinyproxy.conf && \
      apt install -y iptables && git clone https://github.com/Und3rf10w/kali-anonsurf.git && cd kali-anonsurf && ./installer.sh && \
           rm -rf /var/lib/apt/lists/*

CMD anonsurf start; tinyproxy -d

Con Ubuntu 18.04 como sistema operativo base, instalamos los componentes necesarios (líneas RUN) y configuramos la imagen para que arranque ambos programas en segundo plano cuando creemos el contenedor (línea CMD).

Crear la imagen

Creamos la imagen a partir del Dockerfile indicado en el apartado anterior, ejecutando el siguiente comando en el mismo directorio en donde se encuentra el archivo anterior. En este caso llamaremos a la imagen myproxy, pero se puede indicar cualquier otro nombre:

docker build -t myproxy .

Obtenemos la nueva imagen, siempre que no se produzca ningún fallo durante su creación:

# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
myproxy                    latest              c8d95a5f1f82        30 hours ago        629MB

Crear el contenedor

A partir de la imagen anterior creamos el contenedor redirigiendo el puerto 8888 del host local al Contenedor, y dándole permisos privilegiados a este. Lo llamaremos myproxy_container, pero puede ser nombrado de cualquier otra forma. Hay que tener en cuenta que debemos de indicar el nombre de la imagen que le hemos dado durante su creación en el apartado anterior, en nuestro caso myproxy:

docker container run -it --rm --name myproxy_container -p 8888:8888 --privileged myproxy

Indicar que en la creación del Contenedor se especifica que sea en modo interactivo (it) y en background (d), lo que nos permitirá conectarnos a su Shell en cualquier momento, y si este sufriera alguna parada que se elimine (rm) para evitar errores en el servicio tras su rearranque, ya que suele dar problemas. Si se diera este último caso tendremos que volver a ejecutar el comando anterior para volver a crear el Contenedor.

No se arranca en background con la opción -d porque falla cuando lleva un tiempo arrancado sin uso, por lo que mejor ejecutarlo de forma interactiva cada vez que se vaya a utilizar.

Para salir del Contenedor pulsaremos las teclas Ctrl+c, lo cual no solo lo parará sino que lo eliminará por la opción rm indicada.

Quedaría el Contenedor creado en modo interactivo hasta que lo paremos manualmente:

# docker container run -it --rm --name myproxy_container -p 8888:8888 --privileged                                                              myproxy

 * killing dangerous applications
 * cleaning some dangerous cache elements
[ i ] Stopping IPv6 services:


[ i ] Starting anonymous mode:

 * Tor is not running!  starting it  for you

 * Starting tor daemon...                                                                                                             [ OK ]
 * Saved iptables rules

 * Modified resolv.conf to use Tor and Private Internet Access DNS
 * All traffic was redirected through Tor

[ i ] You are under AnonSurf tunnel

Ya podemos usar nuestro proxy para la navegación anónima.


Uso

Para probar el proxy utilizaremos un plugin del navegador FireFox que se llama FoxyProxy Standard, el cual nos permitirá cambiar rápidamente como navegamos desde su Widget.

Plugin para Proxy

Agregamos el plugin a nuestro navegador:

Y le configuramos los datos de nuestro proxy, indicando la dirección IP ejecutando el siguiente comando en la Raspberry:

# ifconfig
...
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 46  bytes 4600 (4.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46  bytes 4600 (4.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.31  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f6e:2eb1:895c:3b37  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:aa:15:03  txqueuelen 1000  (Ethernet)
        RX packets 775102  bytes 992697494 (946.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 176422  bytes 35390418 (33.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Mostramos solo las líneas que nos interesan. En nuestro caso tenemos el equipo conectado a la red Wifi a través de la interfaz wlan0 con la dirección IP 192.168.0.31, aunque si la tuviéramos conectada por cable estaría en la interfaz eth0, posiblemente.

Configuramos el servidor proxy en el plugin:

Le indicamos el nombre que queramos, en nuestro caso MyProxy, para uso HTTP, la dirección IP y puerto del proxy, y guardamos.

Comprobar la IP asignada

Para confirmar que funciona vamos a consultar la famosa URL que nos muestra qué dirección IP tenemos asignada Cuál es mi IP.

Primero sin el proxy seleccionado:

Ahora activamos el Proxy y comprobamos de nuevo la IP que nos muestra la página:

Y vemos como nuestra IP ha cambiado:


Conclusión

Navegar de manera anónima no solo nos permite ocultar nuestra identidad en la red sino también aprovechar las ventajas que la red Tor nos ofrece. Te animo a que te informes sobre esta red y conozcas todas sus características.


Enlaces de interés

Artículo del interesantísimo blog Un informático en el lado del mal

Docker oficial.

Proyecto Tor.

Wikipedia oficial sobre la red Tor.

TinyProxy oficial.

Proxy plugin para Firefox ProxyFoxy Standard.

Obtener la IP pública asignada en cualesmiip.com.