VPS 2: Let's setup
Posted on January 28, 2025 • 9 minutes • 1902 words • Other languages: English
- Elige un proveedor de VPS
- Elige un plan que se adapte a ti
- Elige un sistema operativo
- Configure contraseña y SSH
- Agregue una nueva cuenta de usuario
- Apunte un registro DNS al servidor (Obtener un dominio)
- Fortalecer SSH
- Actualizaciones de paquetes del sistema
- ¿Deberíamos crear un firewall ahora?
- Acerca de Cloud Init
- Siguiente lectura
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:
- A2 Hosting : Conocido por sus servidores optimizados para la velocidad y herramientas fáciles de usar para desarrolladores.
- Hetzner : Un proveedor europeo económico con una sólida reputación de confiabilidad.
- Hostinger : Ofrece planes asequibles con una interfaz fácil de usar, ideal para principiantes.
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.
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!)
- Consejo: En YouTube, busca “Hostinger VPS”, ordena por fecha para obtener videos recientes y, si el video es una buena reseña de un creador con muchos suscriptores, es posible que tengan un código de cupón que pueda usar. Un descuento del 10% siempre es bienvenido.
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.
Por cierto, no uso Arch… btw.
En la siguiente pantalla, se ofrece un escáner de malware. Lo dejaremos habilitado, ya que parece ser liviano y gratuito.
Configure contraseña y SSH
Después de elegir el sistema operativo, se solicita configurar una contraseña para el usuario root:
- Es importante también agregar una clave SSH para que luego pueda iniciar sesión exclusivamente a través de SSH.
- Hostinger brindará instrucciones sobre cómo generar y agregar una clave SSH en caso de que estar seguro.
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”.
- En futuros ejemplos, usaré el dominio que voy a adquirir en el siguiente paso en lugar de la dirección IP. Ambas opciones son totalmente válidas.
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:
- Riesgos de seguridad: El usuario root tiene acceso sin restricciones a todo el sistema. Si se ve comprometido (por ejemplo, mediante un ataque de fuerza bruta o una exposición accidental), los atacantes pueden causar estragos. Un usuario no root limita el daño potencial al operar bajo el principio del mínimo privilegio.
- Cambios accidentales en el sistema: Un solo error tipográfico en un comando (como
rm -rf /
en lugar derm -rf ./
) puede eliminar archivos críticos del sistema cuando se ejecuta como root. Una cuenta de usuario normal actúa como protección contra errores tan catastróficos. - Rastros de auditoría: El uso de un usuario dedicado facilita el seguimiento de las acciones en los registros, especialmente si varias personas acceden al servidor. La actividad root es más difícil de atribuir a usuarios específicos, lo que complica la resolución de problemas.
- Refuerzo de SSH: La mayoría de los ataques se dirigen al usuario root a través de SSH. Al deshabilitar el inicio de sesión root y usar claves SSH con una cuenta que no sea root, reduce la exposición de su servidor a ataques de fuerza bruta.
- Requisitos de la aplicación: Algunas herramientas y servicios (por ejemplo, Docker) pueden negarse a ejecutarse como root por razones de seguridad. Una cuenta de usuario estándar garantiza la compatibilidad con dicho software.
Por eso, crearemos una cuenta de usuario dedicada:
- Cree un nuevo usuario (por ejemplo,
adduser pollito
). - Otorgue privilegios de sudo para tareas administrativas (
usermod -aG sudo pollito
). - 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?
-
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 (
@
oyourdomain.com
) que se generaron automáticamente o que ya no son necesarios. Estos suelen apuntar a direcciones IP basura.
-
Agregue un nuevo registro A
- Cree un nuevo registro A para el dominio raíz (
@
oyourdomain.com
). - Establezca el campo valor o destino en la dirección IP pública de su VPS.
- Guarde el registro.
- Cree un nuevo registro A para el dominio raíz (
-
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
oping 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.
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
- Asegúrate de cerrar sesión en el VPS, debes estar en tu máquina local.
- Si estás en Windows, puedes hacer que esto funcione usando Git Bash .
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 este caso, no podemos hacerlo porque una herramienta que usaremos más adelante (Coolify ) debe poder ingresar de forma remota al servidor como usuario root.
- Hay una función experimental que permite ejecutar Coolify como usuario no root . No obstante, no profundizaré más en esta alternativa porque es experimental.
En su lugar, deshabilitaremos el inicio de sesión con contraseña como usuario root ejecutando los siguientes comandos:
- El usuario root solo puede iniciar sesión usando claves SSH (no contraseñas).
sudo sed -i -e '/^\(#\|\)PermitRootLogin/s/^.*$/PermitRootLogin without-password/' /etc/ssh/sshd_config
- Asegúrate de que esté habilitada la autenticación de clave pública, lo cual es necesario para el inicio de sesión basado en clave SSH.
sudo sed -i -e '/^\(#\|\)PubkeyAuthentication/s/^.*$/PubkeyAuthentication yes/' /etc/ssh/sshd_config
- Deshabilita la autenticación basada en contraseña, imponiendo el uso de claves SSH para iniciar sesión.
sudo sed -i -e '/^\(#\|\)PasswordAuthentication/s/^.*$/PasswordAuthentication no/' /etc/ssh/sshd_config
- Debes repetir el paso anterior también en un archivo específico de Hostinger. Si estás ejecutando tu VPS en un proveedor diferente, ignora esto.
sudo sed -i -e '/^\(#\|\)PasswordAuthentication/s/^.*$/PasswordAuthentication no/' /etc/ssh/sshd_config.d/50-cloud-init.conf
- Reinicie el demonio SSH (sshd) para que los cambios surtan efecto.
sudo systemctl reload ssh
Actualizaciones de paquetes del sistema
Asegúrate de estar en un sistema actualizado antes de continuar.
- Asegúrate de que el sistema conozca las últimas versiones de los paquetes.
sudo apt update
- Actualiza todos los paquetes instalados.
sudo apt upgrade -y
Probablemente, verás un mensaje indicando que es necesario reiniciar los servicios y/o contenedores.
- Reinicie el VPS
sudo reboot
¿Deberíamos crear un firewall ahora?
Lo ideal ahora sería crear un firewall:
- En este caso no podemos porque, una vez más, una herramienta que utilizaremos más adelante (Coolify ) expone su panel de administración a través de http en el puerto 8000 del VPS.
- Una vez que configuremos HTTPS y dominios (en el próximo blog, atentos), crearemos un firewall.
Crowdsec
-
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.
-
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
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.
- Al definir un archivo YAML de configuración de nube, puede crear scripts de creación de usuarios, actualizaciones de paquetes, políticas de seguridad y más, lo que garantiza la coherencia en todas las implementaciones.
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.