Cómo crear un punto de acceso con todas las conexiones dirigidas a la red Tor

Iniciado por DtxdF, Mayo 07, 2020, 04:24:47 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, 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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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:

Las herramientas que usaremos para estos fines, serán las siguientes:

Requeridas:


  • tor: El software que creará el proxy transparente y nos permitirá segurizar 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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta en nuestro dispositivo

Instalación de dependencias:

Código: bash
#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 modem: En mi caso un Modem USB, pero ustedes pueden usar el mismo que les ayuda a leer esto.

Creación:

Quiero 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 para ver si alguien ya había hecho éso, y para mi suerte lo hizo mucho mejor. El usuario hasta tiene un repositorio llamado "No tienes permitido ver los links. Registrarse o Entrar a mi cuenta".

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).

Aclarado lo anterior, aquí está el código:


Código: bash
#!/usr/bin/env sh

# 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:

Código: bash
# 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:

Código: bash
TOR_UID=111


Quedando de la siguiente manera:


Lo que tenemos que hacer, es darle permisos de ejecución una vez guardado los cambios:

Código: bash
chmod +x ./tor-ap


Ahora pasemos a la configuración de Tor (en /etc/tor/torrc):

Código: text
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:

En esta sección veremos lo más básico de este tutorial: Hacer una prueba básica en nuestra misma máquina:

Código: bash
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


La ilustración del resultado:


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:


Código: text
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:

Código: bash
sudo ip a add 192.168.0.1/24 dev wlp2s0b1
sudo ip a add 10.42.0.1/24 dev enp1s0f0


Quiero aclarar que 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.

Código: bash
# Desactivamos el servicio
sudo systecmtl stop dnsmasq.service
# Si no tienen systemctl, y usan SysV
sudo service dnsmasq stop


Ahora ejecutamos dnsmasq:

Código: bash
sudo dnsmasq -d -C /etc/dnsmasq.conf
# -d = No ejecutar en segundo plano
# -C = Especificar el archivo de configuración



Hasta aquí todo bien, 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  ;D

Para lograr nuestro cometido debemos configurar 'hostapd':


Código: bash
sudoedit /etc/hostapd/hostapd.conf


Código: bash
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:

Código: bash
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 remplaze 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:


Código: bash
nyx -i 9051


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Muy bueno DtxdF, muy didáctico y perfectamente explicado. Gracias por compartir.


Muchas gracias @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , es un placer.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF


Gracias compañero @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , con gusto vendrán más.
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF


Un placer @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, con gusto vendrán muchísimos más en un futuro no muy lejano :'D

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF