La privacidad en internet es algo que todo el mundo intenta conseguir. El uso de la red TOR es algo muy habitual a la hora de querer ser anónimos en la red, al igual que la combinación de redes VPN con la red TOR para proporcionar más dificultad a la trazabilidad de las conexiones. Pero aún podemos hacer todavía mas difícil el rastreo de nuestra información, utilizando herramientas como Proxychains, que enviará nuestras peticiones a través de una cadena de proxies antes de alcanzar el objetivo por un nodo de salida de TOR.
QUE ES UN PROXY
Un proxy es un programa que se pone en medio de una conexión entre dos máquinas (cliente y servidor) y que permite la comunicación de las mismas. De esta forma, todo el tráfico pasa a través de él. Hay que tener en cuenta que los datos enviados no se encuentran cifrados, al contrario que con una VPN, por lo que si alguien se encuentra escuchando en el proxy, podría identificar todo aquello que no viaje a través de HTTPS.
Para ver el proxy de forma más visual, se muestran a continuación dos gráficos:
CONEXIÓN DESDE CASA SIN PROXY
Este escenario es el típico de nuestras casas. A través de nuestro ordenador (10.0.0.3) o de nuestro móvil (10.0.0.2) hacemos una petición a una página web (210.111.44.231) :
Al llegar la petición al servidor web (210.111.44.231) aparecerá en el log una petición desde nuestra dirección IP pública 80.20.25.52 ubicada en españa y realizada con un navegador Chrome desde nuestro dispositivo Android :
CONEXIÓN DESDE CASA CON PROXY
En este otro escenario, a través de nuestro ordenador (10.0.0.3) o de nuestro móvil (10.0.0.2) hacemos una petición a una página web (210.111.44.231). Dicha petición, se conectará a un servidor proxy que tenemos configurado (105.106.107.108) para finalmente llegar a su destino (210.111.44.231) :
Al realizar la conexión a través de un servidor proxy, en el log del servidor web aparecerá una petición desde la dirección IP 105.106.107.108 ubicada en méxico realizada con un navegador Firefox desde un sistema Linux :
PROXYCHAINS
Es una herramienta de código libre que enruta todas las conexiones TCP realizadas por cualquier aplicación a través de un proxy.
CONFIGURACIÓN DE PROXYCHAINS
Accederemos al fichero de configuración proxychains.conf. Proxychains buscará este fichero de forma jerárquica a través de los siguientes directorios:
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- /etc/proxychains.conf
El fichero de configuración básicamente trae tres opciones de encadenamiento de proxies:
- dynamic_chain: se utilizarán los proxies en el orden en el que aparecen en la lista pero sólo se encadenarán aquellos que se encuentren disponibles.
- strict_chain: se utilizarán los proxies en el orden en el que aparecen de forma estricta y todos tienen que estar disponibles. Si uno no lo está, no se podrá establecer conexión.
- random_chain: se utilizarán los proxies con un orden aleatorio, de forma que si una combinación no responde a una petición, se utilizará otra combinación de proxies. La longitud de la cadena de proxies viene definida por la variable chain_len .
Adicionalmente el fichero dispone de otras opciones de configuración:
- chain_len: número de proxies que se utilizarán en el encadenamiento aleatorio (random_chain).
- quiet_mode: opción que deshabilita la salida por pantalla de todas las peticiones y respuestas al utilizar proxychains.
- proxy_dns: opción para realizar consultas DNS a través del proxy y evitar así la fuga de información.
- tcp_read_time_out: establece un valor de timeout para la respuesta de las conexiones.
- tcp_connect_time_out: establece un valor de timeout para el establecimiento de la conexión.
- socks4 127.0.0.1 9050 : proxy que trae configurado proxychains por defecto.
UTILIZANDO PROXYCHAINS
Para utilizar proxychains arrancaremos el servicio TOR mediante el comando sudo service tor start y comprobaremos su estado (active) a través del comando sudo service TOR status :
Tal y como hemos comentado anteriormente, proxychains por defecto tiene configurado un proxy de tipo socks4 en la dirección local 127.0.0.1 a través del puerto 9050 :
Arrancando un navegador utilizando proxychains mediante el comando sudo proxychains <aplicación> <parámetros> observamos como se realiza una petición, en este caso a thehackingfactory.com, utilizando el proxy local 127.0.0.1 definido en el fichero de configuración:
AÑADIENDO PROXIES
Una de las posibilidades de proxychains es el encadenamiento de proxies de varios tipos (http, https, socks4 y socks5). Para obtener un listado de proxies gratuitos, accederemos a la página HideMy.name (existen muchas otras) que dispone de un formulario de búsqueda de proxies, en el que podremos buscar filtrando por :
- Country: país de ubicación del proxy (Rusia, Polonia, Rumanía, etc…).
- Velocidad: velocidad de respuesta del proxy (300ms, 500ms, etc…) .
- Número de puerto: puerto utilizado por el proxy (80, 8080, 45553, etc…).
- Tipo de proxy: tipo de proxy que necesitemos (HTTP, HTTPS, Socks 4, Socks 5).
- Anonimato: nivel de anonimato del proxy (Alto, Medio, Bajo, Ninguno).
Como ejemplo, vamos a realizar una búsqueda de proxies de tipo HTTPS, Socks 4 y Socks 5 que tengan un nivel de anonimato Alto o Medio:
Como resultado a la búsqueda realizada, el listado de proxies devuelto es el siguiente:
De todas las columnas que aparecen, la más relevante es la Velocidad del proxy, pues si añadimos proxies con baja velocidad (color rojo) nuestra conexión se ralentizará muchísimo. Por lo tanto es recomendable seleccionar aquellos que tengan buena velocidad de respuesta (color verde). Este parámetro, junto al tipo de anonimato y tipo de proxy, nos permitirá elaborar un buen listado de proxies. El listado que vamos a utilizar nosotros es el siguiente:
TIPOS DE ENCADENAMIENTO
Proxychains permite utilizar diversos tipos de servidores proxy y también permite utilizarlos de varias formas, las cuales vamos a ver a continuación:
CADENA DINÁMICA (DYNAMIC_CHAIN)
Esta opción permite llevar a cabo un encadenamiento dinámico de proxies en el orden en el que se han añadido al fichero de configuración. Si uno de los proxies no responde, se saltará y se utilizará el siguiente:
Al realiza una petición con el navegador a una página, se observa como se han encadenado todos los proxies añadidos:
|D-chain|-<>-127.0.0.1:9050-<>-91.103.26.189:1080-<>-158.69.223.147:3128-<>-158.69.223.147:3128-<>-167.114.35.69:8080-<>-167.114.35.69:8080-<><>-4.2.2.2:53-<><>-OK
CADENA ESTRICTA (STRICT_CHAIN)
Esta opción permite llevar a cabo un encadenamiento estricto de proxies en el orden en el que se han añadido al fichero de configuración. Si uno de los proxies no responde, no se podrá establecer la comunicación:
Antes de utilizar este tipo de configuración, vamos a cambiar de orden los proxies añadidos, para observar como se sigue estrictamente el orden de los mismos:
La petición a través del navegador es la siguiente:
|S-chain|-<>-127.0.0.1:9050-<>-167.114.35.69:8080-<>-158.69.223.147:3128-<>-158.69.223.147:3128-<>-158.69.223.147:3128-<>-91.103.26.189:1080-<>-91.103.26.189:1080-<>-91.103.26.189:1080-<><>-4.2.2.2:53-<><>-OK
CADENA ALEATORIA (RANDOM_CHAIN)
Esta opción permite llevar a cabo un encadenamiento aleatorio de proxies. La longitud de los proxies que se van a utilizar en este tipo de encadenamiento estará definido por la vairable chain_len. Si una de las combinaciones no responde, se utilizará otra combinación aleatoria:
Al realizar una petición con el navegador a una página, se observa como se han encadenado de forma aleatoria dos cualesquiera de los proxies añadidos:
|R-chain|-<>-167.114.35.69:8080-<>-158.69.223.147:3128-<>-158.69.223.147:3128-<>-158.69.223.147:3128-<>-158.69.223.147:3128-<><>-172.217.10.10:443-<><>-4.2.2.2:53-<><>-4.2.2.2:53-<><>-OK
Tras haber realizado varias pruebas con los distintos tipos de encadenamiento de proxychains, se muestran a continuación las conexiones realizadas al blog desde las direcciones IP utilizadas por cada uno de los proxies:
Esperamos que os haya gustado.
“Don’t give up. Great things take time“.
Excelente, Muchas Gracias por el aporte!!!