ProxyChains es una herramienta de línea de comandos para Linux que fuerza cualquier conexión TCP realizada por un programa a pasar a través de una lista especificada de servidores proxy, formando una 'cadena' para una mayor privacidad o para eludir restricciones de red. Opera interceptando dinámicamente las llamadas al sistema relacionadas con la red, redirigiéndolas a través de uno o más servidores proxy configurados antes de llegar al destino.
Descripción general de ProxyChains
ProxyChains funciona como un envoltorio para otros programas, permitiendo que su tráfico de red sea enrutado a través de una secuencia de proxies. Este mecanismo de encadenamiento puede ofuscar el origen de las solicitudes de red, dificultando el rastreo de la dirección IP de origen real. Se emplea con frecuencia para el anonimato, eludiendo restricciones geográficas o accediendo a redes con controles de acceso basados en IP específicos.
Cómo funciona ProxyChains
ProxyChains utiliza el mecanismo LD_PRELOAD en Linux. LD_PRELOAD es una variable de entorno que especifica una lista de bibliotecas compartidas que se cargarán antes que cualquier otra biblioteca, incluida la biblioteca estándar de C (libc). ProxyChains proporciona su propia biblioteca compartida (libproxychains4.so) que contiene versiones modificadas de funciones de red estándar (por ejemplo, connect(), send(), recv()).
Cuando un programa se ejecuta con ProxyChains (por ejemplo, proxychains4 <comando>), libproxychains4.so se precarga. Esta biblioteca intercepta las llamadas del programa a las funciones de red. En lugar de realizar conexiones directas, estas llamadas interceptadas se redirigen a través de la cadena de proxy configurada. Este proceso es transparente para la aplicación envuelta, que continúa operando como si estuviera realizando conexiones de red directas.
Instalación
Los procedimientos de instalación varían ligeramente según la distribución de Linux.
Debian/Ubuntu
sudo apt update
sudo apt install proxychains4
Fedora/CentOS/RHEL
sudo dnf install proxychains-ng
# O para sistemas más antiguos:
sudo yum install proxychains-ng
Arch Linux
sudo pacman -S proxychains-ng
Desde el código fuente
Para otras distribuciones o versiones específicas, ProxyChains se puede compilar desde el código fuente.
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install
sudo make install-config # Instala el archivo de configuración predeterminado en /etc/proxychains.conf
Configuración
El archivo de configuración principal para ProxyChains se encuentra típicamente en /etc/proxychains.conf o ~/.proxychains/proxychains.conf. Si ninguno existe, proxychains.conf se puede copiar del directorio fuente o de /usr/share/proxychains/proxychains.conf a /etc/proxychains.conf.
Directivas clave
El archivo de configuración define cómo se utilizan los proxies y qué proxies están disponibles.
strict_chain: Todos los proxies de la lista se utilizan en el orden en que aparecen. Si algún proxy de la cadena falla, la conexión falla.dynamic_chain: Todos los proxies de la lista se utilizan, pero si uno falla, se omite y la cadena continúa con el siguiente proxy. Esto ofrece más resiliencia.random_chain: Un número especificado de proxies (chain_len) se selecciona aleatoriamente de la lista y se utiliza en un orden aleatorio.chain_len: (Se usa conrandom_chain) Especifica el número de proxies a seleccionar aleatoriamente.proxy_dns: Fuerza que las solicitudes DNS se resuelvan a través de la cadena de proxy, mitigando las fugas de DNS. Esto es crítico para el anonimato.remote_dns_subnet: (Se usa conproxy_dns) Especifica una subred IP para usar en consultas DNS remotas siproxy_dnsestá habilitado. El valor predeterminado es10.0.0.0/8.
Formato de la lista de proxies
Los proxies se definen al final del archivo proxychains.conf bajo la sección [ProxyList]. Cada entrada de proxy sigue este formato:
tipo dirección_ip puerto [nombre_de_usuario] [contraseña]
Los tipos admitidos incluyen socks4, socks5 y http.
Fragmento de ejemplo de proxychains.conf
# Archivo de configuración de ProxyChains
# Descomente uno de los tipos de cadena de proxy:
# strict_chain
# dynamic_chain
random_chain
# Aleatorizar la lista de proxies - no, esto no tiene sentido.
# Mantenga el orden predeterminado de los proxies en la lista de proxies y úselos en ese orden.
# Si desea aleatorizar, use 'random_chain' arriba.
# random_chain_len 2
# Hacer un host desde donde comienza la cadena.
# Esto puede ser útil para algunas aplicaciones.
# chain_len 2
# Enviar solicitudes DNS a través de la cadena.
# Esto es altamente recomendado para el anonimato.
proxy_dns
# Subred DNS remota
# Cuando proxy_dns está habilitado, esta subred se utiliza para consultas DNS remotas.
# El valor predeterminado es 10.0.0.0/8
# remote_dns_subnet 10.0.0.0/8
# Tiempo de espera para conexiones proxy.
# proxy_timeout 10000
# Lista de proxies - añada sus proxies aquí
# Formato: tipo dirección_ip puerto [nombre_de_usuario] [contraseña]
[ProxyList]
# socks4 127.0.0.1 9050 # Ejemplo para Tor (puerto SOCKS predeterminado)
# socks5 192.168.1.1 1080
# http proxy.example.com 8080 user pass
# Ejemplo usando múltiples proxies para una cadena
socks5 192.168.1.10 1080
socks5 192.168.1.11 1080
http 192.168.1.12 8080
Tipos de proxy compatibles
ProxyChains admite los siguientes protocolos proxy:
- SOCKS4: Protocolo proxy simple para aplicaciones TCP. No admite UDP ni autenticación.
- SOCKS5: Protocolo proxy avanzado que admite TCP, UDP y autenticación. Recomendado para la mayoría de los casos de uso.
- HTTP: Admite proxies HTTP para tunelizar conexiones TCP. Se puede usar con o sin autenticación.
Ejemplos de uso
Para usar ProxyChains, anteponga proxychains4 (o proxychains en algunos sistemas) al comando que desea ejecutar a través de los proxies.
Uso básico
Verifique su dirección IP externa a través de la cadena de proxy:
proxychains4 curl ifconfig.me
Este comando enrutará la solicitud curl a través de la cadena de proxy configurada, e ifconfig.me informará la dirección IP del último proxy en la cadena, o del primer proxy que funcione si dynamic_chain está habilitado.
Prueba de fugas de DNS
Con proxy_dns habilitado en proxychains.conf:
proxychains4 curl https://ipleak.net/
Revise la sección DNS en ipleak.net para confirmar que las solicitudes DNS se resuelven a través de la cadena de proxy y no de su servidor DNS local.
Uso con escáneres de red
Escanear un objetivo a través de una cadena de proxy puede ocultar el origen del escaneo.
proxychains4 nmap -sT -Pn target.example.com
Nota: Los modos -sS (escaneo SYN) de nmap y otros modos de paquetes sin procesar no funcionan con ProxyChains porque LD_PRELOAD solo intercepta llamadas de socket de nivel superior, no la generación de paquetes sin procesar. Use -sT (escaneo de conexión TCP).
Uso con Secure Shell (SSH)
Para establecer una conexión SSH a través de una cadena de proxy:
proxychains4 ssh user@remote_host.com
Uso con Wget
Descargar archivos a través de una cadena de proxy:
proxychains4 wget https://example.com/file.zip
Uso con un navegador web (por ejemplo, Firefox)
ProxyChains está diseñado para aplicaciones de línea de comandos. Para aplicaciones gráficas como navegadores web, generalmente es más efectivo configurar directamente los ajustes de proxy del navegador o usar una extensión de administrador de proxy dedicada. Sin embargo, se puede forzar:
proxychains4 firefox
Este método suele ser menos estable y fiable para aplicaciones GUI complejas en comparación con la configuración de proxy nativa.
Comparación de tipos de cadena
| Característica | strict_chain |
dynamic_chain |
random_chain |
|---|---|---|---|
| Uso de proxy | Todos los proxies de la lista, en orden. | Todos los proxies de la lista, en orden, omitiendo los fallidos. | chain_len proxies seleccionados y ordenados aleatoriamente. |
| Tolerancia a fallos | Baja (la conexión falla si algún proxy falla). | Alta (omite los proxies fallidos). | Moderada (falla si los proxies aleatorios seleccionados fallan). |
| Anonimato | Alto (ruta fija, todos los proxies utilizados). | Alto (ruta fija, todos los proxies que funcionan utilizados). | Variable (ruta aleatoria, diferente cada vez). |
| Rendimiento | Potencialmente más lento debido a la ruta fija y completa. | Más rápido si algunos proxies son lentos/caídos. | Variable, depende de los proxies seleccionados. |
| Caso de uso | Cuando todos los proxies son fiables y el orden importa. | Cuando la resiliencia es importante. | Cuando se desea variar la ruta para el anonimato. |
Consideraciones de seguridad y limitaciones
ProxyChains es una herramienta para enrutar el tráfico, no una solución completa de anonimato. Los usuarios deben comprender sus limitaciones.
Fugas de DNS
Sin proxy_dns habilitado, las solicitudes DNS pueden ser resueltas directamente por el sistema local, exponiendo la dirección IP real del usuario al servidor DNS. Habilitar proxy_dns es crucial para el anonimato.
Fugas de tráfico
ProxyChains intercepta principalmente conexiones TCP. Las aplicaciones que usan UDP u otros protocolos directamente (por ejemplo, algunos clientes VPN, aplicaciones VoIP, ciertos juegos o los modos de paquetes sin procesar de nmap) pueden eludir la cadena de proxy, lo que lleva a fugas de tráfico. No es adecuado para aplicaciones que requieren una anonimización completa de la pila de red.
Sobrecarga de rendimiento
Encadenar múltiples proxies introduce latencia y reduce el rendimiento. Cada salto en la cadena añade tiempo de procesamiento y retardo de red. Cuantos más proxies haya en la cadena, más lenta será la conexión.
No es una solución mágica para el anonimato
ProxyChains proporciona una capa adicional de ofuscación, pero no garantiza el anonimato absoluto. Los adversarios sofisticados aún pueden correlacionar patrones de tráfico o explotar otras vulnerabilidades (por ejemplo, huellas digitales del navegador, fugas de WebRTC) para desanonimizar a un usuario. Debe usarse junto con otras prácticas de seguridad, como un sistema operativo seguro, reglas de firewall robustas y una selección cuidadosa de aplicaciones.
Compatibilidad de aplicaciones
ProxyChains se basa en LD_PRELOAD para interceptar llamadas a bibliotecas. No todas las aplicaciones se comportan de forma predecible cuando se interceptan sus funciones de red. Las aplicaciones que utilizan bibliotecas de red personalizadas, vinculación estática o interfaces de kernel específicas pueden no funcionar correctamente o en absoluto con ProxyChains.