Uso de Túneles SSH

Seguridad

1. Conceptos 

 1.1 SSH 

Por sus siglas Secure Shell, pertenece al nombre de un protocolo de red el cual permite realizar una conexión a través de un canal seguro entre una computadora local y otra remota, utilizando un nombre y contraseña de usuario. Ésta conexión segura permite un pleno control sobre la computadora remota mediante una consola de línea de comandos y también permite ejecutar aplicaciones gráficas siempre y cuando se tenga el Servidor X arrancando. SSH usa el modelo Cliente-Servidor y fue diseñado para reemplazar el conocido Telnet. que presenta. Existen 2 versiones de éste protocolo, siendo la última mejorada y corregida con respecto a la primera versión, la cual presenta un agujero de seguridad y permite a los atacantes ejecutar códigos y comandos en los sistemas afectados sin poseer algún privilegio de usuario. 


Para comprender mejor su uso: Algunas veces se nos ha presentado que estando en el trabajo ó en la universidad recordamos que olvidamos traer algún archivo o documento que se encuentra en la computadora de nuestra casa. Frente a este problema tenemos SSH para realizar una conexión directa y segura entre la computadora local y nuestra computadora en casa. Además es posible realizar una transferencia de archivos entre ambas computadoras por medio de protocolos asociados como SCP (Secure Copy) y SFTP (Secure File Transfer Protocol) heredados de CP y FTP respectivamente. 


2. Características

 - Encriptación de Datos.- SSH utiliza un método seguro de encriptación de 128 bits al enviar y recibir datos, lo cual hace que sea muy difícil descifrar y leer el contenido transmitido bajo una red no segura. 

 - Operabilidad.- El uso de SSH es muy simple, sólo se realiza una conexión mediante una aplicación cliente hacia el servidor, una vez autentificado, el cliente toma completamente el control del servidor remoto.

  • - Canalización.- Después de realizada la autenticación entre el cliente y el servidor remoto, se abren canales múltiples para cada sesión sea por consola de comandos ó interfaz gráfica X mediante el método llamado Multiplexación. 

  • - Reenvío por X11.- Mediante éste protocolo es posible el tráfico seguro de sesiones remotas bajo entornos X.

  • - Redirección de Puertos.- Permite el envío de conexiones TCP / IP no seguras, mediante un canal seguro y cifrado. Cuando esto es realizado, el servidor SSH establece un túnel encriptado hacia el cliente SSH. 

  • - Copia y Transferencia de Archivos.- Con SCP y SFTP podemos realizar copiados y transferencias de archivos entre 2 computadoras y todo por medio de una canal seguro en una red insegura.





3. Representación Gráfica de una conexión SSH. 

 



La computadora cliente se conecta hacia el servidor remoto usando un Túnel Encriptado SSH bajo una conexión insegura como TCP/IP.



4. Usando conexiones SSH. 



4.1 Consola de Comandos 



La sintaxis para realizar una conexión por SSH es la siguiente:

ssh pc_remota


Para conectarnos remotamente con otra computadora por Línea de comando, debemos de abrir un cliente SSH como Putty, Axe SSH, etc. En  este caso usaremos el cliente que viene por defecto en Ubuntu, para ello es necesario abrir una Terminal de comandos y teclear el siguiente   comando: 



Con éste comando la computadora remota (Zeus) solicitará la contraseña de nuestro usuario, por otro lado, en caso necesitemos conectarnos con un usuario remoto usaremos:




4.2 Entorno Gráfico: X Window

Como expliqué anteriormente, es posible ejecutar aplicaciones gráficas usando SSH, para ello es necesario tener el Servidor X ejecutandose, y habilitando el reenvío de X11 en el fichero de configuración de SSH (/etc/ssh/ssh_config):


X11Fordwarding   yes   

Una vez habilitada la opción, agregamos el parámetro -X para indicarle que habilite la ejecución de programas con interfaz gráfica de usuario al conectarnos por SSH en la línea de comandos.

 

Una vez que ingresamos la contraseña y nos conectamos, probamos ejecutando el navegador Mozilla firefox tecleando firefox, y luego verán que la ventana aparecerá en el escritorio.


 

Como verán, en el título de la ventana de Firefox aparece (en Zeus) lo cual quiere decir que el navegador abierto pertenece servidor remoto llamado Zeus.

 

5. Uso de Túneles mediante SSH

Una de las ventajas que nos brinda éste protocolo, es la posibilidad de crear túneles locales y remotos.
 

5.1 Usando Túneles Locales.

La sintaxis para crear un túnel local es:

ssh –L [puerto_local]:localhost:[puerto_remoto] servidor_remoto

Un claro ejemplo y muy sencillo para comprender, es que tengamos un servidor Web y necesitemos visualizar alguna página protegida por el servidor (por los ficheros .htacces). El problema en las páginas protegidas mediante éste método  radica en que cada vez que ingresamos un usuario y contraseña, éstas viajan por la red como texto plano y puede ser interceptada por algún tercero. Usando túneles SSH podemos controlar este problema, ya que todos los datos viajan encriptados y seguros.

Para redireccionar el puerto que escucha el servidor web remoto a nuestro ordenador, ejecutamos:

ssh -L 10080:localhost:80 usuario@servidor-web-remoto.com

El parámetro -L nos permite realizar el túnel a través de un puerto local. Con esto, ya tenemos creado un Túnel entre el puerto 10080 de nuestra computadora y el puerto 80 que atiende el servidor Web remoto. Si tecleamos en el navegador web http://localhost:10080 podremos acceder sin problemas al servidor web remoto con la seguridad de que todos los datos viajan encriptados.



5.2 Usando Túneles Remotos

La sintaxis es la siguiente:

ssh -R [puerto_remoto]:localhost:[puerto_local] terminal_remoto

Siguiendo con el ejemplo antes mencionado, imaginemos un servidor Web escuchando el puerto 80 y deseamos que una computadora remota pueda tener acceso al puerto del servidor web y en éste caso, nos encontramos del lado del servidor. Para realizar el túnel remoto ejecutamos:

 ssh -R 10080:localhost:80 usuario@pc-cliente-remoto

 

Usando el parámetro -R podremos crear túneles remotos desde el puerto del servidor.

 

6. Casos Prácticos

 

6.1 Accediendo a X mediante Transmisión SSH desde Windows.


 Una manera sencilla de acceder remotamente al entorno gráfico de Linux desde Windows es instalando un gestor de entornos Unix como Xming para Windows y usar Putty como cliente SSH para realizar el túnel. Una vez instalado ejecutamos el servidor Xming (notarás que el servidor está arrancando porque mostrará un icono en la barra de tareas) luego de ello ejecutamos y configuramos Putty.


 


Debemos habilitar la opción de Reenvío por X11 que nos permitirá ejecutar las ventanas con Xming.

 

 

Ahora vamos a Session y donde nos pide el nombre de Host del servidor SSH escribimos el nombre ó su ip, en mi caso mi servidor con Linux se llama “Zeus” dejando por defecto el puerto 22 del protocolo SSH. Luego le damos al botón Open y si no hay problemas nos debería mostrar la siguiente pantalla:

 




Una vez conectados al servidor remoto, es posible ejecutar aplicaciones con interfaz gráfica de usuario desde Windows. Si tecleamos synaptic, nos aparecerá el gestor de paquetes de Ubuntu.



 

6.2 Accediendo al Escritorio Remoto mediante Túnel con SSH desde Windows.


            La idea es crear un túnel desde el puerto 5900 del servidor Linux hacia el puerto 5900 de nuestro host local, de tal forma que al ejecutar VNC conectándolo a nuestro puerto local podamos controlar remotamente el Escritorio del host con Linux. Es una forma sencilla y muy segura al realizar conexiones mediante VNC ya que éste al actuar sólo en una conexión remota a Linux envía todos los datos en texto plano vulnerando la información que se transmite permitiendo que cualquier usuario avanzado interceptar la información confidencial como claves, cuentas bancarias, etc.


En este ejemplo usaremos Putty como cliente SSH en conjunto con VNC por el lado del cliente en Windows y X11VNC Server por el lado de nuestro servidor Linux.


Primero ejecutamos Putty y vamos a la categoría Connection>SSH>Tunnels, ingresamos el puerto 5900 de origen del servidor remoto y más abajo la dirección de nuestro host local junto con el puerto con el que vamos a establecer el túnel, en éste caso 127.0.0.1:5900 y finalmente le damos Add.




Con esto abremos configurado correctamente el túnel a crear, ahora nos posicionamos en la categoría Session e ingresamos el nombre de host ó ip de nuestro servidor Linux, en mi caso Zeus con el puerto 22 (por defecto) del protocolo SSH y pulsamos Open.





Una vez ya correctamente logueados con nuestro servidor, ejecutamos el servicio X11VNC para que escuche el puerto 5900 del servidor y nos permita realizar el túnel.



Ejecutamos el comando x11vnc -bg -passwd ACCESS, donde el parámetro -bg es para que el proceso se ejecute en background y -passwd nos permite colocar una clave de seguridad para acceder al escritorio remoto con VNC.

 

 


Una vez ejecutado el comando y nos muestre una pantalla similar a la anterior, se habría creado el túnel entre nuestro host local y el servidor remoto. Ahora en nuestro cliente ejecutamos el VNC Viewer y tecleamos nuestro ip de host local 127.0.0.1 y le damos en Connect, luego nos pedirá una clave que es la que ingresamos al ejecutar el servicio x11vnc.









Sencillamente ya es posible controlar remotamente todo el escritorio remoto de nuestro servidor Linux.



7. Referencias