jueves, 27 de diciembre de 2007

SSH

A todo aquél que tenga cierta relación con el mundo de la informática y un poco de conocimiento del mismo, no le resultarán extrañas las siglas que dan título al post de hoy. En esta entrada daré alguna pincelada del protocolo de comunicaciones seguras SSH, así como las herramientas que hay a nuestra disposición tanto para montar un servidor SSH, así como algún cliente para acceder a dicho servidor.

SSH son las siglas de Secure Shell. Su traducción más aproximada al castellano puede ser "consola segura" aunque no garantizo que sea la más acertada, pero sí la más usada. Pues bien SSH es el nombre de un protocolo de comunicaciones y el programa que lo implementa, es decir, la interfaz o la capa de aplicación de dicho protocolo, va todo incluído cuando nos referimos a SSH. A grandes rasgos podemos decir que SSH nos permite tomar el control remoto de un ordenador en modo consola, aunque hoy día no es difícil encontrar aplicaciones que nos permitan redirigir el tráfico de X-Windows (entorno gráfico de Linux) siempre que en el lado del servidor SSH también tengamos corriendo un servidor de X , aunque con la consola de comandos es más que suficiente para la mayoría de labores de administración de la máquina a la que conectamos y en la administración de sistemas, apenas se usan las X cuando se establecen conexiones remotas (cuando de sistemas Unix/Linux se trata, para los windowseros, esto les sonará a chino...). Aparte de las conexiones seguras a otras máquinas, SSH nos permite la copia de datos también de forma segura, bien ficheros sueltos, bien simulando sesiones de FTP por supuesto, cifradas. También se puede tunelizar el tráfico de datos a otras aplicaciones, así como gestionar claves RSA para que la conexión con las máquinas remotas sea más sencillo.

SSH en su implementación y funcionamiento es muy parecido a telnet, pero aparte de las ventajas expuestas unas líneas más arriba, la principal característica de SSH es el cifrado y tunelización de la información que viaja de la máquina cliente al servidor y viceversa que hace que los datos sean ilegibles para una tercera persona que estuviese a la "escucha" o snifando nuestras comunicaciones. Tampoco vayamos a pensar que SSH es la solución a todos nuestros males informáticamente hablando, ya que es posible y así ha quedado demostrado en no pocas ocasiones realizar ataques sobre el protocolo SSH y cuya técnica más conocida son los "ataques de Replay", aunque esto es harina de otro costal y materia para otro post.

Montar un servidor SSH es tarea relativamente sencilla para las labores básicas que cualquier usuario medio puede llevar a cabo, aunque como todo en el mundo de la seguridad informática se puede complicar tanto como deseemos. Yo voy a hablar del servidor SSH que tengo montado, el cual me está dando unos resultados muy satisfactorios con muy pocos quebraderos de cabeza. Se trata de OpenSSH, inicialmente implementado para infraestructuras BSD y liberado no hace muchos años. De hecho, está publicado bajo licencia BSD y no GPL como mucha gente piensa. Aparte de la versión servidor de OpenSSH, tenemos la versión cliente, de la cual no tengo tampoco ningún tipo de queja. Instalarlo no supone ningún problema ya que con un "sudo apt-get install openssh-server" en cualquier distribución con base Debian (ubuntu en mi caso) tenemos instalado el servidor de SSH. Para probarlo en local no tenemos más que teclear en consola "ssh 127.0.0.1" comprobar el correcto funcionamiento. La primera vez que establezcamos una conexión nos pedirá que aceptemos un mensaje para que se guarde la entrada de la clave RSA en la home del usuario que establezca la conexión y así no tener que teclear el chorro de números y letras que se genera cada vez que nos conectemos remotamente. Así, ya tenemos nuestros servidor SSH correctamente funcionando. Para acceder desde fuera de nuestra red, es decir, desde cualquier lugar mediante nuestra IP pública, no nos quedará más remedio que redireccionar todo el tráfico que entre por el puerto 22 (puerto de SSH) de nuestro router a la máquina en la que esté corriendo el servidor. Para tareas de administración del servidor SSH, nos tendremos que ir a la ruta /etc/ssh donde se encuentran todos los ficheros de configuración.

Como he dicho anteriormente, para sistemas Linux recomiendo el cliente OpenSSH-client ("sudo apt-get install openssh-client" desde una consola de ubuntu) el cual nos permitirá la conexión remota al servidor, así como una larga lista de utilidades, entre las que se encuentra la transferencia de ficheros de manera cifrada, mucho más segura que por ejemplo FTP. Si la conexión al servidor SSH la tenemos que realizar con un sistema operativo de Microsoft, la alternativa más efectiva es usar la aplicación PuTTY, un cliente de Telnet/SSH completamente gratuito y que además lleva incorporado un emulador de terminal xterm con lo cuál parece que realmente estamos trabajando en una consola Unix/Linux. Para descargarlo ya sabéis "download PuTTY" en Google y para abajo...