Table of Contents
Tunelizar (HTTP) conexiones SSH y GIT a través de proxys http
corkscrew nos permite utilizar los proxys http/s para conectar a servidores SSH, útil en entornos de conectividad limitada (Proxys empresariales / Firewalls). Funciona sin problemas en los siguientes servidores Proxy HTTP.
Servidores HTTP.
- Gauntlet
- CacheFlow
- JunkBuster
- Apache mod_proxy
NOTA: No todos los proxy http/s y sus configuraciones permiten este tipo de solicitudes. Depende del servidor proxy utilizado, si no se reciben paquetes en un determinado espacio de tiempo la conexión será terminada. Se recomienda hacer uso del comando top por ejemplo para mantener siempre la conexión activa.
corkscrew web: http://www.agroman.net/corkscrew/
- Proxy HTTPS / Puerto para el ejemplo: proxyhttps.com / 8080
- Servidor http/s en python para probar: Proxy HTTP/HTTPS en Python. / Tinyproxy es también compatible y fácil de configurar.
Proxy HTTP con autenticación.
Se crea el fichero ~/.ssh/myauth con el usuario y password correspondiente con esta sintaxis.
usuario:password
Se dan los permisos recomendados.
chmod 600 ~/.ssh/myauth
SSH
Ejecutando corkscrew desde el cliente SSH. Para el ejemplo conectará al propio servidor Proxy (localhost).
ssh -o ProxyCommand='corkscrew proxyhttps.com 8080 %h %p' root@localhost -p 2222
Es factible editar el fichero ~/.ssh/config y agregar el siguiente contenido.
Host * ProxyCommand /usr/bin/corkscrew proxyhttps.com 8080 %h %p
Si se requiere autenticación solo se debe agregar la ruta del fichero ~/.ssh/myauth.
corkscrew proxyhttps.com 8080 %h %p ~/.ssh/myauth
GIT
Se crea el script proxy.sh
#! /bin/bash corkscrew proxyhttps.com 8080 $*
Se fija el valor de la variable para poder funcionar con el servidor proxy mediante git.
export GIT_PROXY_COMMAND=/home/sexyfrau/proxy.sh
Tunelizar otras aplicaciones a través de HTTP
Si se quiere tunelizar otro tipo de aplicaciones por el mismo tunel http, se puede hacer uso del servidor de sockets que ofrece ssh. De esta forma podemos utilizar el tunel para casi cualquier aplicación del sistema.
ssh -o ProxyCommand='corkscrew 201.141.36.88 80 %h %p' -N -D 9999 -f root@localhost -p 2222
- Se crea un tunel HTTP entre el host local y 201.141.36.88 en el puerto 80 (Donde ejecuta un proxy HTTP).
- Se crea una conexión entre el puerto local 9999 y el 2222 del servidor 201.141.36.88, donde se ejecuta el servicio ssh, pero se podría utilizar otro servidor ssh.
- Todas las aplicaciones configuradas para utilizar el proxy SOCKS 127.0.0.1:9999 saldrán a Internet a traves del host 201.141.36.88, siendo la comunicación entre ese host y el local tunelizada con HTTP.
NOTA: Para no tener la necesidad de configurar el proxy en cada software que se quiere tunelizar, se puede hacer uso de tsocks. También muy útil cuando las aplicaciones no soportan uso de proxys de forma nativa.
corkscrew + Tinyproxy
La utilidad corkscrew funciona sin problemas con el proxy http/s Tinyproxy, las opciones de configuración que se deben tener en cuenta en Tinyproxy para funcionar junto con corkscrew son las siguientes.
Timeout 600 # Podemos aumentarlo para que no se nos cierren sesiones ssh que tengamos a través del tunel. Allow X.X.X.X # Por defecto localhost, por lo que no estará accesible desde el exterior. Se debe agregar el dominio / IP de los clientes deseados o comentar todos los Allow para que permita todos. ConnectPort 22 # Puertos a los que permitirá conectarse a través de él. Si se comentan todos permitirá cualquier puerto. Si queremos por ejemplo hacer conexiones SSH debemos permitir el 22, si es Jabber 5222, etc.
SSH: Write failed: Broken pipe
Solución en cliente: Editar el fichero /etc/ssh/ssh_config.
Host * ServerAliveInterval 120
Indica al cliente de ssh que envíe un paquete cada 120 segundos para mantener activa la comunicación.
También es posible modificar el servidor en vez / a la vez que cliente con la directiva “ClientAliveInterval”.