La red Tor, esa fascinante red que nos provee una capa extra de seguridad en nuestras comunicaciones. Una red capaz de evadir la censura más torturadora para una persona que reside en un país donde la libertad de expresión es nula o inimaginable. Tor (siglas de The Onion Router), es un proyecto cuyo principal objetivo es desarrollar una red distribuida de baja latencia, superpuesto sobre Internet donde el encaminamiento de mensajes no revela la identidad del usuario.
Un Tor-AP (The Onion Router Access Point), es un sencillo script para la creación de un punto de acceso inalámbrico con el fin de dirigir todas las conexiones a la red Tor, segurizando así nuestra integridad.
Importante: Recuerde siempre usar conexiones cifradas y seguras para evitar filtrado de datos ya sea por una vulnerabilidad en la misma red o en el nodo de salida.
Herramientas:
Requeridas:
- tor: El software que creará el proxy transparente y nos permitirá asegurar nuestras conexiones
- iptables (o la herramienta que controla nuestro firewall): El arma secreta de todo este plan lujurioso
Opcionales:
- nyx: El monitor de la red Tor
- dnsmasq (o un servidor DHCP y DNS): El que proporcionará una dirección IP a los clientes y resolverá los nombres de dominio a direcciones IP
- hostapd: El que creará el AP en nuestro dispositivo
Instalación de dependencias:
1 2 3 4 5 6 7 8 9 10 11 | #Requeridos # Debian sudo apt-get install tor # Arch Linux sudo pacman -S tor #Opcionales # Debian sudo apt-get install dnsmasq dnsmasq-base nyx hostapd # Arch Linux sudo pacman -S dnsmasq nyx hostapd |
Requerimientos de hardware:
Esta sección es especial, ya que depende de qué queramos o qué tengamos en nuestras manos para ampliar un poco la red.
- Modo AP en nuestra tarjeta de red inalámbrica: Por si queremos crear un punto de acceso
- Cables ethernet’s y switches (o parecido): En caso de queramos crear la red en LAN en vez de WLAN, aunque pueden crear las dos infraestructuras.
- Un módem: En mi caso un Modem USB, pero ustedes pueden usar el mismo que les ayuda a leer esto.
Creación:
Cabe aclarar que hace un par de semanas estaba jugando con iptables y tor y me propuse a crear un proxy transparente en mi propia laptop, nada del otro mundo; me puse a investigar haber si alguien ya había hecho éso, y por mi suerte lo hizo mucho mejor. El usuario hasta tiene un repositorio llamado «tor-router«.
Luego de leer un poco su código, quise agregarle y quitarle un par de líneas (que considero necesarias e innecesarias), también para no perder la conexión con otros equipos (en caso de de crear una red LAN/WLAN).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # Ya explicaré como obtener el ID de usuario para la variable TOR_UID TOR_UID="<El identificar del usuario de tor>" # El Identificador de usuario de Tor NON_ROUTE="127.0.0.1/8" # Los destinos que no desea enrutar a través de Tor LOCAL_DNS=53 # El puerto DNS local, por defecto es '53' # Esta parte se explicará mejor en la configuración de Tor L_TOR_DNS=5353 # El puerto DNS de Tor para la máquina local L_TRANS_PORT=9040 # El puerto del proxy transparente para la máquina local R_TOR_DNS=5354 # El puerto DNS de Tor para las máquinas remotas (como los clientes conectados en LAN/WLAN) R_TRANS_PORT=9041 # El puerto del proxy transparente para las máquinas remotas iptables --flush iptables --table nat --flush iptables --table nat --append OUTPUT --match owner --uid-owner $TOR_UID --jump RETURN iptables --table nat --append OUTPUT --protocol udp --dport $LOCAL_DNS --jump REDIRECT --to-ports $L_TOR_DNS iptables --table nat --append PREROUTING --protocol udp --dport $LOCAL_DNS --jump REDIRECT --to-ports $R_TOR_DNS for NET in $NON_ROUTE;do iptables --table nat --append OUTPUT --destination $NET --jump RETURN done iptables --table nat --append OUTPUT --protocol tcp --syn --jump REDIRECT --to-ports $L_TRANS_PORT iptables --table nat --append PREROUTING --protocol tcp --syn --jump REDIRECT --to-ports $R_TRANS_PORT |
Sobre la variable «TOR_UID», es el identificador del usuario de Tor (ya que el software Tor tiene un usuario). Para obtenerlo se hace lo siguiente:
1 2 3 4 | # Para distribuciones basadas en Debian: id -u debian-tor # Para distribuciones basadas en Arch Linux o que tenga el mismo nombre de usuario: id -u tor |
El valor resultante es un número, el cual es el identificador de usuario del software Tor.
En mi caso:El valor (en mi caso) es ‘111‘ por lo que el valor de ‘TOR_UID’ es:
1 | TOR_UID=111 |
Quedando de la siguiente manera:
Lo que tenemos que hacer, es darle permisos de ejecución una vez guardado los cambios:
1 | chmod +x ./tor-ap |
Ahora pasemos a la configuración de Tor (en /etc/tor/torrc):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ControlPort 9051 # Opcional, es para que nyx se comunique con el controlador de tor # Cuando Tor necesita asignar una dirección virtual (no utilizada) debido a un comando MAPADDRESS del controlador o la función AutomapHostsOnResolve, Tor elige una dirección no asignada de este rango. Más en 'man 1 tor'. VirtualAddrNetwork 10.192.0.0/10 # Cuando esta opción está habilitada y recibimos una solicitud para resolver una dirección que termina con uno de los sufijos en AutomapHostsSuffixes, asignamos una dirección virtual no utilizada a esa dirección y devolvemos la nueva dirección virtual. Esto es útil para hacer que las direcciones ".onion" funcionen con aplicaciones que resuelven una dirección y luego se conectan a ella. Más en 'man 1 tor' AutomapHostsOnResolve 1 #En las siguientes 'secciones' se asigna la dirección predeterminada (127.0.0.1) en la primera, mientras que en la segunda se asigna la dirección '0.0.0.0', con puertos diferentes (así es como funciona). # Para el loopback TransPort 9040 # El puerto del proxy transparente DNSPort 5353 # El puerto del servidor DNS UDP de Tor # Para la dirección no especificada TransPort 0.0.0.0:9041 DNSPort 0.0.0.0:5354 |
Ejecución básica:
Prueba básica en nuestra misma máquina:
1 2 3 | sudo -u debian-tor tor # si usas debian; si usas otro (como Arch Linux) el usuario es 'tor'; si usas otra distribución haz una investigación simple para saber cuál es el nombre del software 'tor'. Un pequeño comando que quizá le ayude a alguien: 'cat /etc/passwd | grep -i tor | cut -d':' -f1'. sudo ./tor-ap # OJO, ya tienen que tener tor en ejecución, ya sea el daemon o el ejecutable en sí. curl -i http://ip-api.com/json |
Ejecución avanzada:
Una vez visto los principios básicos para configurar el enrutamiento hacia tor, vamos a crear el punto de acceso con el fin de compartir la conexión.
Primero lo primero, configuremos algunas cosas de dnsmasq:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | domain-needed # Los navegadores antiguos tenían una barra que era específica para las búsquedas en los buscadores, pero el usuario por ignorancia usaba la que era para los dominios, lo que provocaba que se perdiera tiempo resolviendo dominios inexistentes, lo que acarreaba en una respuesta DNS "NXDOMAIN". Con esta instrucción se evita eso (aunque los navegadores actuales ya solucionarón ese inconveniente), pero me refiero a los antiguos. bogus-priv # Evitar que se haga una consulta dns inversa a una dirección local o en el espacio de direcciones no-resolv # No usar el fichero 'resolv.conf' # Usar los siguientes nameservers server=1.1.1.1 server=1.0.0.1 # Configuramos el DHCP para asignar el rango de direcciones en 24h(oras) en las interfaces wlp2s0b1 (la de mi tarjeta de red inalámbrica) y enp1s0f0 (la de ethernet). # wlp2s0b1 tendrá el siguiente rango: 192.168.0.2 a 192.168.0.254, mientras que el punto de acceso (nosotros) tendrá la dirección 192.168.0.1 # enp1s0f0 tendrá el siguiente rango: 10.42.0.2 a 10.42.0.254, mientras que la máquina local tendrá la siguiente dirección 10.42.0.1 # Nota-1: Tienen que usar sus propias interfaces. # Nota-2: Recuerden que su tarjeta de red inalámbrica debe admitir el modo AP para que lo puedan crear dhcp-range=wlp2s0b1,192.168.0.2,192.168.0.254,24h dhcp-range=enp1s0f0,10.42.0.2,10.42.0.254,24h # Registramos las consultas y demás (opcional, pero recomendable para la depuración) log-queries log-dhcp log-facility=/var/log/dnsmasq.log |
Ahora se asigna las direcciones IPs:
1 2 | sudo ip a add 192.168.0.1/24 dev wlp2s0b1 sudo ip a add 10.42.0.1/24 dev enp1s0f0 |
dnsmasq es un daemon, pero para esta demostración y depurar un poco, mejor veamos las consultas que hacen los clientes, tanto DHCP con DNS.
1 2 3 4 | # Desactivamos el servicio sudo systecmtl stop dnsmasq.service # Si no tienen systemctl, y usan SysV sudo service dnsmasq stop |
Ahora ejecutamos dnsmasq:
1 2 3 | >sudo dnsmasq -d -C /etc/dnsmasq.conf # -d = No ejecutar en segundo plano # -C = Especificar el archivo de configuración |
Ahora podemos conectar una PC (por ejemplo), usando ethernet al mini-router que estamos haciendo, asignarnos una dirección IP por medio de nuestro servidor DHCP y probamos nuevamente preguntando nuestros datos:
Expandiendo los horizontes…
Muy bien, hemos llegado sanos y salvos a esta sección, por lo que aumentemos un poco más la «dificultad». Creemos un punto de acceso
Para lograr nuestro cometido debemos configurar ‘hostapd’:
1 | sudoedit /etc/hostapd/hostapd.conf |
1 2 3 4 5 6 7 8 9 10 | ssid=DtxdF # El nombre de mi red (¿Original? ¿No?) channel=5 # El canal hw_mode=g # Esta opción y la compatibilidad con 'N' (la veremos más abajo) depende de su tarjeta y significa la tecnología que admite su tarjeta auth_algs=3 # 1=WPA; 2=WEP; 3=Ambos ieee80211n=1 # Compatibilidad con la tecnología 'IEEE 802.11n' wmm_enabled=1 # QoS interface=wlp2s0b1 # La interfaz de la tarjeta de red inalámbrica wpa=2 # La versión 2 de WPA wpa_passphrase=thisisapasswordsupersecure123@ # Una contraseña super segura rsn_pairwise=CCMP # (AES) Counter Mode CBC-MAC Protocol |
Lo ejecutamos:
1 | sudo hostapd /etc/hostapd/hostapd.conf |
Conclusión:
Ahora sabemos cómo crear un Tor-AP para agregar una capa de seguridad a nuestras conexiones, sin necesidad de configurar el navegador o el software que desea conectarse a Internet, sin anteponer un programa que remplace funciones internas que crean incompatibilidades (como tsocks), sin limites, nada más que la imaginación…
Por cierto, para monitorear los circuitos, podemos usar nyx:
1 | nyx -i 9051 |