Configurar VPS con Hetzner

2024–12–21

Esta es una guía rapida para configurar un Servidor Privado Virtual (VPS) en Hetzner Cloud .

El post cubre todo lo basico, desde la creación de un servidor, la configuración del acceso por SSH, la configuración de cortafuegos, la gestión de usuarios y tambien aplicar medidas para garantizar la seguridad minima y estabilidad del servidor.

Para esta guia usaremos un servidor con AlmaLinux 9.5.

Hetzner Cloud panel

Configurar SSH

Generar una clave ssh desde la terminal

Ejecutar estos dos comandos y siga los pasos . Es recomentable asegurar las llaves con una contraseña robusta .

$ cd ~/.ssh
$ ssh-keygen -t ed25519

Añadir SSH llave publica en el Cloud panel

Para ver la llave publica que hemos creado ejecutamos el siguente comando:

$ cat ~/.ssh/ed25519.pub

Copiamos el contenido de la clave publica, añadimos y guardamos.

Conectamos al servidor via SSH

$ ssh root@<server-ip>

Nos va a pedir la contraseña para la llave que hemos creado .

Actualizar el servidor

Ejecutamos siguentes comandos:

# dnf update

Medidas de seguridad

En este apartado trataremos de configurar las medidas de seguridad para que el servidor sea lo mas seguro posible:

Asegurar acceso al servidor con SSH

Para ello, modificamos el archivo de configuración del servicio con un editor de texto de su elección (nano utilizado en este ejemplo):

# nano /etc/ssh/sshd_config

Desactivar acceso con root

Encontramos la linia “PermitRootLogin” y cambiamos a “no” .

Desactivar inicio con contraseña

Encontramos la linia “PasswordAuthentication” y cambiamos a “no” . Tambien como en noestro caso vamos a utilizar llave publica para conectar, tenemos que buscar la linia “PubkeyAuthentication” y cambiar la a “yes” .

Ejemplo:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Reiniciar el servicio SSH

# systemctl daemon-reload
# systemctl restart sshd.service

Crear un usuario no root con privilegios sudo

Debemos de sustituir <username> con el nombre del usuario que vamos a crear .

# adduser <username>
# passwd <username>
# echo "<username> ALL=(ALL) ALL" >> /etc/sudoers

Creamos el directorio para ssh en el $HOME del nuevo usuario y el archivo authorized_keys donde vamos a copiar noestra clave publica .

# su -l <username>
$ mkdir ~/.ssh
$ nano ~/.ssh/authorized_keys

A partir de ahora vamos a conectarnos con el usuario que hemos creado y dejaremos de hacer lo con “root” .

Para aceder al servidor, ejecutamos.

$ ssh <username>@<server-ip>

Configurar cortafuegos

Utilizaremos “firewalld” para gestionar las reglas del cortafuegos.

Por defecto firewalld viene instalado y ejecutado, podemos comprobar asi:

$ sudo firewall-cmd --state

Por defecto, AlmaLinux usa la zona publica, y se deniega la mayor parte del tráfico entrante. Tambien el acceso por ssh/port 22 viene activado.

Puede comprobar los servicios activados, ejecutando:

$ sudo firewall-cmd --zone=public --list-services --permanent

Instalar y configurar Fail2ban

Para proteger el servidor de intentos de inicio de session utilizando SSH con ataques de fuerza bruta, utilizaremos Fail2ban el que baneará las IPs que muestren signos o intentos maliciosos.

Ejecutamos:

$ sudo dnf config-manager --set-enabled crb
$ sudo dnf install epel-release
$ sudo dnf update
$ sudo dnf install fail2ban

Ahora configuramos las reglas:

$ sudo nano /etc/fail2ban/jail.local

Ponemos el seguiente contenido .

[DEFAULT]
bantime = 1d
findtime = 15m
maxretry = 3
backend = auto

[sshd]
enabled = true
port    = ssh

Una vez configurado el archivo, tenemos que habilitar el servicio para que ejecute cada vez que reiniciamos el servidor .

$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban

Ahora cada vez que se detecta 3 intentos maliciosos en rango de 15 minutos, el IP del atacante sera bloqueda por 1 dia . Puede jugar con los perimetros y adaptarlos como quieren .

Para ver los IP que se han bloqueado .

$ sudo fail2ban-client status sshd

Configurar actualizaciones automaticas

$ sudo dnf install dnf-automatic

Editamos el archivo:

$ sudo nano /etc/dnf/automatic.conf
apply_updates = yes

Despues ejecutar:

$ sudo systemctl enable --now dnf-automatic.timer

Activar Selinux

Ejecutamos:

$ sudo setenforce 1

Copias de seguridad

Desde Hetzner cloud panel.

Buenas practicas