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:
| Capa | Componente | Función |
|---|---|---|
| 1 | Network namespace | Aisla el tráfico de las herramientas del host |
| 2 | NAT / masquerade | Enruta el namespace a traves del host |
| 3 | Tor | Cifra y anonimiza la salida (circuito de 3 nodos) |
| 4 | Proxychains | Encadena proxies adicionales si hace falta |
Componentes
| Elemento | Ruta | Función |
|---|---|---|
| Script de gestion | ~/osint-lab.sh | start / stop / status / verify / newid / circuit / shell |
| Wrapper de herramientas | ~/osint.sh | Ejecuta un binario dentro del namespace |
| Configuración de Tor | /etc/tor/torrc.custom | Puertos, política de SOCKS, exclusión de nodos |
| Proxychains | /etc/proxychains4.conf | Cadena hacia el SOCKS de Tor |
| DNS del namespace | /etc/netns/osint_lab/resolv.conf | Resolució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 0Notas: 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 9050Namespace
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=1Uso
# 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 shellVerificació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/headersComprobaciones 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.comLimitaciones
| Limitación | Consecuencia práctica |
|---|---|
| Tor solo transporta TCP | Nada de UDP: ni nmap -sU, ni DNS directo, ni VoIP |
| Sin SYN scan | Usar -sT; el SYN scan no funciona por un proxy SOCKS |
| Latencia alta | Los barridos grandes son inviables; acotar objetivos |
| Sitios que bloquean Tor | Cloudflare y otros devuelven captcha o 403 |
| Muchos servicios indexan la salida Tor | Algunos resultados quedan sesgados por el nodo de salida |
| Tor no protege la identidad del contenido | No 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.