Esta página forma parte de la guía: Configuración básica de un servidor dedicado, VPS o cloud basado en Linux.
El primer paso que debemos dar es asegurar el acceso por SSH, para ello, eliminaremos la pregunta de clave y echaremos mano de las claves pública y privada. A partir de ahora, deberemos generar una nueva clave para cada ordenador desde el que queramos conectar. Esto nos proporcionará comodidad a nosotros, y seguridad, entre otras cosas porque ese fichero es mucho más grande que cualquier clave normal que podamos tener en ese servidor.
Contents
Generar claves pública y privada
Todo esto se hará en nuestro ordenador local.
Aunque la versión 2 de SSH permite la generación de varios tipos de clave, RSA, DSA y ECDSA, no existe ninguna forma fiable de comparar estos tres algoritmos y determinar cuál es mejor, hay un gran debate sobre el tema. Tal vez entre DSA y ECDSA podamos quedarnos con el segundo, puesto que claves más pequeñas nos brindan la misma seguridad que DSA, y también es algo más rápido; pero a la hora de elegir la longitud de clave, entre DSA y RSA, para SSH DSA está limitado a 1024bits mientras que RSA no.
Aunque una clave de 2048bit se considera segura, generaremos una clave RSA de 4096bit:
$ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in wich to save the key (/home/cloud/.ssh/id_rsa): Enter passphase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/cloud/.ssh/id_rsa. Your public key has been saved in /home/cloud/.ssh/id_rsa.pub The fingerprint is ...
En este paso, nos pregunta una clave, por si queremos algo más de seguridad, en este caso, lo podemos dejar sin clave, ya que para poder acceder necesitamos uno de los archivos generados.
Cuando terminamos encontramos en nuestro directorio $HOME/.ssh/ dos archivos nuevos id_rsa e id_rsa.pub (en el proceso de creación nos pregunta el nombre que le queremos dar al archivo).
Copiar la identificación al servidor
Ahora debemos transferir el archivo al servidor, para ello, si tenemos acceso por ssh con contraseña, por ahora, podemos hacer lo siguiente:
$ ssh-copy-id usuario@servidor
Si nuestro archivo no se llama id_rsa.pub , debemos hacer:
$ ssh-copy-id -i archivo_de_identidad usuario@servidor
Si por el contrario no disponemos ahora mismo de acceso (lo que podrá ocurrir en el futuro), o no disponemos de ssh-copy-id, debemos adjuntar nuestra clave pública al archivo $HOME/.ssh/authorized_keys ; es decir, imaginemos que copiamos el archivo id_rsa.pub en /home/cloud/tmp/, entonces:
cloud $ cat ~/tmp/id_rsa.pub >> ~/.ssh/authorized_keys
De este modo, todas las claves autorizadas para este usuario se adjuntarán en el mismo archivo.
Más máquinas autorizadas
Podemos repetir libremente este proceso si deseamos poder entrar en este servidor desde otra máquina, sólo tenemos que tener cuidado de no borrar el archivo authorized_keys, por lo que es recomendable hacer un backup periódico del archivo.
Otras configuraciones para el servidor SSH
Estos cambios, se harán en el archivo /etc/ssh/sshd_config de nuestro servidor remoto.
Desactivar identificación con password
Puede que estemos permitiendo las dos autentificaciones, por lo que debemos desactivar la autentificación con contraseña, por lo tanto debemos modificar la línea que dice:
PasswordAuthentication yes
y poner en su lugar:
PasswordAuthentication no
Puede que la primera línea no la encontremos, o esté comentada (con # delante), entonces debemos añadir la línea que vemos en segundo lugar.
Asegurarnos de que no podemos entrar como root:
Para ello, la línea que dice:
PermitRootLogin yes
debe decir:
PermitRootLogin no
Definir los usuarios permitidos por el sistema:
Puede que no nos interese que todos los usuarios de nuestro sistema puedan entrar por ssh, para ello, podemos definir dos argumentos más en el fichero:
AllowUsers pedro andres jacinto
o
DenyUsers alex guest
El primero permitiría usuarios como pedro, andres y jacinto entrar al sistema, y sólo estos, aunque puede que para describir el acceso a nuestro sistema sea más fácil decir qué usuarios no pueden entrar, para ello, podemos utilizar el segundo caso.
Pantalla de entrada al login
Podemos, además, proporcionar una pantalla de entrada a los usuarios que se conecten, podemos hacerlo de dos formas, poniendo un texto estático, o uno dinámico:
Texto estático
Para ello, editamos, en el servidor /etc/ssh/sshd_conf y añadimos, si no está, la línea:
Banner /etc/issue.net
A continuación, editamos el archivo /etc/issue.net añadiendo el texto que queramos mostrar.
Texto dinámico
Para añadir un texto dinámico podemos aprovechar el mensaje del día (Message Of The Day) o MOTD, en muchas distribuciones modernas, encontraremos en /etc la carpeta update-motd.d dentro de la cual podemos añadir bash scripts que nos permitirán añadir un mensaje personalizado al usuario que acaba de hacer login, tanto local como remoto.
Solución de algunos problemas comunes
Puede que no se puedan leer bien las claves a la hora de acceder a nuestro sistema, para ello debemos asegurarnos que, tanto en local como en remoto, el permiso del directorio $HOME/.ssh es 0700, es decir, lectura, escritura y ejecución sólo para el dueño. Para ello:
$ chmod 0700 ~/.ssh
Pingback: Consejos para endurecer un servidor SSH y hacerlo más seguro - Poesía Binaria