|
Alguna vez se ha preguntado usted "Sera posible entrar a mi computador de la oficina por SSH aun cuando existe un firewall que me lo impide?". Pues si, es posible.
La respuesta se encuentra en la magia del modificador -R del comando ssh de linux.
ssh -RpuertoExterno:hostInterno:puertoInterno usuario@pc_externo
Un simple ejemplo es:
usuario@interno$ ssh -R10022:localhost:22 usuario@pc_externo
Esto abrira el puerto 10022 en el pc_externo el cual dirige el trafijo al puerto 22 de interno. Luego para poder acceder al computador interno, podemos hacer desde el pc_externo el siguiente comando:
usuario@interno$ ssh -p10022 usuario@localhost
Esto abrirá una conexion ssh que tendra como destino el puerto 22 del equipo interno.
A continuacion veremos diferentes casos de filtraje de conexiones que suelen darse en empresas o universidades, y como se puede obtener control de nuestra maquina en el interior en cada circunstancia.
En cada ejemplo utilizaremos los siguientes valores, para simplificar la explicación:
- Puerto SSH de la maquina interna: 22
- Puerto Web: 80
- Puerto Web SSL (HTTPS): 443
- Nombre del equipo en la empresa/universidad: interno
- Nombre del equipo en el exterior: externo
- Puerto redirigido en el exterior al interior: 10022
Se asume se tiene un computador en el exterior con servicio SSH abierto en el puerto 22.
CASO 1: Firewall filtra conexiones entrantes
Este el caso mas simple, basta utilizar el comando ssh -R
usuario@interno$ ssh -R10022:localhost:22 usuario@externo
Esto abrirá el puerto 10022 en el pc_externo el cual dirige el tráfijo al puerto 22 de interno. Luego para poder acceder al computador interno, podemos hacer desde el pc_externo el siguiente comando:
usuario@interno$ ssh -p10022 usuario@localhost
Esto abrirá una conexión ssh que tendra como destino el puerto 22 del equipo interno.
CASO 2: Firewall filtra conexiones entrantes y salientes a puertos que no sean WEB
En esta situación debemos utilizar un puerto web para establecer la conexión hacia el computador externo. La mejor opción es el puerto 443, dado que el firewall debe redirigir la conexión original hacia el servidor destino sin tocarla, de manera que pueda establecerse la sessión segura entre ambas máquinas.
Como tenemos nuestro computador externo con el servicio SSH en el puerto 22, debemos configurarlo para que también escuche en el puerto 443. Simplemente editemos el archivo de configuración del demonio ssh sshd_config que en las distribuciones en base Debian se encuentra en /etc/ssh/sshd_config. Agregemos la linea:
Port 443
Reiniciemos el servicio y listo.
Luego el comando de conexión hacia el computador externo sería:
usuario@interno$ ssh -p443 -R10022:localhost:22 usuario@externo
Esto intentará la conexion hacia externo en el puerto 443, y abrirá el puerto 10022 en el pc_externo el cual dirige el trafijo al puerto 22 de interno. El comando de conexión hacia el interior es identico al caso 1.
CASO 3: Proxy de conexión saliente
Esta situación es la más compleja, dado que requiere configuración adicional tanto en el computador externo como el interno.
Primero se debe configurar al servicio SSH en externo para que escuche al puerto 443, como se muestra en el paso 2.
A continuación se debe instalar corkscrew, software que permite tunelear conexiones TCP a través de proxies. Lo utilizaremos para engañar al proxy utilizando el puerto 443, haciéndole pensar que queremos acceder a una página web segura, cuando la verdad estamos iniciando una conexión ssh en ese puerto.
Para instalar corkscrew puede seguir el link arriba o en distribuciones basadas en Debian hacer:
apt-get install corkscrew
A continuación debemos configurar el ssh saliente de interno para que utilize corkscrew. Para esto creemos un archivo de configuracion especial en $HOME/.ssh donde colocaremos los parametros de corkscrew.
ProxyCommand /usr/bin/corkscrew HOST_PROXY PUERTO_PROXY %h %p
HOST_PROXY = Nombre del servidor o IP del proxy
PUERTO_PROXY = Puerto del servicio proxy. Usualmente 8080
%h = Host destino SSH, reemplazado en el momento del comando
%p = Puert destino SSH, reemplazado en el momento del comando
Ejemplo archivo $HOME/.ssh/configuracionCorkscrew:
ProxyCommand /usr/bin/corkscrew proxy.miempresa.com 8080 %h %p
Finalmente para iniciar la conexion ssh, con puerto reverso, utilizando corkscrew para disfrazar la conexión TCP, queda más o menos así:
ssh -p443 -F $HOME/.ssh/configuracionCorkscrew -R10022:localhost:22 usuario@externo
El acceso al computador desde el exterior es analogo al paso 1.
Enjoy!
|