Cuando visitas un sitio web como www.google.com, tu navegador envía una solicitud de conexión desde tu computadora al servidor web. El servidor procesa tu solicitud y te devuelve la página web que solicitaste visitar.
Esta es una descripción bastante simplificada de lo que sucede cuando visitas un sitio web, pero el punto es que estas conexiones directas exponen tu privacidad ya que el servidor web puede ver tu dirección IP / ubicación y sabe que te conectaste desde allí.
Con proxychains, puedes enrutar intentos de conexión a un servidor a través de varios proxies que ocultarán tu IP del servidor de destino en sí. El servidor solo verá que el servidor proxy intentó conectarse, no tú.
¿Qué es Proxychains?
Proxychains permite que aplicaciones enlazadas dinámicamente enruten de forma transparente su tráfico de red TCP a través de una cadena de servidores proxy para que el destino vea la solicitud como proveniente del servidor proxy en lugar de tu dirección IP real.
Una vez que comprendas conceptos simples como cómo funciona proxychains, tipos de proxy, modos de cadena y configuración, no deberías tener problemas con la herramienta. Debería tener sentido por qué no funciona de manera directa en algunas aplicaciones y cómo solucionar problemas.
Repositorio Oficial: https://github.com/rofl0r/proxychains-ng
Cómo Funciona Proxychains
Proxychains opera como una libreria compartida precargada que intercepta llamadas del sistema relacionadas con la red en programas enlazados dinámicamente, habilitando redirección de proxy transparente en la capa de aplicación.
- Libreria Compartida Precargada: Libreria que contiene código reutilizable que se inyecta en el espacio de memoria de otro programa antes de que se carguen otras librerias, permitiéndole anular funciones estándar.
- Programa Enlazado Dinámicamente: Programas (la mayoría en realidad), que usan librerias compartidas externas (como archivos
.so) para realizar funciones comunes en lugar de empaquetar todo el código en el binario mismo.
En palabras más simples, proxychains intercepta funciones de red de aplicaciones para inyectar su lógica de enrutamiento de proxy, todo sin que la aplicación lo sepa.
Inyección de Libreria e Intercepción de Funciones
Cuando se ejecuta una aplicación, proxychains inyecta la libreria libproxychains.so en el espacio de memoria del proceso de la aplicación antes de que se carguen las librerias del sistema estándar.
Esto permite que proxychains intercepte y reemplace funciones de red de libc para agregar lógica de redirección de proxy antes de establecer conexiones TCP.
Ejemplo de funciones de libc interceptadas:
connect(): Captura intentos de conexión TCP salientes y los redirige a través de la cadena de proxy.getaddrinfo(): Maneja solicitudes de resolución DNS a través de la API estándar POSIX.close()/close_range(): Garantiza la limpieza adecuada de sockets y recursos.
Flujo de Redirección de Tráfico
Una vez que se intercepta un intento de conexión, proxychains redirige transparentemente el tráfico a través de la secuencia de proxy configurada (desde proxychains.conf).
La aplicación es completamente ajena a la redirección de proxychains y continúa operando como de costumbre. No se necesita ningún cambio en la aplicación.
Proxy de DNS y Prevención de Fugas
Cuando proxy_dns está habilitado en proxychains.conf, proxychains previene fugas de DNS manejando la resolución de nombres de host a través de la cadena de proxy en lugar de tu resolvedor DNS local. Esto previene fugas de DNS que podrían exponer tu actividad de navegación a tu ISP (proveedor de servicios de Internet) o red local.
¿Qué es una fuga de DNS? Cuando visitas un sitio web, tu computadora necesita traducir el nombre de dominio (como
www.google.com) en una dirección IP a través de resolución DNS. Incluso si todo tu tráfico está pasando a través de proxies, esas consultas DNS podrían seguir siendo enviadas directamente al servidor DNS de tu ISP (revelando qué sitios estás intentando visitar). El proxy de DNS soluciona esto enrutando esas consultas a través de tu cadena de proxy también.
Soporte de Protocolos
Proxychains funciona con tráfico basado en TCP y soporta varios tipos de proxy comunes:
- Conexiones TCP: Soporte completo para todo el tráfico de red basado en TCP.
- Tipos de Proxy:
SOCKS4,SOCKS4a,SOCKS5(con o sin autenticación), y proxiesHTTP/HTTPS.
Tipos de Proxy
SOCKS4
- El protocolo SOCKS básico que proporciona proxy TCP básico.
- Solo soporta direcciones IPv4 y no maneja resolución DNS (necesita resolver nombres de host a direcciones IP antes de conectarse).
- Ampliamente soportado pero limitado en comparación con versiones más nuevas. No recomendado.
SOCKS4a
- Una extensión de SOCKS4 que agrega soporte de resolución de nombres de host.
- En lugar de requerir que resuelvas nombres de dominio tú mismo, permite que el servidor proxy maneje búsquedas DNS. Esto es útil para acceder a recursos por nombre de host en lugar de dirección IP.
SOCKS5 (Recomendado)
- La opción recomendada debido a su flexibilidad y características.
- Soporta tanto IPv4 como IPv6, incluye autenticación integrada y puede manejar varios tipos de tráfico.
- Ten en cuenta que algunas implementaciones de SOCKS5 soportan tráfico UDP pero proxychains no soporta UDP.
HTTP/HTTPS
- Los proxies HTTP fueron diseñados originalmente para tráfico web pero pueden manejar otras conexiones TCP a través del método HTTP CONNECT.
- La conexión al proxy está cifrada, pero una vez que se establece el túnel de conexión, el proxy ve tu tráfico en la forma que lo envíes. Si estás accediendo a sitios HTTP, ese tráfico sigue sin cifrar dentro del túnel.
Limitaciones de Protocolo
Proxychains intercepta funciones de conexión TCP solo en programas enlazados dinámicamente. Los protocolos que no usan estas no pueden ser interceptados.
- Tráfico UDP: Generalmente no soportado porque UDP no tiene conexión y evita las llamadas
connect()que proxychains intercepta. - Paquetes ICMP: Herramientas como
pingytracerouteno pueden ser enrutadas por proxy ya que usan ICMP. - Sockets Raw: Las aplicaciones que usan operaciones de socket raw se comunican directamente con el kernel, evitando las funciones
libcque proxychains intercepta.
Modos de Cadena
Estos son los tipos de cadenas / enrutamiento que serán usados por proxychains.
Modo de Cadena Dinámica (Recomendado)
Enruta el tráfico a través de todos los proxies listados en secuencia. Omite automáticamente los proxies que no responden.
- Requiere al menos 1 proxy en línea.
- Continúa la operación automáticamente incluso cuando algunos proxies son inalcanzables.
- Esta es la cadena recomendada. Comúnmente usada cuando la disponibilidad del proxy es inconsistente y el tiempo de actividad es crítico.
Modo de Cadena Estricta
Enruta el tráfico a través de todos los proxies listados en el orden exacto especificado, de lo contrario falla.
- Todos los proxies deben estar en línea.
- Toda la conexión falla si algún proxy individual en la cadena es inalcanzable.
- Esta cadena asegura una ruta de red consistente y predecible para todas las conexiones.
Modo de Cadena Round-Robin
Distribuye el tráfico secuencialmente a través de todos los proxies en rotación round-robin.
- Requiere al menos 1 proxy en línea.
- Cada nueva conexión usa el siguiente proxy en la secuencia y vuelve al primer proxy después de alcanzar el final de la cadena.
- Esta cadena proporciona distribución de carga a través de los proxies, previniendo que un proxy individual sea sobrecargado o que tu conexión sea limitada por tasa.
Modo de Cadena Aleatoria
Enruta el tráfico a través de un proxy seleccionado aleatoriamente de la lista configurada.
- Requiere al menos 1 proxy en línea.
- Controla cuántos proxies de la lista se usan por conexión con el parámetro de configuración
chain_len. - Esta cadena mejora el anonimato debido a la selección aleatoria de proxy pero puede tener rendimiento variable debido a diferentes ubicaciones y velocidades de servidor proxy.
Archivo de Configuración
Proxychains busca su archivo de configuración en este orden:
- Variable de entorno
$PROXYCHAINS_CONF_FILE- Variable de entorno para una ruta de archivo de configuración personalizada.
- Tiene la prioridad más alta cuando está establecida.
- Opción de línea de comandos
-f <config_file_path>- Opción de comando para ejecución binaria de
proxychains. - Especifica el archivo de configuración directamente al ejecutar
proxychains.
- Opción de comando para ejecución binaria de
- ~/.proxychains/proxychains.conf o ~/.proxychains/proxychains4.conf
- Ruta de archivo de configuración específica del usuario.
- El nombre del archivo depende de la distro de Linux.
- Anula la configuración del sistema.
- /etc/proxychains.conf o /etc/proxychains4.conf
- Ruta de archivo de configuración del sistema.
- El nombre del archivo depende de la distro de Linux.
- Se usa cuando no existe configuración específica del usuario.
Listas de Proxy
Servicios de Proxy Gratuitos
Al igual que con las VPN, no recomiendo proxies públicos gratuitos ya que a menudo tienen riesgos de seguridad/privacidad y problemas de confiabilidad. En su lugar, puedes auto-hospedar tu propia infraestructura de proxy (publicación futura) o usar una paga.
- ProxyScrape: https://proxyscrape.com/free-proxy-list
- Proxifly (GitHub): https://github.com/proxifly/free-proxy-list
- ProxyDB: https://proxydb.net/
- GeoNode: https://geonode.com/free-proxy-list
Servicios de Proxy Pagos
- Oxylabs: https://oxylabs.io/
- Bright Data: https://brightdata.com/
- IPBurger: https://www.ipburger.com/
- Decodo: https://decodo.com/
Nota: Estos son servicios de proxy comunes, pero investiga por tu cuenta antes de elegir uno.
Información Útil de Saber
Ventajas y Limitaciones
Ventajas
- Transparencia de Aplicación: Las aplicaciones funcionan sin ningún cambio de configuración (son ajenas al proxy).
- Flexibilidad de Protocolo: Puedes mezclar proxies SOCKS4/5 y HTTP en la misma cadena.
- Encadenamiento de Múltiples Proxies: Enruta el tráfico a través de múltiples proxies para mejor anonimato.
- Privacidad DNS: Enruta consultas DNS a través de proxies para prevenir fugas.
Limitaciones
- Restricciones de Protocolo: Solo TCP (soporte limitado de UDP).
- Solo Enlace Dinámico: No funciona con binarios compilados estáticamente.
- Problemas de Compatibilidad:
- Los binarios estáticos evitan el mecanismo de intercepción.
- Las aplicaciones que usan
dlopen()o sockets raw pueden no funcionar. - Las llamadas directas al sistema no pueden ser interceptadas.
- AppArmor/SELinux puede bloquear la funcionalidad.
- Impacto en el Rendimiento:
- Latencia agregada por salto de proxy.
- Ancho de banda limitado por el proxy más lento.
Casos de Uso
Pruebas de Seguridad
- Anonimizar herramientas de pruebas de penetración y escaneos de vulnerabilidades.
- Pivotar a través de sistemas comprometidos para acceder a redes aisladas.
- Realizar recopilación OSINT y pruebas de aplicaciones web desde diferentes ubicaciones geográficas.
Privacidad y Operaciones
- Eludir restricciones geográficas y censura.
- Acceder a recursos corporativos a través de túneles proxy.
- Mantener seguridad operacional durante investigación sensible.
Desarrollo y Pruebas
- Probar APIs a través de diferentes rutas de red.
- Simular bases de usuarios distribuidas a través de regiones.
- Validar comportamiento de aplicaciones bajo varias condiciones de red.
Recopilación de Datos
- Eludir limitación de tasa basada en IP rotando a través de múltiples endpoints de proxy.
- Recopilar inteligencia competitiva de forma anónima.
- Evitar discriminación de precios específica de región.
Integración con Tor
Proxychains y Tor son mencionados frecuentemente juntos, pero son herramientas diferentes para propósitos diferentes. Proxychains es una herramienta que enruta el tráfico de tu aplicación a través de servidores proxy, mientras que Tor es una red de anonimato dedicada con protecciones criptográficas integradas.
Si quieres acceder a la red Tor de forma anónima, simplemente usa Tor Browser o torsocks. Estas herramientas están diseñadas para navegación anónima a través de la red Tor. Y usa proxychains cuando necesites enrutar tráfico TCP de aplicaciones regulares a través de servidores proxy (no en la red Tor).
Qué NO Hacer:
- No Uses Tor Browser con Proxychains: Tor Browser ya enruta el tráfico a través de Tor, agregar proxychains es redundante y podría crear riesgos de seguridad potenciales.
- No Encadenes Tor con Proxies Adicionales: A diferencia de la creencia popular, agregar proxies antes o después de Tor típicamente reduce el anonimato en lugar de mejorarlo.
- No Ejecutes como Root: Ejecutar aplicaciones GUI como root generalmente crea riesgos de seguridad.
Uso Correcto de Proxychains con Tor: Si necesitas enrutar herramientas de línea de comandos a través de Tor (no para anonimato, sino para funcionalidad), configura proxychains para usar el proxy SOCKS local de Tor:
# Agrega el proxy de Tor a proxychains.conf
socks5 127.0.0.1 9050
# Inicia el servicio Tor primero
sudo systemctl start tor
# Usa proxychains con aplicaciones
proxychains curl https://check.torproject.org
proxychains firefox # Para navegación general, NO PARA NAVEGACIÓN TOR
Habrá otra publicación dedicada a Tor, pero toma en consideración algunos pros y contras de usar la red Tor con proxychains.
- Cuando usas Tor, tu tráfico entra a través de un nodo de entrada y eventualmente sale a través de un nodo de salida que podría ser ejecutado por cualquiera (personas regulares o actores maliciosos). Sí, eres verdaderamente anónimo (el operador del nodo no tiene forma de ver tu dirección IP real), pero pueden ver cualquier tráfico sin cifrar que pase a través de su nodo.
- Si usas un servicio de proxy pago, conoces quién es el propietario del proxy y su política de privacidad, lo cual crea cierta tranquilidad para algunos usuarios, pero el propietario puede ver tu IP real y que estás usando Tor.
- La elección depende de ti, si necesitas anonimato del servidor de destino y no quieres que nadie correlacione tu identidad real con tu tráfico, Tor es el camino a seguir. Si prefieres trabajar con infraestructura responsable donde sabes quién está ejecutando los servidores, un servicio de proxy pago reputado tiene más sentido.
- Mi recomendación es usar una VPN de conocimiento cero (como Proton o Mullvad) junto con Tor, lo cual oculta tu uso de Tor de tu ISP y previene que los guardias de entrada de Tor vean tu dirección IP real.
Técnicas Apropiadas de Anonimato
- Usa Tor para Anonimato, No Proxychains:
- Tor proporciona anonimato criptográfico.
- Proxychains es para pivotar y eludir restricciones, no anonimato.
- No recomiendo encadenar Tor con proxies adicionales, derrota el propósito.
- Combinaciones VPN/Proxy:
- Correcto: VPN -> Tor (VPN luego Tor browser o
torsocks). - Incorrecto: VPN -> Proxychains -> Tor (reduce el anonimato).
- Correcto: VPN -> Tor (VPN luego Tor browser o
- Usa Infraestructura Confiable:
- Despliega tus propios servidores proxy en proveedores de nube confiables.
- Usa servicios de proxy comerciales reputados (no gratuitos).
- Audita y monitorea tu infraestructura de proxy regularmente (verifica fugas).
OpSec
Hacer:
- Verifica si tienes alguna fuga de DNS.
- Usa cifrado de extremo a extremo y HTTPS tanto como sea posible.
- Rota los proxies regularmente.
- Usa aislamiento específico de aplicación (perfiles de navegador separados, VMs).
No Hacer:
- No reutilices la misma cadena a largo plazo.
- No mezcles tráfico personal y de operaciones/investigación.
- No asumas que proxychains proporciona cifrado (no lo hace).
- No ejecutes aplicaciones GUI como root con proxychains.
Trabajando con Proxychains
Instalar Proxychains
Hay 2 versiones de proxychains: el legado proxychains que no tiene mantenimiento, y el moderno proxychains-ng (usa este). El nombre difiere entre distros de Linux, lo cual puede ser confuso.
- Distros basadas en RHEL (Fedora, CentOS, etc.): Solo
proxychains-ngestá disponible. Instala con el nombre de paqueteproxychains-ng, ejecuta con el comandoproxychains, y configura vía proxychains.conf. - Distros basadas en Debian (Ubuntu, Debian, etc.): Ambas versiones están disponibles. El moderno
proxychains-ngestá empaquetado comoproxychains4para evitar conflictos con la versión legada. Ejecuta con el comandoproxychains4y configura vía proxychains4.conf. - Recomendación: Siempre usa
proxychains-ng. En sistemas Debian, asegúrate de estar ejecutandoproxychains4(noproxychains- verifica que estás ejecutando la versión 4.x, no 3.x).
# RHEL/Fedora
dnf install proxychains-ng
# Debian/Ubuntu
apt install proxychains4
Configurar Proxychains
Edita /etc/proxychains.conf o ~/.proxychains/proxychains.conf.
vim ~/.proxychains/proxychains.conf
# Archivo de Configuración de Proxychains de Ejemplo
# ============================================
# Selección de Modo de Cadena (elige UNO)
# ============================================
dynamic_chain # Recomendado: omite proxies muertos
# strict_chain # Todos los proxies deben estar en línea
# round_robin_chain # Rotar a través de proxies en round-robin
# random_chain # Selección aleatoria de proxy
# ============================================
# Configuración de Cadena Aleatoria
# ============================================
# Solo aplica cuando random_chain está habilitado
chain_len = 2 # Número de proxies por cadena
# ============================================
# Configuración DNS
# ============================================
# Prevenir fugas de DNS enrutando DNS a través de proxy
proxy_dns
# Subred DNS remota para respuestas locales falsas
# Usada internamente para identificar solicitudes DNS
remote_dns_subnet 224
# ============================================
# Tiempos de Espera de Conexión (milisegundos)
# ============================================
tcp_read_time_out 15000 # Tiempo de espera de lectura: 15 segundos
tcp_connect_time_out 8000 # Tiempo de espera de conexión: 8 segundos
# ============================================
# Control de Salida
# ============================================
# Suprimir salida de depuración de proxychains
quiet_mode
# ============================================
# Exclusiones de Red Local
# ============================================
# Omitir proxy para redes locales/privadas
localnet 127.0.0.0/255.0.0.0 # Localhost
localnet 10.0.0.0/255.0.0.0 # Clase A Privada
localnet 172.16.0.0/255.240.0.0 # Clase B Privada
localnet 192.168.0.0/255.255.0.0 # Clase C Privada
# ============================================
# Lista de Proxy
# ============================================
# En esta sección es donde listas los servidores proxy a usar
[ProxyList]
# Formato: [nombre_usuario] [contraseña]
# Proxies SOCKS (sin autenticación)
socks4 192.168.1.100 1080
socks5 192.168.1.101 1080
# SOCKS5 con autenticación
socks5 proxy.example.com 1080 username password
# Proxy SOCKS de Tor (predeterminado)
socks5 127.0.0.1 9050
# Proxies HTTP
http 192.168.1.102 8080
http proxy.example.com 8080 username password
# Proxy HTTPS
http proxy.example.com 3128 user pass123
Usando Proxychains
- Ejecuta
proxychainsjunto con otro programa/aplicación para rotar a través de proxies. -f <config_file_path>: Especifica un archivo proxychains.conf personalizado a usar.-q:Habilita modo silencioso (suprime salida de proxychain).
# Sintaxis
proxychains [opciones] [opciones_programa]
# Ejemplos
# Ejecución de comando simple
proxychains nslookup example.com
# Lanzar Firefox
proxychains firefox
# Escaneo de red (requiere flags específicos)
proxychains nmap -sT -Pn -n target.com
# Conexión SSH
proxychains ssh user@remote-host
Probar Anonimato de Proxy
# Verificar nivel de anonimato con verificador de proxy
curl -x socks5://proxy.example.com:1080 https://ip-api.com/json/
# Verificar que no hay fugas de IP
proxychains curl https://ipleak.net/json/