Pollito Blog
January 28, 2025

VPS 2: Let's Setup

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

Esta es la segunda parte de mi VPS blog series .

Elegí un proveedor de VPS

Al elegir un proveedor de VPS, te vas a dar cuenta rápido que no faltan opciones. Sin embargo, tres nombres que vas a ver frecuentemente en reseñas, foros y recomendaciones son:

No hay una “mala” elección acá. La decisión debería depender de tus necesidades específicas, como presupuesto, ubicación del servidor, expectativas de soporte y requerimientos 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

Elegí un plan que se adapte a ti

Gracias a mi empleador actual Devsu , conseguí el plan KVM2 por dos años, el cual, para los proyectos personales que tengo en mente, ofrece capacidades técnicas lo suficientemente buenas.

hostinger-pricing

Podés usar mi código de cupón de creador de contenido… Nah, no estoy patrocinado, ¡ojalá! (Hostinger, ¡mandame un mensaje!)

Elegí un sistema operativo

Después de obtener la instancia, se te pide que elijas un OS: en esta serie de blogs vamos con Ubuntu 24.04, ya que es uno de los sistemas operativos más comunes al configurar un VPS.

hostinger-select-os

Aclaración: yo no uso Arch, por cierto. arch

En la siguiente pantalla te ofrecen un escáner de malware. Déjalo activado, ya que parece liviano y es gratis. hostinger-malware-scanner

Configurá contraseña y SSH

Después de elegir el OS, se te pedirá configurar una contraseña para el usuario root:

hostinger-password

Una vez terminado el set-up, esperá unos minutos para que la instancia VPS se inicie. Luego, probá ingresar mediante SSH.

ssh root@vps-instance-ip-address

Podés encontrar la dirección IP de tu VPS en la pantalla “Overview → VPS information”.

hostinger-overview

Ahora que tenemos un VPS, ¿y qué sigue?

Agregá una nueva cuenta de usuario

Trabajar directamente como el usuario root en tu VPS está ampliamente desaconsejado por razones de seguridad y prácticas:

Por lo tanto, vamos a crear una cuenta de usuario dedicada:

  1. Creá un usuario nuevo (por ejemplo, adduser pollito).
  2. Otorgale privilegios sudo para tareas administrativas (usermod -aG sudo pollito).
  3. Probá que funcione cambiando al nuevo usuario (su - pollito) y ejecutá un comando sudo de prueba (sudo ls /).

Apuntá un registro DNS al servidor (Obtener un dominio)

Para conectar tu VPS a un nombre de dominio, necesitás configurar los registros DNS. Podés usar un dominio que ya tengas o comprar uno nuevo (Hostinger ofrece registro de dominios si preferís una solución todo en uno). Acá te explico cómo configurarlo:

  1. Prepará tu dominio
    • Iniciá sesión en el panel de administración DNS de tu proveedor de dominio (por ejemplo, el dashboard de DNS de Hostinger).
    • Eliminá cualquier registro A o CNAME existente ligado al dominio raíz (@ o tudominio.com) que se haya generado automáticamente o que ya no necesites. Esos registros suelen apuntar a IP de prueba.
  2. Agregá un nuevo registro A
    • Creá un nuevo registro A para el dominio raíz (@ o tudominio.com).
    • Configurá el campo value o destination con la IP pública de tu VPS.
    • Guardá el registro. hostinger-dns
  3. Esperá la propagación: Los cambios en DNS pueden tardar hasta 24–48 horas en propagarse globalmente. Podés verificar el progreso usando herramientas como dig tudominio.com o ping tudominio.com (una vez que se haya propagado, debería resolver en la IP de tu VPS).

Nota: Evitá agregar registros CNAME o A no relacionados para el dominio raíz durante este proceso, ya que podrían generar conflictos con tu nueva configuración.

Fortalecé SSH

¿Por qué?

Bots automáticos escanean constantemente internet en busca de servidores SSH, intentando ataques de fuerza bruta usando credenciales comunes.

ssh-bruteforcer Visualización de viz.greynoise.io

Incluso podés chequear en tu VPS los intentos fallidos de login ejecutando:

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

Acá se ve un breve ejemplo: se nota una IP maliciosa intentando forzar el acceso al VPS intentando conectar via SSH como distintos usuarios comunes en diferentes 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 disminuir la superficie de ataque, vamos a fortalecer SSH.

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

Si no, podríamos quedarnos sin acceso al servidor.

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

ssh-copy-id pollito@pollito.tech

Ahora probá ingresar al VPS y verificá que todo funcione:

ssh pollito@pollito.tech

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

Idealmente, ahora querrías deshabilitar el acceso root:

Entonces, en lugar de eso, vamos a deshabilitar el login por contraseña para el usuario root ejecutando los siguientes comandos:

Actualizaciones de paquetes del sistema

Asegurate de que el sistema esté actualizado antes de continuar.

Probablemente veás un mensaje indicando que algunos servicios y/o contenedores deben reiniciarse.

¿Deberíamos crear un firewall ahora?

yes-no

Lo ideal sería que ahora crees un firewall:

Lo que podemos hacer ahora es agregar protección contra IP maliciosas. Vamos con Crowdsec .

Crowdsec

  1. Ejecutá 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 IPs maliciosas pero sin bloquearlas. Necesitamos instalar un bouncer.

  2. Instalá un bouncer ejecutando estos comandos:

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

Ahora podés ver la tabla de IP bloqueadas:

cscli decisions list

list.png

Acerca de Cloud Init

Cuando provisionás un VPS, tareas como crear un usuario nuevo, fortalecer la seguridad (por ejemplo, configurar claves SSH, firewall) e instalar actualizaciones del sistema son pasos repetitivos pero críticos. Cloud Init existe para automatizar estos procesos.

Sé que en Hetzner es posible, como se muestra en este tutorial, minuto 2:59 “Create a VPS with Hetzner and Set Up with Cloud Config”

Sin embargo, las ofertas de VPS de Hostinger (al momento de escribir) no soportan nativamente Cloud Init. Pueden existir alternativas, pero no investigué a fondo.

Siguiente lectura

VPS 3: Coolify

Hey, check me out!

You can find me here