SSH
SSH (Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red, ya sea local o pública. Permite manejar por completo el ordenador mediante un intérprete de comandos, y también puede redirigir el tráfico de aplicaciones gráficas si tenemos un Servidor X (en sistemas tipo Unix y Windows) corriendo.
Contenido
Seguridad
SSH funciona de manera similar a Telnet con la diferencia de que aquí la información viaja cifrada, lo cual hace inútil la intercepción de un paquete al ser éste ilegible.
Además de conectarnos a otros dispositivos para manejarlos remotamente, SSH también nos permite crear túneles seguros a través de los cuales podemos redirigir tráfico, o enviar y recibir ficheros de forma totalmente segura, fiable y simple gracias a su gestión de claves RSA, como si se tratase de un servidor FTP.
Por lo tanto, podemos concluir que la seguridad está presente en todo momento.
Tunneling
Por lo general, los protocolos envían sus datos «en claro» (sin encriptar), por lo que cualquier persona con acceso físico a nuestra red y un sniffer (programa de captura de tramas de red) es capaz de interceptar nuestros paquetes y verlos libremente. Si tenemos información sensible en circulación, la seguridad estará seriamente comprometida, obviando usuarios y contraseñas como en los casos de Telnet o
El tunneling nos permitirá salvar este problema fácilmente sin dejar de usar los protocolos que necesitemos. Esta técnica consiste en abrir conexiones entre dos máquinas por medio de un protocolo seguro, como puede ser el SSH, a través de las cuales realizaremos las transferencias inseguras, que pasarán de este modo a ser seguras.
Aplicaciones SSH
Resumiendo, las principales aplicaciones del SSH que en esta página se van a explicar son:
- Redirigir el tráfico de algunos puertos, por ejemplo de un cliente de correo (Thunderbird). Es decir, encriptar nuestras conexiones para evitar miradas «ajenas» gracias a que creamos un túnel seguro entre el puerto del servidor de correo (ej. 110) y uno local (ej. 1110).
- Saltarse un cortafuegos.
- Enviar y descargar archivos de manera segura.
- Acceso total a una computadora remota por Terminal.
Todo lo vamos a hacer desde el punto de vista de una distribución Linux, en nuestro caso y por ser la más extendida a nivel de usuario, Ubuntu.
Instalando y Configurando SSH
Abrimos un terminal de Ubuntu y escribimos:
sudo aptitude install openssh-server
Seguidamente, pasamos a configurar nuestro servidor ya instalado. Para ello usaremos el editor de textos nano, aunque también podríamos usar gedit o vim:
sudo nano /etc/ssh/sshd_config
Claves para aumentar la seguridad de nuestro servidor:
- Cambiar el puerto estándar de conexión (22) a otro cualquiera para evitar ataques es una buena forma de permanecer invisibles a los molestos bots que, a pesar de no representar una amenaza sin tener nuestra contraseña de acceso, es mejor evitar. Para ello, en la quinta línea, cambiamos el puerto a, por ejemplo:
Port 443 (Estándar HTTPS)
- No permitir el logueo como Root es algo básico y esencial para la seguridad de nuestro sistema. Así que buscamos la línea siguiente y cambiamos el valor de "yes" a "no":
PermitRootLogin no
- Imponer un número máximo de intentos fallidos de autentificación es una buena estrategia, sobre todo si nuestro servidor está escuchando en una red pública. De ésta forma podremos evitar que un posible atacante intente averiguar una contraseña por un método de fuerza bruta. En este caso, crearemos una nueva instrucción dentro del archivo, de la siguiente forma:
MaxAuthTries 2 (si fallamos dos veces la contraseña, el servidor nos desconecta y hay que volver a establecer la conexión)
- Definir exactamente quién puede o no acceder a nuestro servidor puede ser útil especialmente si trabajamos a nivel local, aunque es extensible a la red externa. Para ello, basta con configurar los archivos hosts.allow (permitir) y hosts.deny (denegar) añadiendo las IP's que nos interese administrar (un buen paranoico, denegaría todas las conexiones y configuraría solo las que fueran absolutamente necesarias):
sudo nano /etc/hosts.allow
sudo nano /etc/hosts.deny
Arranque y parada del servidor
- Arrancar el servidor SSH:
sudo service ssh start
- Detener el servicio:
sudo service ssh stop
- Reiniciar el servicio:
sudo service ssh restart
Clientes DNS
Si tenemos intención de usar nuestro servidor SSH externamente a nuestra red local, necesitaremos un cliente DNS que nos permita olvidar nuestra dirección IP; más aún en el caso de ser dinámica, y sustituirla por un nombre de dominio.
Aquí vamos a trabajar con dos servicios distintos y gratuitos: No-IP.com y DynDNS.com
No-IP
Nos registramos en su página web, y cuando hayamos accedido al menú principal, clickeamos en Add a Host.
Seguidamente, escribiremos el nombre que le queramos dar al host, que irá seguido de un subdominio obligatorio que nos impone No-IP, aunque podremos elegir entre varios.
- El «Host Type» ha de ser siempre «DNS Host (A)» No debemos rellenar nada más, así que pulsamos en Create Host.
Una vez hecho esto, instalaremos el programa cliente en nuestro ordenador, que mandará periódicamente a nuestro dominio de No-IP la dirección IP que tengamos en ese momento.
sudo apt-get install noip2
Durante la instalación, el programa nos hará preguntas para configurarse. No obstante, podremos reconfigurarlo sin problemas si algo ha ido mal con la siguiente instrucción:
sudo noip2 -C
Por último, solo nos queda por saber las instrucciones para arrancar, parar y reiniciar el servicio. Cabe decir que este servicio, al igual que el propio SSH, arrancará automáticamente con el ordenador una vez instalado.
- Arrancar el cliente noip2:
sudo service noip2 start
- Detener el servicio:
sudo service noip2 stop
- Reiniciar el servicio:
sudo service noip2 restart
DynDNS
Nos registramos en su página web, y cuando hayamos accedido al menú principal, clickeamos en Add Host Services. Seguidamente, escribiremos el nombre que le queramos dar al host, que irá seguido de un subdominio obligatorio que nos impone DynDNS, aunque podremos elegir entre varios.
- El «Service Type» ha de ser siempre «Host with IP adress».
- En el apartado IP Adress, pinchamos donde veamos nuestra IP y finalmente en Add to Cart.
Una vez hecho esto, instalaremos el programa cliente en nuestro ordenador, que mandará periódicamente a nuestro dominio de DynDNS la dirección IP que tengamos en ese momento.
sudo apt-get install ddclient
Durante la instalación, el programa nos hará preguntas para configurarse. No obstante, podremos reconfigurarlo sin problemas si algo ha ido mal con la siguiente instrucción:
sudo dpkg-reconfigure ddclient
Si usamos ddclient, solo tendremos la opción de reiniciar el servicio, ni arrancarlo ni pararlo, y lo haremos de la siguiente forma:
sudo service ddclient restart
Notas
- No olvidar nunca abrir correctamente el puerto que vayamos a usar en el SSH tanto en nuestro router como en el cortafuegos.
- Los servicios de No-Ip y DynDNS nos enviarán aproximadamente cada sesenta días un e-mail pidiéndonos que confirmemos que queremos mantener nuestros dominos activos (al usarlos como SSH no se registran visitas a los mismos y por lo tanto parece que están inactivos)
Accediendo remotamente
Lo más básico de todo consiste en realizar una conexión simple que nos permita acceder y loguearnos remotamente a nuestro ordenador con el servidor SSH ya activo. Para ello, abrimos un terminal y tecleamos:
ssh -p puerto usuario@host
Si el puerto es el 22 (por defecto) podemos omitir la opción -p. Un ejemplo práctico del comando anterior:
ssh -p 443 fernando@micasa.dyndns.org
Con esta simple instrucción, automáticamente el terminal pasará a tener nuestro usuario y equipo, y podremos usarlo como si estuviésemos en nuestro propio PC: instalar programas, eliminar archivos, reiniciar el sistema...
Una buena forma, cómoda y rápida de traspasar archivos entre el servidor y el ordenador utilizado en ese momento, es el programa FileZilla (libre y en los repositorios de Ubuntu), que nos permite conectarnos del mismo modo que si fuese una conexión FTP.
Se puede comprobar en la captura de la derecha cómo configurar correctamente el programa para acceder a nuestro sistema remotamente.
Si lo que buscamos es redireccionar puertos para aumentar la seguridad en nuestras conexiones Web o SMPT (encriptándolas), o sencillamente saltarnos un cortafuegos, podremos hacerlo de dos formas:
- Redireccionamiento estático
- Redireccionamiento dinámico
Redireccionamiento estático
Este tipo de redireccionamiento nos permite conectarnos a UN puerto de UN servidor, a través de un puerto local que le ordenemos. Especialmente útil para clientes de correo por ejemplo, como se ha dicho anteriormente.
La sintaxis es la siguiente:
ssh -L puerto.local:servidor:puerto.remoto usuario@host
Un ejemplo práctico, en el caso de querer conectarnos a Gmail por ejemplo:
ssh -L 10993:imap.googlemail.com:993 fernando@micasa.dyndns.org
Lo que estamos haciendo con la sintaxis anterior es decirle al ordenador: «cuando me conecte en local al puerto 10993 (debemos poner siempre un valor por encima de 1024, que son los puertos reservados), quiero que me devuelvas la información que hay en imap.googlemail.com por el puerto 993 a través del servidor de SSH fernando@micasa.dyndns.org»
Seguidamente, debemos configurar nuestra cuenta de Thunderbird por ejemplo, tal y como aparece en la captura de la derecha (en Editar → Configuración de las cuentas).
Redireccionamiento dinámico
Enlaces externos
- Sitio Oficial de OpenSSH (en inglés)
- Seguridad de Debian Sitio oficial. (en inglés)
- Guía documentada para Ubuntu (en español)
- Securing the connection between MySQL and MySQL Administrator using an SSH tunnel Crear un túnel SSH al servidor MySQL. (en inglés)
- Cliente SSH en un sitio web (en inglés)
- SSH y SCP sin contraseña (en español)