Un VPS administrado con KVM es una máquina virtual con kernel propio y CPU, memoria y disco aislados de los vecinos, con el setup de seguridad hecho antes de que entre la aplicación. Quien recibe acceso root todavía tiene que validar el entorno y cerrar SSH. Estos son los primeros comandos, en Ubuntu 22.04 o 24.04.
La comparación con el hosting compartido está en VPS administrado o compartido. El plan con ese setup hecho por ingeniería está en VPS KVM.
1. Confirmar que el hipervisor es KVM
systemd-detect-virt
free -h
nproc
lsblk
systemd-detect-virt debe imprimir kvm. free -h y nproc muestran la RAM y las vCPU del plan. lsblk lista el disco. Si el comando imprime openvz o lxc, el servidor no tiene kernel propio y varios pasos de abajo no aplican.
2. Actualizar y crear el usuario de operación
Entre como root solo en esta primera sesión.
apt update && apt upgrade -y
adduser deploy
usermod -aG sudo deploy
En su equipo, genere una clave si todavía no existe y cópiela al servidor:
ssh-keygen -t ed25519 -C "deploy@empresa"
ssh-copy-id deploy@IP_DEL_VPS
Abra una segunda terminal y confirme que ssh deploy@IP_DEL_VPS entra sin contraseña. Solo entonces siga. Cerrar root antes de esa prueba bloquea el servidor.
3. Desactivar el login de root y la contraseña
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sshd -t && sudo systemctl reload ssh
sshd -t valida el archivo. Si reporta un error, no recargue el servicio. Mantenga la sesión actual abierta y pruebe la clave en otra terminal.
4. Firewall, fail2ban y actualización automática
sudo apt install -y ufw fail2ban unattended-upgrades
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
El jail de SSH en Ubuntu no viene activado. Cree /etc/fail2ban/jail.local:
[sshd]
enabled = true
maxretry = 5
bantime = 1h
sudo systemctl enable --now fail2ban
printf 'APT::Periodic::Update-Package-Lists "1";\nAPT::Periodic::Unattended-Upgrade "1";\n' | sudo tee /etc/apt/apt.conf.d/20auto-upgrades
sudo systemctl enable --now unattended-upgrades
sudo timedatectl set-timezone America/Sao_Paulo
ufw status tiene que mostrar la regla de OpenSSH como ALLOW. Sin ella, el siguiente login no entra.
5. Qué revisar antes de subir la aplicación
df -h
timedatectl
sudo fail2ban-client status sshd
Disco con margen, zona horaria correcta y el jail sshd activo. La aplicación viene después: usuario de servicio sin sudo, puerto de la app detrás de Nginx y copia de seguridad fuera de esta máquina. El monitoreo de CPU y disco está en Grafana en un VPS.
Conclusión
Estos comandos dejan el VPS KVM con un usuario, una clave, firewall y actualización de seguridad. Es el mínimo antes de publicar cualquier sitio. En un VPS gestionado ese primer día ya sale hecho, y el equipo sigue con root para la aplicación.