corkscrew es una herramienta que se creó hace ya bastantes años pero que todavía sigue siendo bastante útil para tunelizar conexiones TCP a través de un proxy HTTP que admite el método CONNECT. Lee stdin y escribe en stdout durante la conexión, como hace netcat.
Usando SSH a través de un proxy HTTP
Se suele utilizar sobretodo para conectarse a un servidor SSH a través de un proxy HTTP/Socks. Para hacerlo, basta configurar el cliente ssh para usar el proxy de turno con corkscrew.
Primero editamos el fichero ~/.ssh/config y añadimos:
Sintaxis: corkscrew $proxy_ip_or_domain_name $proxy_port $destination_ip_or_domain_name $destination_port
Y a continuación ya podemos conectarnos al servidor ssh de forma transparente:
ssh username@anyexternalcomputer
También podemos ejecutarlo con una única línea:
ssh user@server -o "ProxyCommand corkscrew IP_PROXY 3128 %h %p"
Si el proxy HTTP usa autenticación, deberemos editar un fichero 'auth-file':
$ gedit .corkscrew-auth
y dentro pondremos el nombre de usuario y la contraseña en el siguiente formato:
username:password
En ese caso debemos especificar el fichero con las credenciales en la configuración ssh:
Túnel SOCKS
Si queremos hacer un túnel SOCKS podremos ejecutar lo siguiente:
que creará un proxy SOCKS en localhost:9000.
Tunneling Git
Los firewalls generalmente bloquean el puerto que usa git. Sin embargo, se puede hacer que git realice un túnel a través de proxies HTTP usando utilidades como corkscrew. Cuando git ve la variable de entorno GIT_PROXY_COMMAND establecida, ejecutará el comando en $GIT_PROXY_COMMAND y usará el stdin y stdout de ese programa, en lugar de un socket de red.
Creamos el script corkscrewtunnel.sh
Ahora, deberíamos poder usar git también a través del proxy HTTP.
Fuentes:
- CorkScrew - A Tool for Tunnelling SSH over HTTP Proxies etc.
- How to use SSH Via HTTP Proxy using Corkscrew in Ubuntu
- Using corkscrew and an HTTP proxy to ssh anywhere through firewalls
- HTTP tunneling
Usando SSH a través de un proxy HTTP
Se suele utilizar sobretodo para conectarse a un servidor SSH a través de un proxy HTTP/Socks. Para hacerlo, basta configurar el cliente ssh para usar el proxy de turno con corkscrew.
Primero editamos el fichero ~/.ssh/config y añadimos:
ProxyCommand /usr/local/bin/corkscrew IP_PROXY 3128 %h %p
Sintaxis: corkscrew $proxy_ip_or_domain_name $proxy_port $destination_ip_or_domain_name $destination_port
Y a continuación ya podemos conectarnos al servidor ssh de forma transparente:
ssh username@anyexternalcomputer
También podemos ejecutarlo con una única línea:
ssh user@server -o "ProxyCommand corkscrew IP_PROXY 3128 %h %p"
Si el proxy HTTP usa autenticación, deberemos editar un fichero 'auth-file':
$ gedit .corkscrew-auth
y dentro pondremos el nombre de usuario y la contraseña en el siguiente formato:
username:password
En ese caso debemos especificar el fichero con las credenciales en la configuración ssh:
Host *
ProxyCommand corkscrew proxyhostname proxyport %h %p /home/username/.corkscrew-auth
Túnel SOCKS
Si queremos hacer un túnel SOCKS podremos ejecutar lo siguiente:
ssh -ND 9000 user@server -o "ProxyCommand corkscrew IP_PROXY 8088 %h %p"
que creará un proxy SOCKS en localhost:9000.
Tunneling Git
Los firewalls generalmente bloquean el puerto que usa git. Sin embargo, se puede hacer que git realice un túnel a través de proxies HTTP usando utilidades como corkscrew. Cuando git ve la variable de entorno GIT_PROXY_COMMAND establecida, ejecutará el comando en $GIT_PROXY_COMMAND y usará el stdin y stdout de ese programa, en lugar de un socket de red.
Creamos el script corkscrewtunnel.sh
#! /bin/bash
corkscrew proxyhost proxyport $*
Set GIT_PROXY_COMMAND
export GIT_PROXY_COMMAND=path-to-corkscrewtunnel.sh
Ahora, deberíamos poder usar git también a través del proxy HTTP.
Fuentes:
- CorkScrew - A Tool for Tunnelling SSH over HTTP Proxies etc.
- How to use SSH Via HTTP Proxy using Corkscrew in Ubuntu
- Using corkscrew and an HTTP proxy to ssh anywhere through firewalls
- HTTP tunneling
¡Qué bueno! No lo conocía, y eso que se encuentra en los repositorios de Debian.
ResponderEliminarMis dieses.
Usando netcat se puede hacer lo mismo, me parece.
ResponderEliminarSaludos. Verónica.