Una de las primeras cosas que deberías hacer nada más empezar con Hetzner y crear un nuevo servidor, es quitar el acceso root mediante password y crear una SSH Key para entrar a tu instancia mediante SSH. Es mucho más seguro, sobre todo si usas el estándar ed25519 (más nuevo y seguro). Esto lo puedes hacer tanto en Hetzner como en cualquier otro proveedor de hosting, por ejemplo Linode/Akamai.
En principio, todo esto lo puedes realizar en ordenadores con SO macOS o Linux de manera inmediata. En Windows puedes generar las claves con un programa como PuTTY o puedes instalar OpenSSH antes de iniciar el proceso.
Creas una clave SSH Key en tu ordenador
Tienes que crear una cale SSH en tu ordenador, normalmente en la línea de comandos, aunque yo lo hago en 1Password por comodidad en la gestión de claves. Si tienes acceso a una Terminal en tu ordenador, solo tienes que poner lo siguiente:
ssh-keygen -t ed25519 -C "comentario sobre que es y para que sirve"
Te pedirá después dónde quieres guardar la clave. Puedes dejar la ruta predeterminada en /home/usuario/.ssh si pulsas enter, pero también puedes elegir otra ruta para luego no liarte si quieres ir añadiendo más claves SSH. Puedes poner otra carpeta: /home/usuario/.ssh/servidorhetzner. En mi caso, en un portátil con macOS, será algo como: /Users/usuario/servidorhetzner, y en caso de no elegir la ruta, se guardará en /Users/usuario/.ssh, cambiando en todos los casos, usuario por el nombre de tu usuario.
¿No es la primera clave de este tipo que generas en tu ordenador? Mucho cuidado, que puedes sobreescribir la que ya tienes. Puedes poner desde un principio un comando como el siguiente para crear la clave en otra localización:
ssh-keygen -t ed25519 -C "comentario sobre que es y para que sirve" -f /home/usuario/.ssh/servidorhetzner
Cómo yo lo hago en 1Password, me ahorro todos estos pasos, incluido el de crear una contraseña para esta clave SSH (ya está protegida con las claves de 1Password, y no sale de su bóveda). En tu caso, deberías de crear siempre una contraseña para tus claves SSH. Es imprescindible. Esta contraseña protegerá tu SSH Key y de que alguien pueda copiar esta clave. Al usar el comando anterior, te pedirá crear la contraseña. Hazlo.
Al terminar el proceso con este comando, vas a tener una clave pública id_ed25519.pub y una clave privada id_ed25519. La clave privada NUNCA se comparte, es solo para ti. La clave pública es la que vas a tener que subir a tu servidor en Hetzner.
Subes la clave pública a tu servidor Hetzner
Con el comando ssh-copy-id
Puedes hacerlo de varias maneras. Por ejemplo, puedes usar este comando desde el terminal de tu ordenador:
ssh-copy-id -i /home/usuario/.ssh/servidorhetzner/id_ed25519.pub usuario@ip-servidor
Sustituyendo usuario por el nombre de tu usuario y la dirección IP de tu servidor.
Accediendo mediante SSH
Pero también puedes acceder mediante SSH a tu servidor (con el usuario que quieras usar con la clave SSH):
ssh usuario@ip-servidor
Creamos el directorio .ssh y authorized_keys en la home del usuario y cambiamos permisos:
mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Editamos el archivo:
sudo vi ~/.ssh/authorized_keys
Insertamos la clave pública en este archivo copiando y pegando (pulsamos i para insertar en el editor vi). Tendra un aspecto como este ‘ssh-ed25519 numero_muy-largo‘. Luego salimos con pulsando eSC y damos a :wq!
Sin cerrar tu sesión actual puedes abrir una nueva con ese usuario y probar si funciona tu nueva clave SSH. Si todo funciona bien, ya puedes quitar el acceso a root en la configuración de SSH después de haber creado un usuario con permisos sudo.
Creas un nuevo usuario con permisos sudo en tu servidor
Puedes crear este nuevo usuario con estos comandos (lo he hecho en Rocky Linux. Sirve igual para CentOS, Fedora, Alma Linux, RHEL) Creamos el usuario y le damos un password (cambia usuario_ejemplo por el nombre que tú quieras). Son dos órdenes. Las realizó por separado para evitar confusiones:
useradd usuario_ejemplo
passwd usuario_ejemplo
Ahora tenemos que añadir este usuario al grupo wheel para que tenga privilegios sudo:
usermod -aG wheel usuario_ejemplo
Vale, ya tenemos creado el nuevo usuario y podemos entrar con él mediante SSH a nuestro servidor con un comando como este:
ssh usuario_ejemplo@tu_direccion_ip
Ahora, si todo funciona correctamente, puedes quitar el acceso root:
#Accedemos al servidor con usuario root
ssh root@tu_direccion_ip
#Editamos la configuración de SSH (Rocky Linux)
sudo vi /etc/ssh/sshd_config
#Cambio de yes a no y salgo del editor vi dando a ESC y poniendo, :wq!
PermitRootLogin no
#Reiniciamos el servidor SSH
systemctl restart sshd
Ya no deberías de poder acceder mediante root a tu servidor. Ahora lo tienes que hacer con el nuevo usuario y su recién creada clave SSH. Es importante que esa clave SSH sea copiada en la home de ese nuevo usuario, no en la home de root. También debes asegurarte que el directorio .ssh y authorized_keys de ese nuevo usuario tenga el propietario adecuado, es decir, el mismo y NO root (esto te puede pasar si has creado el archivo y el directorio con el usuario root).
Subes la clave pública al panel de control de Hetzner
También puedes subir tu clave pública al panel de control de Hetzner para que siempre que generes una nueva instancia, te dé la opción de acceder a ella mediante claves SSH. Esto lo vas a poder tanto cuando crees la nueva instancia del servidor o directamente en el Dashboard o en el menú de la izquierda en Security.
Le das a Add SSH Key y pones la clave pública que has generado antes en tu ordenador:
Puedes marcar que esta clave sea la que se te presente por defecto cuando vayas a crear una nueva instancia en Hetzner. Le das a guardar y listo. Esta clave será la que use tu usuario root en vez de un password al entrar mediante SSH a tu servidor.
¡Ojo! Si al crear una nueva instancia en Hetzner eliges usar esa clave SSH, Hezner no te va a mandar el password del usuario root por email. Siempre puedes generar un password para este usuario en el panel de control de Hetzner metiéndote en tu servidor en la pestaña Rescue:
Solo tienes que dar a Reset Root Password y listo: te saldrá en pantalla tu nuevo password.
Conclusión
Tu servidor ya está un poco más seguro con estos sencillos pasos. Ya tienes un nuevo usuario con permisos sudo, que accede al servidor mediante claves SSH.
¿Qué más cosas puedes instalar para mejorar la seguridad de tu servidor? Rkhunter (para buscar rootkit y malware), OSSEC (detección de intrusos), Maldet y ClamAV (malware y virus, sobre todo si tienes un servidor de correo. Virtualmin instala ClamAV por defecto), AIDE (herramienta de detección de intrusos basada en la verificación de la integridad de los archivos), Logwatch (resumen de los principales eventos de los logs del sistema) o activar las reglas de AUDITD (reglas de auditoría de tu servidor para controlar que pasa con detalle en él). Si tienes paciencia y buena mano, también puedes configurar SELinux.