Laboratorio OSINT con Tor y network namespaces

Montaje de un entorno de investigación cuyo tráfico sale por Tor, aislado del resto del sistema mediante un network namespace. El objetivo no es “ser invisible”, es separar la identidad de investigación de la IP de trabajo y no filtrar DNS ni tráfico del host.

Arquitectura

HOST (IP publica del ISP)
 uso: gestion, SSH, actualizaciones
 |
 |-- veth pair
 |
 NAMESPACE osint_lab (10.10.10.0/24)
 herramientas OSINT -> Tor SOCKS 9050 -> proxychains -> Internet

Cuatro capas, cada una con una función:

CapaComponenteFunción
1Network namespaceAisla el tráfico de las herramientas del host
2NAT / masqueradeEnruta el namespace a traves del host
3TorCifra y anonimiza la salida (circuito de 3 nodos)
4ProxychainsEncadena proxies adicionales si hace falta

Componentes

ElementoRutaFunción
Script de gestion~/osint-lab.shstart / stop / status / verify / newid / circuit / shell
Wrapper de herramientas~/osint.shEjecuta un binario dentro del namespace
Configuración de Tor/etc/tor/torrc.customPuertos, política de SOCKS, exclusión de nodos
Proxychains/etc/proxychains4.confCadena hacia el SOCKS de Tor
DNS del namespace/etc/netns/osint_lab/resolv.confResolución dentro del namespace

Configuración de Tor

SocksPort 0.0.0.0:9050
TransPort 0.0.0.0:9040
DNSPort 0.0.0.0:5353
 
VirtualAddrNetwork 10.10.10.0/10
AutomapHostsOnResolve 1
SocksPolicy accept 10.10.10.0/24
SocksPolicy accept 127.0.0.0/8
SocksPolicy reject *
 
CircuitBuildTimeout 60
LearnCircuitBuildTimeout 0
NumEntryGuards 6
NumDirectoryGuards 3
 
ExcludeExitNodes {es}
StrictNodes 0

Notas: SocksPolicy impide que cualquiera fuera del namespace use el proxy. ExcludeExitNodes {es} evita salir por nodos del mismo pais que la IP real; si se activa StrictNodes 1 y no quedan nodos validos, Tor falla y hay que relajar la exclusión.

Configuración de Proxychains

strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
 
[ProxyList]
socks5 127.0.0.1 9050

Namespace

Red: 10.10.10.0/24
Host (veth): 10.10.10.1
Namespace: 10.10.10.2
DNS: 1.1.1.1, 9.9.9.9

Creación base (lo automatiza el script):

sudo ip netns add osint_lab
sudo ip link add veth_host type veth peer name veth_guest
sudo ip link set veth_guest netns osint_lab
sudo ip addr add 10.10.10.1/24 dev veth_host && sudo ip link set veth_host up
sudo ip netns exec osint_lab ip addr add 10.10.10.2/24 dev veth_guest
sudo ip netns exec osint_lab ip link set veth_guest up
sudo ip netns exec osint_lab ip route add default via 10.10.10.1
sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o <iface> -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1

Uso

# Ciclo de vida
 
sudo ~/osint-lab.sh start
sudo ~/osint-lab.sh status
sudo ~/osint-lab.sh stop
 
# Identidad
 
sudo ~/osint-lab.sh newid # nueva IP de salida
sudo ~/osint-lab.sh circuit # nuevo circuito, misma salida
 
# Shell dentro del namespace
 
sudo ~/osint-lab.sh shell

Verificación del aislamiento

# IP de salida y confirmacion de Tor
 
sudo ip netns exec osint_lab curl -s --socks5-hostname 10.10.10.1:9050 \
 https://check.torproject.org/api/ip
 
# Comparar con la IP del host: deben ser distintas
 
curl -s https://api.ipify.org
 
# Fuga de DNS: debe resolver el DNS del namespace, no el del host
 
sudo ip netns exec osint_lab dig +short example.com
 
# Cabeceras enviadas
 
sudo ip netns exec osint_lab curl -s --socks5-hostname 10.10.10.1:9050 \
 https://httpbin.org/headers

Comprobaciones que hay que hacer en cada arranque, no solo la primera vez: IP distinta, IsTor: true, DNS resuelto dentro del namespace y ausencia de cabeceras del host.

Ejecutar herramientas

# Reconocimiento web
 
~/osint.sh curl -I https://example.com
~/osint.sh whatweb https://example.com
~/osint.sh httpx -l urls.txt
 
# Solo TCP: Tor no transporta UDP
 
~/osint.sh nmap -sT -Pn -sV example.com
~/osint.sh nikto -h https://example.com
 
# DNS y subdominios
 
~/osint.sh dnsrecon -d example.com
~/osint.sh subfinder -d example.com
 
# Personas
 
~/osint.sh sherlock usuario
~/osint.sh holehe correo@example.com
 
# Cadena completa (namespace + Tor + proxychains)
 
~/osint.sh chain curl https://example.com

Limitaciones

LimitaciónConsecuencia práctica
Tor solo transporta TCPNada de UDP: ni nmap -sU, ni DNS directo, ni VoIP
Sin SYN scanUsar -sT; el SYN scan no funciona por un proxy SOCKS
Latencia altaLos barridos grandes son inviables; acotar objetivos
Sitios que bloquean TorCloudflare y otros devuelven captcha o 403
Muchos servicios indexan la salida TorAlgunos resultados quedan sesgados por el nodo de salida
Tor no protege la identidad del contenidoNo subir documentos personales ni iniciar sesión con cuentas reales

Errores típicos

  • Arrancar Tor antes que el namespace: el SOCKS escucha en el host y el namespace no lo alcanza. Orden correcto: namespace, NAT, Tor, verificación.
  • Olvidar proxy_dns: se resuelven nombres desde el host y se filtra la consulta.
  • Rotar identidad en mitad de una sesión autenticada: se pierde la sesión y se genera un evento raro en el destino.
  • Reutilizar el mismo namespace para trabajo real y para investigación: mezcla de identidades.
  • Confiar en la IP de salida sin comprobar IsTor: un fallo de configuración deja el tráfico saliendo en claro.