Una medida de seguridad para conectarnos a nuestros servidores vía SSH es deshabilitar la autenticación con password y usar claves públicas con key passphrase.
De esta forma evitamos intentos de login por fuerza bruta, ya que es necesario conseguir la clave privada para poder acceder con éxito a nuestro servidor.
Tabla de contenidos
Escenario
En nuestro caso nos encontramos ante el siguiente escenario:
- Equipo origen con Windows y Putty instalados.
- Servidor destino con Debian y OpenSSH instalados.
Generar las claves pública y privada
Generamos las claves pública y privada desde Putty con la aplicación Puttygen pulsando la tecla Generate, la cual ya viene en la instalación inicial:
Guardamos la clave pública pulsando el botón Save public key indicando como nombre un archivo con extensión .pub.
Luego indicamos la Key passphrase y guardamos la clave privada pulsando el botón Save private key.
Almacenamos ambos archivos en un lugar seguro, para usarlo en cualquier equipo desde donde queramos conectarnos.
Servidor destino
En el servidor destino ejecutamos los siguientes pasos:
Crear el usuario
Creamos el usuario:
adduser pruebas --disabled-password
Si la versión de Debian no nos permite usar la opción –disabled-password le deshabilitamos la contraseña con el comando:
passwd -u pruebas
-u --unlock
desbloquea la contraseña de la cuenta indicada
Almacenar la clave pública en host destino
Creamos el directorio .ssh en el home del usuario creado y le cambiamos los permisos:
su pruebas cd /home/pruebas/ mkdir .ssh chmod 700 .ssh cd .ssh
IMPORTANTE!!!, el propietario del directorio y todo su contenido ha de ser el mismo usuario, tanto para el usuario como para el grupo.
Ahora creamos el archivo authorized_keys2 y copiamos la clave pública en una línea, teniendo en cuenta:
-
No agregar el email al final de la línea.
-
No agregar las líneas BEGIN PUBLIC KEY o END PUBLIC KEY.
-
No agregar la línea rsa-key-20200103, o la numeración que tenga.
-
Comenzar la línea con ssh-rsa.
Por ejemplo:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjZ...9kWsZKQ==
Cambiamos los permisos del archivo creado:
chmod 600 authorized_keys2 chown pruebas: authorized_keys2
Configurar OpenSSH
RECOMENDACIÓN, la idea es eliminar el acceso por contraseña, pero antes de aventurarse a deshabilitar esta opción recomiendo no hacerlo para confirmar que el acceso con clave pública funciona. Esta opción sería PasswordAuthentication y le indicamos yes o no para habilitar o deshabilitarla respectivamente.
Configuramos el OpenSSH para conectarse sin contraseña y usando las claves almacenamos en el archivo creado en un apartado anterior.
Hacemos un backup del archivo de configuración de OpenSSH:
cd /etc/ssh/ cp sshd_config sshd_config.orig
Ahora lo editamos y cambiamos la siguiente configuración con tu editor favorito:
nano sshd_config
... # Authentication: LoginGraceTime 120 PermitRootLogin no StrictModes yes ... RSAAuthentication yes ##PubkeyAuthentication no PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys2 ... PasswordAuthentication no ... UseDNS no
Reiniciamos el servicio:
systemctl restart sshd
Acceso desde Putty
Podemos conectarnos con la clave privada que tenemos de dos maneras distintas:
-
Usando el agente de autenticación de Putty.
-
Indicando el certificado al crear la conexión al servidor desde Putty, y a su vez la key passphrase.
Agregar la clave privada al agente de autenticación de Putty
Iniciamos el agente de autenticación de Putty ejecutando el programa PAGEANT.EXE.
Aparece el siguiente icono en el panel derecho de los programas iniciados. Le damos con el botón derecho encima de este y seleccionamos la opción Add Key:
Seleccionamos la clave privada almacenada e indicamos la key Passphrase escogida cuando almacenamos la clave.
Este programa funciona como un almacén de Passphrase.
Ahora para acceder al servidor desde Putty usamos la siguiente configuración:
En donde X.X.X.X corresponde a la IP del servidor al cual nos queremos conectar y 22 el puerto SSH por defecto, o indicamos el que tenemos configurado en nuestro servidor destino si no usamos el puerto estándar.
Guardamos la configuración realizada indicándole un nombre, en mi caso Strato-2-CERT.
Putty usará la clave privada que hemos cargado con PAGEANT.EXE y ya no será necesario usar contraseñas para el acceso al servidor.
IMPORTANTE Cada vez que iniciemos sesión en el equipo necesitamos ejecutar este apartado, agregando la clave privada antes de conectarnos.
Indicar la clave privada a los datos de conexión
Si no queremos usar el agente de autenticación de Putty podemos indicar el certificado directamente desde la configuración de nuestro servidor destino, tal y como se indicó anteriormente. La única diferencia es que nos pedirá la key passphrase cada vez que nos conectemos. Esta es la opción que recomendamos para establecer una conexión SSH remota.
Configuramos el servidor destino, indicando el usuario, ip destino y puerto SSH en el que esté escuchando.
En donde X.X.X.X corresponde a la IP del servidor al cual nos queremos conectar y 22 el puerto SSH por defecto, o indicamos el que tenemos configurado en nuestro servidor destino si no usamos el puerto estándar.
Ahora indicamos la clave privada en la sección Connection -> SSH -> Auth y seleccionamos el archivo .ppk con la clave privada generada.
Para finalizar guardamos la configuración realizada indicándole un nombre, en mi caso Strato-2-CERT.
Ahora cada vez que nos conectemos nos pedirá la key passphrase, ofreciendo un nivel de seguridad máximo a la hora de conectarnos remotamente a nuestro servidor SSH.
Opcional
Elevar usuario a root
Opcionalmente podemos crear un acceso a root para el usuario creado, editando el visudo como usuario administrador:
root@h2847530:/# visudo
Y agregamos la siguiente línea:
... pruebas ALL=(ALL) ALL ...
Ahora una vez accedemos al servidor con escribir sudo su
nos pedirá la credencial y podremos elevarnos como root.
Si no queremos agregar la credencial debemos de agregar la línea con el siguiente formato:
... pruebas ALL=(ALL) NOPASSWD: ALL ...
Manual de instalación en Howtoforge