Establecer una sesión SSH a traves de Proxy
Despues de un tiempo hasta que lo he conseguido ..., ahora os resumo aqui mis experiencias por que seguro que le sirven a otro.
Bueno, pues el caso es que queria conectarme con ssh desde el PC del curro a mi servidor de casa pero, al igual que pasa en otros sitios, la unica salida al exterior desde la red privada del curro es a traves de proxy, unicamente permitiendo los protocolos http (puerto 80) y https (puerto 443). Bueno, pues para poder abrir una conexion ssh a mi servidor la unica forma era tunelizando el protocolo ssh con https.
Buscando y buscando encontre lo siguiente: (http://www.agroman.net/corkscrew/)
luna:/etc# apt-cache search corkscrew
corkscrew - Tunnel TCP connections through HTTP proxies
Description: Tunnel TCP connections through HTTP proxies. corkscrew is a simple tool to tunnel TCP connections through an HTTPproxy supporting the CONNECT method. It reads stdin and writes tostdout during the connection, just like netcat..It can be used for instance to connect to an SSH server running ona remote 443 port through a strict HTTPS proxy.
Asi que ya esta, justo lo que necesitaba. Arrancamos una sesion ssh tunelizada a traves de nuestro servidor proxy del curro para llegar a nuestro servidor ssh de casa usando corkscrew. Pero esta sesion es una sesion segura con lo que ha de usar el puerto 443 para que funcione con el proxy, asi que para que funcione tendremos que hacer que nuestro servidor ssh de casa este corriendo escuchando en el puerto 443 (cosa que se define en su fichero de configuracion /etc/ssh/sshd_config) o, como he hecho yo, redireccionando el puerto 443 de nuestro servidor de casa al 22:
/sbin/iptables -t nat -A PREROUTING -i ippp0 -p tcp --dport 443 -j REDIRECT --to-port 22
(cambiar ippp0 por la interfaz correspondiente de salida a internet)
Bueno, pues al grano. Instalamos corkscrew:
apt-get install corkscrew
Y luego nos creamos un ficherito para la conexion a nuestra casa que lo dejaremos en $HOME/.ssh/ConexionServidorCasa que tenga lo siguiente:
-------------------------------------------------------
# Linea para arrancar Corkscrew cuando uso ssh
ProxyCommand /usr/bin/corkscrew proxy.curro.es 8080 %h %p
-------------------------------------------------------
(Las variables %h y %p seran sustituidas por el nombre de host y puerto del servidor de nuestra casa cuando se lanza el comando ssh. Es como si arrancamos corkscrew de forma manual poniendo:/usr/bin/corkscrew proxy.curro.es 8080 servidor.casa.com 443)
Si el proxy del curro requiere autenticacion pues hay que crearnos otro ficherito, por ejemplo $HOME/.ssh/Autenticacion con el usuario y password de la forma:
usuario:password
Le ponemos los permisos correctos para que nadie pueda ver nuestro usuario y password con:
chmod 600 $HOME/.ssh/Autenticacion
Y ahora el fichero con la linea de corkscrew ($HOME/.ssh/ConexionServidorCasa) cambia a lo siguiente:
-------------------------------------------------------
# Linea para arrancar Corkscrew cuando uso ssh
ProxyCommand /usr/bin/corkscrew proxy.curro.es 8080 %h %p $HOME/.ssh/Autenticacion
-------------------------------------------------------
Bueno, pues ya esta configurado Corkscrew, ahora probamos la conexion haciendo lo siguiente:
ssh -p 443 -F $HOME/.ssh/ConexionServidorCasa usuario@servidor.casa.com
Este comando arranca corkscrew que se encarga de tunelizar nuestra sesion ssh a traves del proxy del curro hasta el puerto 443 de nuestro servidor de casa. Y ya esta, en este punto nos deberia salir el login de nuestra sesion ssh y a disfrutar de la linea de comandos de nuestro servidor estando sentaditos comodamente en nuestro curro ;-) Ah, y que no os vea el jefe ;-) |