29 Noviembre 2005

Yo soy una de esas personas que tienen vida virtual fuera de la empresa y como tal necesito tener una vía de escape hacia el mundo exterior que no se limite exclusivamente a navegar por Internet. Realmente no necesito mucho, simplemente con tener acceso a una consola ssh en algún lugar apartado del curro, por ejemplo en labitacora.net me es suficiente.

En la medida que me he ido cambiando de empresa, este mínimo de libertad se ha ido poniendo más caro. Hace tiempo me valía exclusivamente con un cliente ssh como el putty, en aquella época se nos permitía conectarnos a cualquier servidor y a cualquier puerto, poco a poco los proxies y los firewalls fueron restringiéndonos el camino. El siguiente pasito que nos toco dar fue pasar las conexiones a través del puerto 23 y después redireccionarlas al 22. Cuando nos cerraron el puerto 23 nos toco realizar un túnel por el puerto del http (80) con la utilidad httptunnel, entre el cliente y el servidor a través del proxy y por último ha habido que salvar todo lo anterior más el protocolo de validación que usa el ISA Server para autentificar las conexiones.

Situación inicial:
Persona en una empresa con Windows (le llamaremos cliente)
Firewall ISA Server: validación mediante Negotiate, Kerberos y NTLM. Sólo permite conexiones al puerto 80 y 443.
Servidor en Internet (con Linuxiptables y sshd) vale el ordenador de casa si está conectado a Internet.

El objetivo: Acceder mediante ssh al servidor en Internet.
Programas a instalar en el cliente:

Putty: Cliente ssh
Desproxy: Aplicación que enmascara la conexión en el protocolo http
Aps (versión 0.9.8): Aplicación que nos valida los paquetes en el firewall ISA Server mediante NTML
Python: Lenguaje de programación necesario para lanzar el aps.

Programas en el Servidor

sshd: Es un demonio de telnet cifrado.
iptables: Cortafuegos de linux, necesario para reenviar las conexiones del puerto 443 al 22 que es donde está escuchando el sshd.

El flujo para la “libertad” va a ser el siguiente:
Putty -> desproxy -> aps -> | ISA Server | -> ||| Internet ||| -> | iptables | -> | Servidor ssh|

Configuración servidor:

Redireccionamos el puerto 443 al 22 pero sólo para la ip de salida del trabajo ya que en el servidor se usa este puerto para proveer páginas encriptadas.
iptables-t nat -A PREROUTING -s [ip salida a internet] -p tcp –dport 443 -j REDIRECT –to-port 22

Configuración del cliente en windows

Aps:
Configuramos el fichero server.cfg con los valores del proxy (Ip, puerto y el usuario, la clave y el dominio)
Desproxy:
Lo tenemos que conectar al puerto del aps.
desproxy.exe [servidor final] 443 localhost 5865 1001
Putty:
Lo conectamos al localhost al puerto 1001 que es el puerto por el que está escuchando el desproxy.

Los logs de red:
Aps:

28.11.2005 13:04:56 Version 0.9.8
*** Got client request header.
*** Client header:
=====
CONNECT host:443 HTTP/1.1
Host: host:443
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)

*** Client request header does not have ‘Content-Length’ or ‘Transfer-Encoding’ parameter and it must not have any body.
*** Replacing values in client header…Done.
*** New client header:
=====
CONNECT host:443 HTTP/1.1
Host: host:443
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

*** Connecting to remote server…(10.X.X.X:80)…Done.
*** Sending client request header to remote server…Done.
*** Got remote server response header.
*** Remote server header:
=====
HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. )
Proxy-Connection: close
Connection: close
Content-Length: 723
Content-Type: text/html
Proxy-Authenticate: Negotiate
Proxy-Authenticate: Kerberos
Proxy-Authenticate: NTLM
Pragma: no-cache
Cache-Control: no-cache
Via: 1.1 SES000900-132, 1.1 SES000900-058

*** Server ‘Content-Length’ found to be 723.
*** Authentication routine started.
*** Got Error 407 – “Proxy authentication required”.
*** Authentication methods allowed: Negotiate, Kerberos, NTLM
*** Using NTLM authentication method.
*** Authorization in progress…
*** Closing connection to the remote server…Done.
*** Building environment for NTLM.
*** Using custom NTLM flags: 06820000
*** NTLM version with LM response only.
*** NTLM Domain/Host/User: Dominio/maquina/usuario
*** NTLM hashed passwords found.
*** Environment has been built successfully.
*** Connecting to remote server…(10.X.X.X:80)…Done.
*** Resetting remote server status…Done. (Server buffer – 651 bytes)
*** Remote server buffer flushed.
*** Fake NTLM header with Msg1:

Anuncios