SSH: Las cosas que no sabías

SSH es uno de los protocolos más utilizados en el ámbito de sistemas gracias su facilidad de uso y su increíble versatilidad a la hora de establecer conexiones entre máquinas. Pero el protocolo SSH no sólo vale para conectarse de una máquina a otra sino también para hacer ssh port forwarding, ssh port forwarding reverse, transferir archivos (SCP)… En este post daré unas pautas para securizar y optimizar el servidor SSH y explicaré algunas de las opciones mencionadas antes.

Para empezar, un poco de historia

SSH (Secure SHell), es un protocolo creado por Tatu Ylönen. En los inicios de SSH empezó siendo gratis hasta que el éxito de este fue notable y se decidió crear una empresa y hacerlo de pago para empresas y gratis para uso no comercial. Los desarrolladores de OpenSSH se dieron cuenta de que el protocolo SSH era una cosa necesaria para su sistema y ahí nació OpenSSH que es el programa que se utiliza a día de hoy.

Vale, y ahora… ¿qué es SSH?

SSH es un protocolo diseñado para crear conexiones seguras entre diferentes hosts, para esto, utiliza algoritmos de cifrado como RSA o DSA. Se puede decir que es el sustituto de telnet ya que es mucho más versátil y seguro. Este protocolo funciona bajo TCP y por defecto en el puerto 22. Con él, puedes conectarte tanto a la terminal de un host remoto como a su entorno gráfico y realizar las gestiones que uno quiera.

Empecemos por lo básico, como instalar y configurar un servidor SSH.

Para empezar instalarlo

  $ sudo aptitude install openssh-server

Luego, editar el fichero de configuración

  $ sudo vim /etc/ssh/sshd_config

Para securizarlo es recomendable realizar los siguientes cambios;

Cambiar el puerto 22 por otro, en este caso el 222

  Port 222

Asegurarse que el usuario root no se puede conectar a no ser que se tengan los certificados

  PermitRootLogin without-password

Evitar que el servidor haga consultas de registros inversos al DNS. Esto agiliza el proceso de conexión. Hay que añadirlo manualmente

   UseDNS No

Una vez hecho esto, guardar el archivo y reiniciar el servicio ssh

  $ sudo service ssh restart

Ahora nos podríamos conectar al host ejecutando el siguiente comando

  $ ssh <usuario>@<IP_host> -p 222

 

Como he mencionado antes, SSH no sólo vale pare hacer simples conexiones sino que puede llegar a mucho más. En este post explicaré un par de trucos que pueden sacar de un apuro a más de uno. Que son, hacer un SSH Port Forwarding y un SSH Port Forwarding reverse.

SSH Port Forwarding

Primero, ¿qué es un ssh port forwarding? Vamos a explicarlo con un ejemplo:

Imaginemos que nuestra empresa tiene varias sedes repartidas por todo el mundo y, desafortunadamente, no tenemos una VPN para conectarnos entre ellas. Además, por ejemplo, en la sede de Londres tenemos un equipo con un servicio web al que queremos acceder, pero al no tener VPN y estar en una red privada no tenemos manera de acceder a él directamente desde nuestra sede. Pero contamos con que tienen un equipo con una IP pública que podemos utilizar para hacer un salto y poder llegar al servicio web que necesitamos.
Es decir, la idea es poder abrir la página web de la sede de Londres haciendo un port forwarding desde el equipo de salto hacia nuestro equipo.

ismael2(5)

Hacer esto es muy sencillo, hay que ejecutar el siguiente comandos desde el equipo «Host_cliente»

  $ ssh -p222 <usuario>@80.68.95.2 -L localhost:8080:192.168.1.5:80

Una vez hecho esto, se puede ir a un navegador y escribir lo siguiente en la barra de direcciones (en este caso se ha utilizado el puerto 8080 local pero podría ser cualquier otro puerto libre)

http://localhost:8080

Y ya se podría acceder al servicio que está corriendo en «Host_Servicio«, aunque no tengamos conexión directa a el.

 

SSH Port Forwarding Reverse

Hacer un SSH port forwarding reverse en ciertos momentos también nos puede sacar de un apuro. Como en el caso de antes vamos a explicarlo con un ejemplo.
Vamos a imaginar que tenemos la misma estructura de antes, es decir, la sede de Londres y la nuestra que no están conectadas por VPN .Y como en el caso anterior queremos abrir una página web de Londres a la que no tenemos acceso porque está en una red privada. Pero contamos con un equipo en nuestra red que hace de router y tiene un IP pública pero por políticas de seguridad no podemos facilitar la pass de este a la sede de Londres por lo tanto el método que hemos utilizado antes no vale. Este equipo es el que se va a utilizar para poder abrir la página.
Resumiendo, el host con el servicio web va a hacer un port forwarding inverso contra el host de salto, pudiendo así abrir la página web desde el host cliente.

ismael2(4)

Primero, editar el archivo de configuración de SSH de «Host_de_salto«:

  $ sudo vim /etc/ssh/sshd_config

Y añadir lo siguiente. (Sin esto, el server solo escucharía en localhost) ¡Ojo, puede ser un fallo de seguridad!

 GatewayPorts clientspecified

Luego, guardar y reiniciar el servicio:

 $ sudo service ssh restart

Ahora desde el «Host_Servicio» crear el túnel inverso hacia el «Host_de_salto«:

$ [email protected] -R 80.68.95.2:8080:localhost:80

Una vez hecho esto, podríamos acceder a la página web desde «Host_Cliente» de la siguiente manera:

http://80.68.95.2:8080

 

Como se puede ver son 2 trucos muy sencillos de realizar y que pueden servir de gran ayuda en ciertos momentos. No está demás saber exprimir herramientas como SSH, ya que pueden valer para mucho más de lo que creemos.

To be continued….



¿Te gusta este post? Es solo un ejemplo de cómo podemos ayudar a tu empresa...
Sobre Ismael Chasco

Tenía proyectos que me harían rico y famoso... pero los guardé en Megaupload. Ahora trabajo en Irontec :)

1 Comentario

¿Por qué no comentas tú también?


  • […] Para nuestro entorno partiremos de la premisa de disponer de una instalación “limpia” de Debian 8 a la que disponemos de acceso root, bien sea por consola o por SSH (no pierdas la oportunidad de revisar este artículo de nuestro compañero Ismael Chasco sobre las cosas que, quizás, no sabías sobre SSH). […]

    Entorno "LAMP" con HTTP/2 y PHP7 mediante FPM | Blog Irontec Hace 8 años Responde


Queremos tu opinión :)