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

  • 6 Respuestas
  • 1819 Vistas

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

Conectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 999
  • Actividad:
    100%
  • Country: 00
  • Reputación 22
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
You are not allowed to view links. Register or Login, 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 You are not allowed to view links. Register or Login 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 You are not allowed to view links. Register or Login en nuestro dispositivo

Instalación de dependencias:

Código: (bash) You are not allowed to view links. Register or Login
#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 "You are not allowed to view links. Register or Login".

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) You are not allowed to view links. Register or Login
#!/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) You are not allowed to view links. Register or Login
# 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) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
chmod +x ./tor-ap
Ahora pasemos a la configuración de Tor (en /etc/tor/torrc):

Código: (text) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
# 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) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
sudoedit /etc/hostapd/hostapd.conf
Código: (bash) You are not allowed to view links. Register or Login
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
[email protected] # Una contraseña super segura
rsn_pairwise=CCMP # (AES) Counter Mode CBC-MAC Protocol

Lo ejecutamos:

Código: (bash) You are not allowed to view links. Register or Login
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) You are not allowed to view links. Register or Login
nyx -i 9051
~ DtxdF
« Última modificación: Febrero 25, 2021, 01:32:35 pm por DtxdF »
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Desconectado CrazyKade

  • *
  • Underc0der
  • Mensajes: 185
  • Actividad:
    0%
  • Reputación 0
  • Я только знаю что ничего не знаю!
    • Ver Perfil
Muy bueno DtxdF, muy didáctico y perfectamente explicado. Gracias por compartir.

Conectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 999
  • Actividad:
    100%
  • Country: 00
  • Reputación 22
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
Muchas gracias @You are not allowed to view links. Register or Login , es un placer.

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Desconectado ???????

  • *
  • Underc0der
  • Mensajes: 242
  • Actividad:
    0%
  • Country: 00
  • Reputación 12
    • Ver Perfil
Gran aporte amigo   ;D

Saludos!
-Kirari

Conectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 999
  • Actividad:
    100%
  • Country: 00
  • Reputación 22
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
Gracias compañero @You are not allowed to view links. Register or Login , con gusto vendrán más.
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Desconectado xaxxjs

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Country: 00
  • Reputación 0
  • Twitter: @xaxxjs
    • Ver Perfil
    • xaxxjs | scripting and hacking
Fantástico aporte!
Web -> You are not allowed to view links. Register or Login

Conectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 999
  • Actividad:
    100%
  • Country: 00
  • Reputación 22
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
Un placer @You are not allowed to view links. Register or Login, con gusto vendrán muchísimos más en un futuro no muy lejano :'D

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.