miércoles, abril 02, 2008

Proxies, Proxies, Proxies o túneles para todos los gustos

La estructura clásica de salida a Internet de una empresa suele ser la siguiente:

Estructura clásica d acceso

En rojo está pintado las peticiones del cliente, en verde las respuestas del proxy y en azul el tráfico que genera el proxy con el exterior.

El PC del sufrido usuario suele estar detrás de un firewall que evita su conexión a Internet, y los navegadores se comunican con el exterior a través de un proxy, habitualmente este proxy permite la navegación sólo en conexiones http al puerto 80 y en conexiones https al puerto 443.

En el esquema anterior, si se tiene suerte, puede haber usuarios que puedan acceder a ciertas direcciones exteriores a través de técnicas de NAT implantadas en el firewall.

¿Y si queremos acceder a algún sitio, por el motivo que sea?. La solición más fácil suele ser usar un salto a través de una máquina que esté corriendo un servidore ssh.A día de hoy, es algo muy sencillo de montar en casa con una distribución Linux, y usar un cliente ssh como putty. Putty permite el uso de servidores proxy http, y por tanto permitirá la conexión contra una máquina situada en el exterior.

Sin embargo, aquí empiezan algunos problemas: no solemos disponer de direcciones IP públicas, normalmentem, si los proxy está bien configurados sólo dejarán conectar al puerto 443 usando el método CONNECT, y el servidor ssh suele estar escuchando en el puerto 22, y por último es posible que el proxy esté utilizando autentificación NTLM, con lo cual, el putty no podrá usarlo. Veamos como resolver cada uno de esos problemas.

Solucionar los problemas de IP dinámica

Lo más sencillo en este caso es usar algún proveedor de DNS dinámicos. Suelo usar sin ningún problema DynDNS, el cual tiene clientes para todas las plataformas. Se configurará para que averigüe la dirección IP conectándose a una página web. De esta manera, como es probable qu en casa tengamos un ADSL con los ordenadores colocados detrás NATeados, será capaz de averiguar cual es la IP pública que tiene asignada el ADSL.

En el caso de que la dirección IP pública sea fija, es tan sencillo como crear las correspondientes entradas en el registro de DynDNS, sin necesidad de usar ningún cliente.

Escuchar en el puerto 443

Como medida de seguridad, la mayoría de los proxies que están configurarados en las empresas no permiten usar el métido CONNECT a un puerto distinto del 443 (que equivale al https). Por eso, es mucho mejor poner el servidor ssh a escuchar en ese puerto (aparte del 22 si se quiere) y en el esquema que se está usando para implantar esta solución, traducir la conexión hacía el puerto 443. De esta manera, saltaremos la restricción de puerto que suele estar activada en el proxy.

Configuración del Proxy en el Putty

Ya se use con el proxy ntlmaps o bien con el proxy de la empresa, hay que configurar el tipo de proxy que se va usar. Si arrancamos Putty y nos vamos a Connection->Proxy, se nos mostrará la siguiente pantalla. Es raro que nos encontremos en una empresa un proxy socks4 (porque suele significar acceso libre free for all sin necesidad de autentificación por parte de un usuario). Un proxy socks5, si podrá usar autentificación. Sin embargo, lo más normal que nos encontremos sea un proxy http, y será el que se use normalmente.

Lo único que habrá que hacer en este caso es marcar el Proxy type como HTTP, introducir en el cuadro de texto Proxy hostname la dirección o nombre DNS de la máquina donde está el proxy que se va a usar, en Port el puerto donde está escuchando el proxy, y si este necesita usuario y password se introduce en los campos Username y Password.

Autentificación NTLM

Esta es la parte más problemática que suele encontrarse un usuario en entornos Microsoft. Si se ha desplegado un servidor ISA server, lo más normal es que utilice el sistema no estándar de autentificación NTLM, para evitar tener que introducir las credenciales del usuario al navegar por Internet. Aunque la mayoría de los navegadores actuales como Firefox o Safari pueden usarlo sin ningún problema, no ocurre lo mismo de otras herramientas que pueden usar un proxy http, pero que no entienden dicho esquema de autenficación no estándar.

La idea es usar un proxy local, que será el encargado de recibir las peticiones del programa que lo necesite, se autentifique contra el ISA server usando el esquema NTLM y posteriormente le pase la petición que ha recibido (proxy chaining, o encadenamiento de proxies). Un programa ideal para esta función es ntlmaps (NTLM Authorization Proxy Server), escrito en Python, y por tanto con un alto grado de portabilidad - sólo es necesario instalar el intérprete Python en la máquina.

La configuración del programa es sencilla. Se descomprime el fichero y en el directorio donde se descomprime está el fichero server.cfg donde se introducen los parámetros de configuración. Lo más relevante son:

LISTEN_PORT: 8500 # Puerto local donde escuchará el servidio. En este ejemplo 8500.
PAREN_PROXY: proxy.padre.empresa.int # Dirección o nombre DNS del proxy al que le mandaremos las peticiones
PARENT_PROXY_PORT: 80 # Puerto del proxy padre, aquí por ejemplo 80
NT_DOMAIN: DOMINIONT # Nombre del dominio NT en el que nos encontramos.
USER: usuario # Nombre del usuario que se va a usar
PASSWORD: password # Contraseña del usuario especificado en USER
Dejando el resto de los parámetros por defecto.

Referencias

Technorati Tags: , ,

No hay comentarios: