Tor Exit Router con IP de salida no presente en una blacklist

Uno de los grandes problemas de la red Tor, es que para su correcto funcionamiento la lista de nodos que forman parte de la red es pública. Para poder unirse a la red, hay que descargarse a partir de un directorio todos los nodos activos. Una vez que tenemos toda la información, nuestro nodo es capaz de establecer circuitos de forma aleatoria y puede ser utilizado como nodo de entrada o como nodo relay para otros nodos.

Digo que esto supone un problema, porque muchas páginas web han decidido bloquear todas las IPs de la red Tor. La red Tor es utilizada para lanzar ataques porque permite ocultar la dirección IP de origen, pero es también de utilidad para proporcionar un servicio de anonimato necesario en una sociedad cada vez mas controlada.

Cuando las paginas web bloquean las IPs de Tor, están penalizando a todos los usuarios que necesitan utilizar este servicio para navegar de forma legal. No hay que olvidar que una IP no es equivalente a un único usuario, pero al mismo tiempo es comprensible que los sitios web quieran protegerse.

Para daros algunos ejemplos, expedia.com o apple.com bloquean todas las IPs de Tor (que seas exit router o no, poco importa). Akamai es otro ejemplo, por no citar la mayoría de pasarelas de pago electrónico (hipay.com) o incluso la web de hacienda (aeat.es)

Si quieres ser un exit router, conviene que la IP de salida a internet no sea la misma que la IP declarada en la red Tor, de esta forma los usuarios de esta red podrán utilizar tu nodo como salida a internet sin sufrir los bloqueos. Si tienes dos IPs no hay problema, pero yo os voy a contar aquí como hacer para utilizar la red Tor en casa y cambiar la IP de salida gracias a un servidor externo.

Es decir, vamos a configurar un tunnel IP-in-IP entre nuestro nodo Tor de casa y el servidor externo, de manera que enviaremos todas las conexiones de salida de la red Tor a través de este servidor con ayuda de unas cuantas reglas de routing. En resumen, participaremos en la red Tor con la IP de nuestra casa, pero la salida de esta red se hará a través del servidor externo, con una IP que no se encuentra en niguna blacklist.

Lo primero es configurar el túnel en nuestro servidor de casa:

# ip tunnel add tuxe mode ipip remote 94.23.201.80 local 192.168.7.6 ttl 255
# ip link set dev tuxe up
# ip addr add dev tuxe 10.0.50.1 peer 10.0.50.2/32

Ahora nos vamos a nuestro servidor externo:

# ip tunnel add tuxe mode ipip local 94.23.201.80 remote 88.190.118.95 ttl 255
# ip link set dev tuxe up
# ip addr add dev tuxe 10.0.50.2 peer 10.0.50.1/32

En el servidor externo, hay que añadir una ruta hacia la red de casa:

# route add -net 192.168.7.0/24 gw 10.0.50.1

Y también una regla de masquerading, en nuestro caso en el fichero /etc/shorewall/masq:

#INTERFACE    SOURCE
eth0          192.168.7.0/24  

Ahora, si miramos la configuration de Tor, nos damos cuenta que ya existe un parámetro para definir la IP de salida:

## If you have multiple network interfaces, you can specify one for outgoing traffic to use.
OutboundBindAddress 10.0.50.1  

El problema es que aunque seleccionemos la ip 10.0.50.1, el destino puede ser cualquiera, y el nodo de mi casa tiene una ruta por defecto hacia la box de internet de casa. ¿Cómo podemos hacer para cambiar la ruta por defecto cuando el tráfico proviene de la dirección 10.0.50.1? A mí se me ha ocurrido utilizar una regla de mangle que va a marcar todos los paquetes que deseamos enviar por el túnel, y luego sólo hay que crear una tabla de rutas auxiliar con la ruta buena por defecto. Editamos el archivo /etc/shorewall/mangle y añadimos las siguientes líneas:

# ACTION  SOURCE  DEST  PROTO  DPORT  SPORT  USER  TEST  LENGTH  TOS
MARK(1)      $FW        tuxe  
MARK(1)      0.0.0.0/0       tuxe

MARK(1)      $FW        eth0        tcp 443,80  
MARK(1)        0.0.0.0/0   eth0        tcp 443,80  

Estas reglas marcan todo lo que sale por el túnel y todo lo que sale por la interface eth0 hacia los puertos 443 y 80, que son los únicos puertos de salida aceptados por mi nodo Tor.

Al principio pensaba que con las dos primeras reglas era suficiente, pero he tenido que añadir las otras para que funcione, no tengo muy claro por qué.

Lo único que queda es configurar la nueva tabla de rutas en el fichero /etc/iproute2/rt_tables:

#
# reserved values
#
255    local  
254    main  
253    default  
0    unspec  
#
# local
#
#1    inr.ruhep
200 tuxe-route  
# ip route add default via 10.0.50.2 dev tuxe table tuxe-route
# ip route add 192.168.7.0/24 dev eth0 table tuxe-route
# ip rule add fwmark 0x1 table tuxe-route

Para comprobar que todo ha salido bien, os aconsejo ejecutar un tcpdump -n -i tuxe para ver el tráfico que pasa por el túnel.

Espero que os haya gustado el post, para terminar os dejo una pequeña advertencia: con este sistema los usuarios de Tor no serán bloqueados, pero la IP de vuestra casa sí!