Gestionando equipos remotamente por medio de SSH

SSH es un protocolo de administración remota que permite ejecutar comandos en un equipo sin la necesidad de estar físicamente con el mismo, nos ofrece mayor seguridad frente a telnet dado que encripta la comunicación con un sistema de clave publica y privada, para evitar ataques man in the middle.

El paquete a instalar para prestar este servicio es openssh-server

Para configurar nuestro servidor SSH, podemos acceder al fichero /etc/ssh/sshd_config , e ingresar los siguientes parámetros:

Por defecto el puerto configurado en todos los servidores SSH es el 22, lo cual sería recomendable de cambiar para que no sea tan trivial el acceso a nuestro servidor (con esto evitamos las pruebas automatizadas).

El puerto a utilizar será 9021 por lo tanto la propiedad utilizada será:

Port 9021

El siguiente paso a realizar será evitar el acceso como root, esto se hace con la siguiente propiedad:

PermitRootLogin no

Luego tenemos otras configuraciones que pueden resultar útiles para maximizar la seguridad:

LoginGraceTime 15

Esta propiedad nos permite dar un tiempo máximo de 15 segundos al usuario para que ingrese su usuario y contraseña, evitando así que estén intentando ejecutar algún script, o probando posibles contraseñas.

MaxAuthTries 3

Este parámetro nos permite setear el máximo de intentos fallidos de login antes de cortar la conexión con el servidor.

AllowUsers filenotfound

Esta propiedad nos permite configurar una lista blanca de los usuarios que podrán ingresar, todo usuario que no este en esta lista, no podrá conectarse.

En caso de poner mas de uno simplemente van separados por espacios.

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile %h/.ssh/authorized_keys

Este conjunto de propiedades nos permite usar autenticación con llaves SSH para fortificar el inicio de sesión, y que el mismo no dependa de solo conocer la password de usuario, más adelante en este artículo se trata más detalladamente el tema.

Puede existir alguna propiedad más para configurar el server ssh, yo configure las más importantes y necesarias.

Una vez configurado el servicio dado que le cambiamos el puerto por defecto, deberemos reiniciarlo con:

service ssh restart

El servicio ya esta configurado por defecto para que inicie al bootear el equipo.

Para conectarnos por SSH al servidor configurado lo que debemos hacer es abrir la terminal desde otro equipo, y ejecutar un comando con la siguiente sintaxis:

ssh filenotfound@192.168.0.90

Como fortalecer la seguridad de nuestra autenticación SSH

Además de todos los parámetros configurables que vimos anteriormente, existe la forma de fortalecer la autenticación en nuestro servidor mas allá de la password de usuario.

Supongamos que tenemos el siguiente esquema:

Equipo A (cliente SSH) >>>>>> Equipo B (server SSH)

Nos queremos conectar desde el equipo A al B, para lo cual además de autenticarnos con una password también necesitamos validar que el host al que nos conectamos es el que deseamos (evitando así un posible ataque de Man in the Middle).

Para autenticar el host, lo que debemos hacer es generar un par de claves (publica y privada) en el server ssh, las cuales son creadas por medio de un algoritmo que solo el kernel puede entender, por lo cual deberemos ejecutar el siguiente comando en el servidor:

ssh-keygen

En este caso el archivo que debemos trasladar a los clientes es /home/filenotfound/Escritorio/clave.pub

Lo ideal seria evitar trasladar este archivo por ssh, para mayor seguridad (se podría usar FTP, o simplemente usando una unidad extraíble en el server).

Pero como es un caso de prueba simplemente lo que haremos es lo siguiente:

ssh-copy-id filenotfound@192.168.0.90 -f

Tal que filenotfound es el usuario y la ip es el servidor SSH al que queremos llegar.

A continuación respondemos que si, y continuamos.

Ahora la clave de nuestro equipo B esta en el equipo A. Lo podemos verificar viendo que ahora hay contenido (específicamente una clave) en /home/[USER]/.ssh/known_hosts en el cliente.

Nosotros podemos conectarnos a equipos con autenticidad no establecida (es decir de los cuales no conocemos la llave), la idea es tener la llave de todos los equipos a los que nos conectamos habitualmente a realizar mantenimiento para evitar este riesgo.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *