Pollito Blog
January 28, 2025

VPS 2: Let's setup

Posted on January 28, 2025  •  9 minutes  • 1902 words  • Other languages:  English

Esta es la segunda parte de mi VPS blog series .

Elige un proveedor de VPS

Al elegir un proveedor de VPS, descubrirás rápidamente que no faltan opciones. Sin embargo, tres nombres que encontrarás con frecuencia en reseñas, foros y recomendaciones son:

No hay ninguna opción “incorrecta” en este caso. Tu decisión debe depender de sus necesidades específicas, como el presupuesto, la ubicación del servidor, las expectativas de atención al cliente o los requisitos de escalabilidad.

Yo elegí Hostinger porque dos de mis creadores de contenido de programación favoritos lo usaron en el pasado.

Dreams of Code

Web Dev Cody

Elige un plan que se adapte a ti

Por cortesía de mi empleador actual Devsu , obtuve el plan KVM2 por un período de 2 años, que para los proyectos personales que tengo planificados, tiene capacidades técnicas bastante buenas.

hostinger-pricing

Puedes usar mi código de cupón de creador de contenido con descuento… No, no estoy patrocinado, aunque me gustaría (Hostinger, ¡llámame!)

Elige un sistema operativo

Después de obtener la instancia, se solicita elegir un sistema operativo. En esta serie de blogs usaremos Ubuntu 24.04, ya que es uno de los sistemas operativos más comunes al configurar un VPS.

hostinger-select-os

Por cierto, no uso Arch… btw. arch

En la siguiente pantalla, se ofrece un escáner de malware. Lo dejaremos habilitado, ya que parece ser liviano y gratuito. hostinger-malware-scanner

Configure contraseña y SSH

Después de elegir el sistema operativo, se solicita configurar una contraseña para el usuario root:

hostinger-password

Después de finalizar la configuración, hay que esperar unos minutos hasta que se inicie la instancia VPS. Luego, puedes probar el inicio de sesión a través de SSH.

ssh root@vps-instance-ip-address

Puedes encontrar la dirección IP de la instancia VPS en la pantalla “Overview -> VPS Information”.

hostinger-overview

Ya tenemos una VPS, ¿ahora qué?

Agregue una nueva cuenta de usuario

Por razones prácticas y de seguridad, no se recomienda trabajar directamente como usuario root en su VPS:

Por eso, crearemos una cuenta de usuario dedicada:

  1. Cree un nuevo usuario (por ejemplo, adduser pollito).
  2. Otorgue privilegios de sudo para tareas administrativas (usermod -aG sudo pollito).
  3. Pruebe que funciona cambiando al nuevo usuario (su - pollito) y ejecutando un comando sudo de prueba (sudo ls /)

Apunte un registro DNS al servidor (Obtener un dominio)

Para conectar la VPS a un nombre de dominio, se debe configurar los registros DNS. Puedes utilizar un dominio existente que poseas o comprar uno nuevo (Hostinger ofrece registro de dominio si prefieres una solución integral).

¿Cómo configurarlo?

  1. Prepara tu dominio

    • Inicie sesión en el panel de administración de DNS de su proveedor de dominio (por ejemplo, el panel de DNS de Hostinger).
    • Elimine todos los registros A o registros CNAME existentes vinculados al dominio raíz (@ o yourdomain.com) que se generaron automáticamente o que ya no son necesarios. Estos suelen apuntar a direcciones IP basura.
  2. Agregue un nuevo registro A

    • Cree un nuevo registro A para el dominio raíz (@ o yourdomain.com).
    • Establezca el campo valor o destino en la dirección IP pública de su VPS.
    • Guarde el registro.

    hostinger-dns

  3. Espere la propagación: Los cambios de DNS pueden tardar entre 24 y 48 horas en propagarse a nivel mundial. Puedes comprobar el progreso utilizando herramientas como dig yourdomain.com o ping yourdomain.com (una vez que se complete la propagación, debería resolver a la IP de tu VPS).

Nota: Evita agregar registros CNAME o A no relacionados para el dominio raíz durante este proceso, ya que pueden entrar en conflicto con su nueva configuración.

Fortalecer SSH

¿Por qué?

Los bots automatizados escanean constantemente Internet en busca de servidores SSH e intentan realizar ataques de fuerza bruta utilizando credenciales comunes.

ssh-bruteforcer Visualization from viz.greynoise.io

Incluso puedes verificar ahora mismo en tu VPS los intentos de inicio de sesión fallidos que se están produciendo ejecutando:

sudo grep "Failed password" /var/log/auth.log

Aquí hay un breve vistazo de mi auth.log, podemos ver una IP maliciosa que intenta ingresar por la fuerza bruta al VPS al intentar acceder por SSH como distintos usuarios comunes en distintos puertos.

2025-01-28T23:13:56.185011+00:00 srv705038 sshd[2491]: Failed password for invalid user admin from 51.20.5.208 port 44906 ssh2
2025-01-28T23:13:58.669177+00:00 srv705038 sshd[2493]: Failed password for invalid user admin from 51.20.5.208 port 44914 ssh2
2025-01-28T23:14:02.081755+00:00 srv705038 sshd[2495]: Failed password for invalid user admin from 51.20.5.208 port 44926 ssh2
2025-01-28T23:14:06.017747+00:00 srv705038 sshd[2497]: Failed password for invalid user admin from 51.20.5.208 port 44942 ssh2
2025-01-28T23:14:09.096008+00:00 srv705038 sshd[2499]: Failed password for invalid user admin from 51.20.5.208 port 43988 ssh2
2025-01-28T23:14:12.704576+00:00 srv705038 sshd[2501]: Failed password for invalid user admin from 51.20.5.208 port 44000 ssh2
2025-01-28T23:14:16.442531+00:00 srv705038 sshd[2503]: Failed password for invalid user admin from 51.20.5.208 port 53236 ssh2
2025-01-28T23:14:19.712289+00:00 srv705038 sshd[2505]: Failed password for invalid user admin from 51.20.5.208 port 53250 ssh2
2025-01-28T23:14:23.451288+00:00 srv705038 sshd[2507]: Failed password for invalid user admin from 51.20.5.208 port 53256 ssh2
2025-01-28T23:14:26.387938+00:00 srv705038 sshd[2509]: Failed password for invalid user admin from 51.20.5.208 port 57986 ssh2
2025-01-28T23:14:28.872091+00:00 srv705038 sshd[2511]: Failed password for invalid user admin from 51.20.5.208 port 57998 ssh2
2025-01-28T23:14:32.515499+00:00 srv705038 sshd[2515]: Failed password for invalid user pi from 51.20.5.208 port 58012 ssh2
2025-01-28T23:14:34.748936+00:00 srv705038 sshd[2517]: Failed password for invalid user ftp from 51.20.5.208 port 58020 ssh2
2025-01-29T12:44:07.296225+00:00 srv705038 sudo:  pollito : TTY=pts/0 ; PWD=/home/pollito ; USER=root ; COMMAND=/usr/bin/grep 'Failed password' /var/log/auth.log

Para reducir la superficie de ataque, fortaleceremos SSH.

Asegúrate de que tu usuario no root tenga tu clave pública

De lo contrario podríamos quedar bloqueados fuera del servidor.

Copie la clave pública SSH. Una forma sencilla de hacerlo es utilizar el comando ssh-copy-id:

ssh-copy-id pollito@pollito.tech

Ahora intente iniciar sesión en el VPS y verifique que todo esté funcionando:

ssh pollito@pollito.tech

Deshabilite el inicio de sesión con contraseña como usuario root

Lo ideal sería deshabilitar el inicio de sesión como root:

En su lugar, deshabilitaremos el inicio de sesión con contraseña como usuario root ejecutando los siguientes comandos:

Actualizaciones de paquetes del sistema

Asegúrate de estar en un sistema actualizado antes de continuar.

Probablemente, verás un mensaje indicando que es necesario reiniciar los servicios y/o contenedores.

¿Deberíamos crear un firewall ahora?

yes-no

Lo ideal ahora sería crear un firewall:

Crowdsec

  1. Ejecuta los comandos de instalación:

    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
    sudo apt-get install crowdsec
    

    Ahora estamos detectando IP maliciosas, pero no bloqueándolas. Necesitamos un bouncer.

  2. Instala un bouncer ejecutando estos comandos:

    curl -s https://install.crowdsec.net | sudo sh
    sudo apt install crowdsec-firewall-bouncer-iptables
    

Ya puedes consultar la tabla de IP bloqueadas.

cscli decisions list

list.png

Acerca de Cloud Init

Al aprovisionar un VPS, tareas como crear un nuevo usuario, reforzar la seguridad (por ejemplo, configuración de clave SSH, configuración de firewall) e instalar actualizaciones del sistema son pasos repetitivos pero críticos. Cloud Init existe para automatizar estos procesos.

Sé que en Hetzner esto es posible, como se muestra en este tutorial, minuto 2:59 “Crear un VPS con Hetzner y configurarlo con Cloud Config”

Sin embargo, las ofertas de VPS de Hostinger (al momento de escribir este artículo) no son compatibles de forma nativa con Cloud Init. Es posible que existan soluciones alternativas, pero no he investigado adecuadamente.

Siguiente lectura

VPS 3: Coolify

Hey, check me out!

You can find me here