UTIILIZANDO POLIPO Y TOR

Normalmente, suele utilizarse Privoxy con TOR para realizar peticiones de forma anónima, sin embargo Privoxy no es la única solución que existe para implementar un servicio de proxy, existen otras soluciones que desde mi perspectiva, son muy interesantes e implementan características que traen consigo algunos beneficios que Privoxy por si solo no tiene. Tal es el caso de Polipo.

Polipo es un proxy web muy liviano y rápido, diseñado principalmente para ser rápido entornos de red donde la velocidad de la conexión es lenta (como por ejemplo la red de TOR, que no es especialmente rápida) además de estar enfocado a la velocidad de las conexiones y ser un proxy liviano.

Polipo cuenta con características muy interesantes que le convierten en una buena opción para implementar la identidad “anónima” de una maquina en internet.

Que características tiene Polipo que lo hacen interesante?

Además de que se trata de un proxy liviano y muy rápido en redes lentas tiene otras característica interesantes tales como:
– Soporte completo de Pipelines en HTTP/1.1: El concepto de Pipelines es una característica soportada únicamente por el protocolo HTTP en su versión 1.1 y consiste en el aprovechamiento de conexiones persistentes para la concatenación de un flujo de peticiones, de esta forma es posible enviar múltiples peticiones a un destino sin la necesidad de esperar por una respuesta y sin perder ningún paquete en dicho proceso. Por otro lado, también permite que múltiples peticiones sean enviadas en un solo paquete lo que reduce la latencia y el trafico en la red. Sin embargo, en el caso de algunos servidores web del mercado, se dan casos en los que aunque dicen que soportan HTTP 1.1 en realidad muchas de las características de esta versión del protocolo no están completamente integradas o soportadas (como por ejemplo pipeline), por este motivo Polipo utilizará pipelines solamente si cree que el servidor remoto lo soporta.

– Soporte web cache: Popilo también es un web proxy caching que intenta cachear el segmento inicial de una petición, de esta forma es fácilmente “retomada” en el caso de que exista una interrupción en la misma, por ejemplo cuando una descarga es interrumpida, permitirá retomarla posteriormente partiendo de la cache.

– Polipo intentará actualizar las peticiones a HTTP 1.1 inclusive si desde el cliente vienen con HTTP 1.0, dependiendo evidentemente de las capacidades del servidor web objetivo, también podría asignar una versión del protocolo más baja.

– Polipo soporta Ipv6

– Polipo puede utilizar una técnica conocida como Poor Man’s Multiplexing (PMM) que consiste en la simulación de múltiples peticiones sobre transacciones simultaneas compartiendo una única conexión, algo que en HTTP no esta soportado, de esta forma se reduce considerablemente la latencia y el trafico en la red, para que esta técnica funcione adecuadamente el soporte a pipelines debe darse por sentado.

Instalación y Configuración de Polipo

Se cuenta con dos posibilidades, descargar un “tarball” del software desde aquí: http://freehaven.net/~chrisd/polipo/ o realizar una copia del repositorio remoto (repositorio GIT). En este caso se utilizará el segundo método, sin embargo los resultados y el procedimiento es exactamente igual en ambos escenarios. Dado que es un programa escrito en C, es necesario en primera instancia “construir” e “instalar” el software de la siguiente forma:

>make all>make install

Con esto es más que suficiente para que el software quede correctamente instalado en la maquina, solamente es necesario establecer algunas propiedades opcionales de configuración, para esto es necesario crear el fichero de configuración, que puede estar en una de dos localizaciónes, o bien en ~/.polipo o en /etc/polipo/config en este caso se ha creado el fichero /etc/polipo/config con el siguiente contenido:

socksParentProxy=localhost:9050

diskCacheRoot=»»

disableLocalInterface=true

laxHttpParser=true

maxPipelineTrain=15

socksProxyType=socks5

Las opciones indican que, se utilizará TOR, asumiendo que el proceso se encuentra en ejecución bajo el puerto 9050, no se almacenará en disco ninguna página cacheada, se desactiva la interfaz de configuración local del navegador con el fin de evitar posibles ataques “client-side”, se ignoran todos los headers HTTP desconocidos, se define un máximo de 15 peticiones canalizadas (pipeline) y finalmente se indica que el tipo de proxy será SOCKS5. En el caso de que el fichero de configuración no se encuentre en ninguna de las dos localizaciones anteriores, se puede especificar de forma manual utilizando la opción “-c” e indicando la ruta, por ejemplo:

>polipo -c «/home/config»

Established listening socket on port 8123.

En el caso de que no se especifique el fichero de configuración se buscará primero en el directorio “~/.polipo” y posteriormente en “/etc/polipo/config”.

>polipo

Established listening socket on port 8123.

Las opciones de configuración anteriores solamente son unas pocas, para ver el listado completo de opciones y el valor que están asumiendo, utilizar la opción “-v”

>polipo -v

configFile /etc/polipo/config Configuration file.

CHUNK_SIZE 8192 Unit of chunk memory allocation.allowUnalignedRangeRequests boolean false
Allow unaligned range requests (unreliable).

………

Con estos sencillos pasos ya se cuenta con un proxy Polipo configurado de tal forma que las peticiones viajaran por medio de la red de TOR, ahora bien, para realizar una prueba rápida, se puede cambiar la configuración del navegador web para que se indique como proxy “localhost” puerto “8123”

Desventajas y Beneficios de Polipo frente a Privoxy

A continuación se indican las principales diferencias de Polipo y privoxy:

  • Polipo es mucho mas rápido que Privoxy principalmente debido al soporte que tiene sobre cache de sitios web y pipelines de conexiones, propiedades propias de HTTP 1.1
  • Privoxy esta mejor diseñado para asegurar el anonimato en determinados sitios web que utilizan JavaScript y las cabeceras de la petición HTTP para obtener información personal del usuario que realiza la petición. Privoxy realiza una mejor depuración de HTML y JavaScript.
  • Polipo necesita determinados ajustes para prevenir problemas potenciales sobre el afianzamiento del anonimato de forma segura y rápida, estas mejoras se incluyen directamente en el fichero de configuración de Polipo, propiedades tales como censoredHeaders permiten controlar el flujo de la información que viaja entre cliente y servidor. El fichero configuración recomendado se encuentra en el repositorio de TOR aquí: https://gitweb.torproject.org/torbrowser.git/blob_plain/HEAD:/build-scripts/config/polipo.conf No obstante, debido a que en ocasiones el repositorio sufre cambios, es posible que este fichero ya no se encuentre disponible al momento de leer este documento, por este motivo se incluye aquí: http://pastebin.com/yBBDwskh
  • Privoxy no puede manejar conexiones persistentes, con lo cual no soporta algunas características propias de HTTP 1.1 mientras que Polipo si que soporta y maneja conexiones persistentes.
  • Privoxy no tiene la capacidad de actuar como un servidor web de cache para acelerar la navegación web, sin embargo esta característica esta plenamente soportada en Polipo
  • Privoxy puede realizar sustituciones de texto sobre las peticiones web, aunque esta característica no esta activada por defecto, es necesario manualmente activar el filtro “fun” para ver textos como “MicroSoft” son cambiados por “MicroSucks”, este tipo de tratamientos sobre las peticiones no son posibles con Polipo.

Ahora bien, las premisas anteriores no significan en lo absoluto que se deba prescindir de una de las dos soluciones para utilizar proxies, de hecho, es posible utilizar ambos proxies de la siguiente forma:

Privoxy:8118 ↔ Polipo:8123 ↔ TOR:9050

En el fichero de configuración de Privoxy se establece la regla de “forward-socks5” en Privoxy para que apunte al puerto 8123 donde se encuentra en ejecución Polipo, posteriormente en el fichero de configuración de Polipo se indica que el servidor socks “parent” es el servidor socks de TOR en el puerto 9050. Este nivel de “indirección” permite utilizar todas las características de ambos proxies, sin embargo, como se podrá imaginar el lector, la conexión puede llegar a ser un poco más lenta.

A continuación se indica el procedimiento recomendado para la integración de las herramientas mencionadas hasta el momento para proveer un mejor anonimato.

PROCEDIMIENTO RECOMENDADO, PROXYCHAINS, PRIVOXY, POLIPO Y TORTUNNEL

Después de haber explicado estas herramientas, se indica el procedimiento recomendado para realizar conexiones de forma anónima utilizando la red de TOR intentando mantener un equilibrio más o menos balanceado entre anonimato y desempeño, para esto se recomienda utilizar estas tres aplicaciones de forma conjunta, el uso de privoxy o polipo es decisión del usuario (o ambos inclusive si se desea, tal como se ha indicado lineas anteriores), después de comprender los beneficios y las desventajas de cada uno de estos proxies, no obstante, como recomendación (sin la intención de influir sobre el lector) es utilizar Polipo. Los pasos son:

  1. Iniciar TorTunnel en un nodo de salida Valido, para elegir un nodo de salida adecuado, verificar el servicio de nodos activos de TOR en el momento de ejecutar el comando, recordar que este listado se actualiza constantemente y con frecuencia entran y salen nodos de la red, ya que son usuarios que “prestan” su ordenador (y parte de su banda ancha) para que otros usuarios puedan utilizar esta red de forma más o menos rápida:

    ./torproxy 46.118.33.88

    torproxy 0.2 by Moxie Marlinspike.

    Retrieving directory listing…

    Connecting to exit node: 46.118.33.88:443

    SSL Connection to node complete. Setting up circuit.

    Connected to Exit Node. SOCKS proxy ready on 5060.

     

    blockquote>

  2. Modificar el fichero de configuración de proxychains (etc/proxychains.conf) para que apunte al servidor SOCKS iniciado por TorTunnel y probar que esta funcionando correctamente.

  3. Modificar el fichero de configuración de Privoxy o Polipo para que apunte al servidor SOCKS iniciado por TorTunnel y reiniciar Privoxy, la entrada en el fichero de configuración será la siguiente:

Privoxy

forward-socks5 / 127.0.0.1:5060

Polipo

socksParentProxy = «127.0.0.1:5060»

socksProxyType = socks5

  1. Finalmente, probar desde Firefox que TorButton funciona correctamente y verificar que se esta pasando por la red de TOR verificando el servicio: https://check.torproject.org/ y por ultimo probar un comando NMAP utilizando ProxyChains. De esta forma todos tanto consola como navegador web quedan ligados al nodo de salida iniciado por TorTunnel y permitirá realizar peticiones mucho más rápido.