ProxyChains-NG ver 4.17 README
ProxyChains es un programa UNIX que engancha las funciones libc relacionadas con la red
en programas ENLAZADOS DINÁMICAMENTE mediante una DLL precargada (dlsym(), LD_PRELOAD)
y redirige las conexiones a través de proxies SOCKS4a/5 o HTTP.
Solo soporta TCP (no UDP/ICMP, etc.).
La forma en que funciona es básicamente un HACK; por lo tanto, es posible que no funcione
con tu programa, especialmente si es un script, o inicia
numerosos procesos como demonios en segundo plano o usa dlopen() para cargar
"módulos" (bug en el enlazador dinámico de glibc).
Debería funcionar con programas compilados (C/C++) enlazados dinámicamente simples
aunque.
Si tu programa no funciona con proxychains, considera usar una
solución basada en iptables; es mucho más robusta.
Plataformas compatibles: Linux, BSD, Mac, Haiku.
*********** ATENCIÓN ***********
este programa puede usarse para evadir la censura.
hacerlo puede ser MUY PELIGROSO en ciertos países.
ASEGÚRATE SIEMPRE DE QUE PROXYCHAINS FUNCIONA COMO SE ESPERA
ANTES DE USARLO PARA ALGO SERIO.
esto implica tanto el programa como el proxy que vayas a
usar.
por ejemplo, puedes conectarte a algún servicio de "cuál es mi ip"
como ifconfig.me para asegurarte de que no está usando tu ip real.
USA PROXYCHAINS SOLO SI SABES LO QUE ESTÁS HACIENDO.
LOS AUTORES Y MANTENEDORES DE PROXYCHAINS NO ASUMIEN NINGUNA
RESPONSABILIDAD POR EL ABUSO O MAL USO DE ESTE SOFTWARE Y
LAS CONSECUENCIAS RESULTANTES.
*** Instalación ***
necesita un compilador de C funcional, preferiblemente gcc
./configure --prefix=/usr --sysconfdir=/etc
make
[optional] sudo make install
[optional] sudo make install-config (instala proxychains.conf)
si no instalas, puedes usar proxychains desde el directorio de compilación
así: ./proxychains4 -f src/proxychains.conf telnet google.com 80
Registro de cambios:
Versión 4.17
- añade hook para la función close_range, corrigiendo versiones recientes de openssh
- opción fat-binary-m1 para Mac
- corrige el manejo de errores DNS en proxy_dns_old
- simplifica el código de inicialización
- corrige la precarga en OpenBSD
- corrige doble cierre en aplicaciones multihilo
- varias mejoras al script configure
Versión 4.16
- corrige regresión en la detección de flags del enlazador en el script configure
- elimina workaround de 10 años para la firma incorrecta de getnameinfo en glibc
- soporte para el nuevo método de hooking DYLD para OSX Monterey
- corrección de compilación en NetBSD
- soporte para redes locales IPv6
- mensaje de error más amigable cuando falla execvp
- proxy_getaddrinfo(): rellena ai_socktype si se solicita
Versión 4.15
- corrige el script configure para una versión de binutils con errores
- inicializa rand_seed con granularidad de nanosegundos
- añade soporte para ipv6 numérico en getaddrinfo
- corrige bug en getaddrinfo cuando node es null y !passive
- añade la función dnat
- añade el tipo de proxy raw
- añade soporte para Haiku
- añade proxy_dns_old para emular el comportamiento de proxychains 3.1
- añade la nueva función proxy_dns_daemon (experimental)
- varias otras correcciones
Versión 4.14
- permite sintaxis alternativa proto://user:pass@ip:port para la proxylist
- corrige bucle infinito en modo round robin cuando todos los proxies están caídos (#147)
- corrige compilación en Android (#265)
- corrige fuga de descriptores de archivo (fd) en procesos forkeados (#273)
- omite el intento de conexión a ips con ruta nula (nullrouted)
- permite nombres de host para la proxylist bajo circunstancias específicas
Versión 4.13
- corrige la robustez del hilo de resolución DNS y un segfault
- corrige autenticación user/pass de socks5 en servidores no conformes
- corrige fuga de memoria
- añade soporte para Solaris
Versión 4.12
- corrige varios problemas de compilación
- para MAC
- con -pie
- con CC personalizado
- corrección de compatibilidad para algunas aplicaciones GUI (8870140)
- corrección de compatibilidad para algunos proxies HTTP (cf9a16d)
- corrige varias advertencias para una compilación más limpia en Debian
- corrige random_chain en OSX (0f6b226)
Versión 4.11
- soporte preliminar de IPv6
- corrige bug en hostsreader
- soporte preliminar para uso en OpenBSD (caveat emptor)
Versión 4.10
- corrige regresión en el orden de enlazado con LDFLAGS personalizados
- corrige segfault en el código de mapeo DNS en programas con > ~400 resoluciones diferentes
Versión 4.9
- corrige un problema de seguridad CVE-2015-3887
- añade hook de sendto para manejar el flag MSG_FASTOPEN
- reemplaza el problemático hostentdb con hostsreader
- corrige compilación en OpenBSD (aunque no funciona allí)
Versión 4.8.1:
- corrige regresión en el objetivo install-config del Makefile en 4.8
Versión 4.8:
- corrección para un caso extremo donde getaddrinfo se usaba con AI_NUMERICHOST
para probar una ip numérica en lugar de resolverla (corrige nmap).
- permite el uso con programas que dependen de LD_PRELOAD ellos mismos
- rechaza entradas incorrectas en el archivo de configuración
- imprime el número de versión al inicio
Versión 4.7:
- nuevo tipo de cadena round_robin por crass.
- corrige bug con asignación perezosa (lazy allocation) cuando no se usaba el constructor de GCC.
- nuevo flag de configure --fat-binary para crear un binario/librería "fat" en OS X
- devuelve EBADF en lugar de EINTR en el hook de close.
es legal que un programa reintente llamadas a close() cuando recibe
EINTR, lo que podría causar un bucle infinito, como se vio en chromium.
Versión 4.6:
- algunas correcciones cosméticas al Makefile, corrige un bug cuando se usaba una ip no numérica
como dirección del servidor proxy.
Versión 4.5:
- hook de close() para evitar que OpenSSH interfiera con la infraestructura interna.
esto causaba que el cliente ssh sufriera segfault al ser proxificado.
Versión 4.4:
- puerto FreeBSD
- corrige algunos problemas de instalación en Debian y Mac.
Versión 4.3:
- corrige programas que hacen resoluciones DNS en procesos hijos (fork()ed),
como irssi. para lograrlo, se sacrificó el soporte para compilación sin pthreads.
- corrige la seguridad de hilos para llamadas a gethostent().
- mejora la velocidad de manejo de DNS, ya que la base de datos hostent está en caché.
Versión 4.2:
- corrige problemas de compilación con el toolchain de ubuntu 12.04
- corrige segfault en una ruta de código poco común
Versión 4.1
- soporte para mac os x (todas las arquitecturas)
- todas las funciones internas son thread-safe cuando se compila con -DTHREAD_SAFE
(por defecto).
Versión 4.0
- reemplazó el script dnsresolver (que requería un binario "dig" enlazado dinámicamente)
con resolución DNS remota.
esto acelera cualquier operación que involucre DNS, ya que el script antiguo tenía que usar TCP.
además permite usar urls .onion cuando se usa con TOR.
- eliminó el sistema de compilación autoconf roto con un Makefile simple.
sin embargo, hay un script ./configure por conveniencia.
también añade soporte para un archivo de configuración pasado mediante opciones de línea de comandos/
variables de entorno.
Versión 3.0
- soporte para resolución DNS a través de proxy
compatible con servidores proxy SOCKS4, SOCKS5 y HTTP CONNECT.
Tipos de autenticación: socks - "user/pass", http - "basic".
¿Cuándo usarlo?
- Cuando la única forma de salir "al exterior" desde tu LAN es a través de un servidor proxy.
- Para salir desde detrás de un cortafuegos restrictivo que filtra puertos salientes.
- Para usar dos (o más) proxies en cadena:
como: your_host <--> proxy1 <--> proxy2 <--> target_host
- Para "proxificar" algún programa sin soporte de proxy integrado (como telnet)
- Acceder a la intranet desde fuera mediante proxy.
- Usar DNS detrás de un proxy.
- Acceder a servicios ocultos tor onion.
Algunas características interesantes:
- Este programa puede mezclar diferentes tipos de proxy en la misma cadena
como: your_host <-->socks5 <--> http <--> socks4 <--> target_host
- Diferentes opciones de encadenamiento compatibles
orden aleatorio de la lista (longitud de cadena definida por el usuario).
orden exacto (tal como aparecen en la lista)
orden dinámico (excluye inteligentemente proxies caídos de la cadena)
- Puedes usarlo con la mayoría de aplicaciones cliente TCP, posiblemente incluso escáneres
de red, siempre que usen funcionalidad estándar de libc.
el escaneo basado en pcap no funciona.
- Puedes usarlo con servidores, como squid, sendmail, o lo que sea.
- Resolución DNS a través de proxy.
Configuración:
proxychains busca el archivo de configuración en el siguiente orden:
- archivo indicado en la variable de entorno PROXYCHAINS_CONF_FILE o
proporcionado como argumento -f al script o binario de proxychains.
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- $(sysconfdir)/proxychains.conf **
** normalmente /etc/proxychains.conf
Ejemplo de uso:
$ proxychains telnet targethost.com
en este ejemplo ejecutará telnet a través del proxy (o proxies encadenados)
especificado por proxychains.conf
Ejemplo de uso:
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
en este ejemplo usará un archivo de configuración diferente de proxychains.conf
para conectarse al host targethost2.com.
Ejemplo de uso:
$ proxyresolv targethost.com
en este ejemplo resolverá targethost.com a través del proxy (o proxies encadenados)
especificado por proxychains.conf
Problemas conocidos:
-
las versiones más recientes de nmap intentan determinar la interfaz de red a usar
incluso si no es necesario (como al hacer escaneos syn simples que usan la
API estándar de sockets POSIX. esto resulta en errores cuando proxychains entrega
una dirección ip a un espacio de direcciones reservado.
posibles soluciones: desactivar proxy_dns, usar una ip numérica, o usar el soporte
nativo de nmap para proxies SOCKS.
-
Mac OS X 10.11 (El Capitan) incluye una nueva característica de seguridad llamada SIP
que impide el hooking de aplicaciones del sistema.
las soluciones son desactivar parcialmente SIP ejecutando
csrutil enable --without debug en modo recuperación,
o copiar el binario del sistema al directorio home y ejecutarlo desde allí.
ver el issue #78 de github para más detalles.
-
el enlazador dinámico de glibc tiene un bug o característica de seguridad que impide que los módulos
cargados con dlopen() estén sujetos a los mismos hooks de dlsym instalados para el programa
principal. esto afecta principalmente a lenguajes de scripting como perl o python
que dependen en gran medida de dlopen() para que funcionen los módulos escritos en C.
hay informes no confirmados de que funciona como root.
musl libc no se ve afectado por el bug.
Enlaces útiles
los siguientes sitios pueden resultar útiles para comprobar fugas:
https://ipfighter.com/
https://browserleaks.com/webrtc
https://dnsleaktest.com
http://check.torproject.org - específico de tor
http://ifconfig.me - se puede usar mediante curl
http://ifconfig.io/
Comunidad:
#proxychains en irc.libera.chat
Donaciones:
las donaciones en bitcoins son bienvenidas - por favor envía a esta dirección:
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh