Configurar VPS con Hetzner

2024–12–21

Esta es una guía completa 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 Ubuntu 24.04 LTS.

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

Anadir 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:

apt update && apt upgrade

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 ssh.service

Crear un usuario no root con privilegios sudo

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

adduser <username>
usermod -aG sudo <username>

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 “ufw” para gestionar las reglas del cortafuegos.

Ahora bien, denegaremos todo el tráfico de red entrante a menos que esté específicamente permitido por otras reglas. Esto es fundamental para asegurar su servidor permitiendo sólo el tráfico que usted permita explícitamente.

Necesita ejecutar este comando:

sudo ufw default deny incoming

A continuación, permitiremos todo el tráfico de red saliente. Esto permite al servidor comunicarse con otros servidores o servicios sin restricciones.

Ejecute este comando:

sudo ufw default allow outgoing

Permitir el acceso por SSH, puerto (22):

sudo ufw allow “OpenSSH”

Por ultimo, iniciamos el cortafuegos con las reglas que hemos creado .

sudo ufw enable

Para ver las reglas que hemos creado:

sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
OpenSSH/tcp                ALLOW IN    Anywhere
OpenSSH/tcp (v6)           ALLOW IN    Anywhere (v6)

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 apt 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
banaction = ufw

[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 de seguridad automaticas .

sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

Copias de seguridad

Desde Hetzner cloud panel.

Buenas practicas