Servidores y VPS

SSH seguro en tu VPS: configuración y buenas prácticas

Aprende a configurar SSH de forma segura en tu VPS con autenticación por clave, puerto personalizado y protección contra ataques de fuerza bruta.

Closeup of many cables with blue wires plugged in modern switch with similar adapters on blurred background in modern studio

La configuración SSH segura en un VPS consiste en reemplazar la contraseña por autenticación con clave criptográfica, cambiar el puerto por defecto, deshabilitar el acceso root directo e instalar protección contra fuerza bruta. Con estos cuatro pasos el riesgo de intrusión por SSH cae drásticamente.

Esta guía cubre cada ajuste con los comandos exactos. No asume conocimiento previo de hardening, pero sí que ya sabes conectarte al VPS por SSH.

Por qué el SSH sin endurecer es un riesgo inmediato

En cuanto un VPS se provisiona con IP pública, los bots empiezan a escanear el puerto 22 en cuestión de minutos. Cada intento de acceso con usuario/contraseña genéricos (root/root, admin/123456) es un ataque de fuerza bruta automatizado.

Un VPS con SSH en configuración predeterminada puede recibir miles de intentos al día. La buena noticia: bloquearlos no requiere expertise avanzado — requiere seguir una lista de cambios concretos.

Paso 1: Autenticación con clave criptográfica (sin contraseña)

Es el cambio más importante. Una clave ED25519 o RSA de 4096 bits es imposible de adivinar por fuerza bruta.

Genera el par de claves en tu máquina local

# ED25519 (recomendado, más corto y igual de seguro)
ssh-keygen -t ed25519 -C "[email protected]"

# RSA 4096 bits (alternativa compatible con sistemas más antiguos)
ssh-keygen -t rsa -b 4096 -C "[email protected]"

Guarda la clave privada (~/.ssh/id_ed25519) en un lugar seguro. Nunca la subas a ningún servidor.

Copia la clave pública al VPS

ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@IP_del_VPS

Si ssh-copy-id no está disponible, agrega manualmente el contenido de id_ed25519.pub al archivo ~/.ssh/authorized_keys en el servidor.

Verifica que la clave funciona antes de deshabilitar la contraseña

ssh -i ~/.ssh/id_ed25519 usuario@IP_del_VPS

Si entras sin que te pida contraseña, el par de claves está correctamente instalado. Solo entonces pasa al siguiente paso.

Paso 2: Editar /etc/ssh/sshd_config

Este archivo controla el comportamiento del servidor SSH. Ábrelo con un editor de texto:

sudo nano /etc/ssh/sshd_config

Aplica los siguientes cambios (o verifica que ya estén configurados así):

Directiva Valor seguro Por qué
Port Un número entre 1024–65535 (ej. 2244) Evita el escaneo masivo del puerto 22
PermitRootLogin no Root no debe acceder directamente por SSH
PasswordAuthentication no Obliga a usar clave; elimina ataques de contraseña
PubkeyAuthentication yes Activa autenticación por clave pública
AuthorizedKeysFile .ssh/authorized_keys Ruta estándar de claves autorizadas
MaxAuthTries 3 Limita intentos por conexión
LoginGraceTime 30 Segundos para autenticarse antes de desconectar
X11Forwarding no Deshabilita forwarding de interfaz gráfica si no la usas

Guarda el archivo y recarga el servicio SSH:

sudo systemctl reload sshd

Importante: mantén la sesión actual abierta y abre una segunda sesión con el nuevo puerto antes de cerrar la primera. Si hay un error de configuración, tendrás tiempo de corregirlo sin quedarte bloqueado.

Paso 3: Firewall — solo permite el nuevo puerto SSH

El cambio de puerto en sshd_config solo funciona si el firewall también permite el nuevo puerto y bloquea el 22.

Con UFW (Ubuntu/Debian)

sudo ufw allow 2244/tcp
sudo ufw deny 22/tcp
sudo ufw reload

Con firewalld (CentOS/Rocky/AlmaLinux)

sudo firewall-cmd --permanent --add-port=2244/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

Para aprender más sobre la configuración del firewall en tu VPS, revisa la sección de guías de servidores VPS donde encontrarás tutoriales detallados por sistema operativo.

Paso 4: Instalar Fail2ban contra fuerza bruta

Aunque hayas deshabilitado las contraseñas, Fail2ban protege contra escaneos agresivos y otros intentos de autenticación que generan ruido en los logs.

# Ubuntu/Debian
sudo apt install fail2ban -y

# CentOS/Rocky/AlmaLinux
sudo dnf install fail2ban -y

Crea un archivo de configuración local para SSH:

sudo nano /etc/fail2ban/jail.d/sshd.conf
[sshd]
enabled  = true
port     = 2244
maxretry = 3
bantime  = 3600
findtime = 600
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Con esta configuración, cualquier IP que falle 3 veces en 10 minutos queda baneada durante 1 hora.

Buenas prácticas adicionales

  • Usa un usuario sin privilegios y sudo: crea un usuario dedicado al trabajo diario y concédele acceso sudo. No trabajes como root.
  • Passphrase en la clave privada: añade una contraseña a la clave local para protegerla si alguien accede a tu máquina.
  • AllowUsers: en sshd_config puedes restringir el acceso SSH solo a usuarios específicos: AllowUsers tuusuario.
  • Whitelist de IP si es posible: si tu IP es fija, permite SSH solo desde ella en el firewall. Es la protección más fuerte de todas.
  • Mantén SSH actualizado: aplica actualizaciones de seguridad del paquete openssh-server con regularidad.

¿Buscas un VPS con soporte gestionado que incluya hardening de seguridad desde el inicio? El equipo de elenlace.com puede ayudarte a elegir la solución correcta para tu nivel de experiencia técnica.

Conclusiones clave

  • La autenticación por clave criptográfica (ED25519 o RSA 4096) es el cambio más importante: elimina los ataques de contraseña de raíz.
  • Cambia el puerto SSH del 22 predeterminado para reducir el ruido de escaneos automáticos.
  • Deshabilita PermitRootLogin y PasswordAuthentication en sshd_config.
  • Configura el firewall para permitir solo el nuevo puerto SSH y bloquear el 22.
  • Instala Fail2ban para banear automáticamente IPs con intentos de acceso fallidos.
  • Siempre verifica que la nueva configuración funciona antes de cerrar la sesión activa.

Preguntas frecuentes

¿Es suficiente cambiar el puerto SSH para estar seguro?

No. Cambiar el puerto reduce el ruido de escaneos masivos, pero no es una medida de seguridad por sí sola — un atacante puede escanear todos los puertos. La autenticación por clave y deshabilitar las contraseñas son los cambios que realmente protegen el acceso.

¿Puedo usar ED25519 en lugar de RSA?

Sí, y es la opción recomendada. ED25519 produce claves más cortas, opera más rápido y ofrece seguridad equivalente a RSA de 4096 bits. Es compatible con OpenSSH 6.5+ (2014), por lo que funciona en cualquier servidor moderno.

¿Qué hago si me bloqueo fuera del VPS tras cambiar la configuración SSH?

La mayoría de los proveedores de VPS ofrecen una consola de emergencia (VNC o KVM sobre IP) accesible desde el panel de control. Desde allí puedes editar sshd_config, corregir el error y recargar el servicio sin necesidad de acceso SSH.

¿Fail2ban funciona aunque haya deshabilitado PasswordAuthentication?

Sí. Aunque no haya intentos de contraseña que fallen, Fail2ban también bloquea escaneos de puertos agresivos y errores en la negociación de clave. Además, es una capa de defensa en profundidad útil si en el futuro habilitas otros servicios en el mismo VPS.

¿Prefieres que lo hagamos por ti? En El Enlace resolvemos hosting y desarrollo web profesional.

Compara proveedores

Otros proveedores y guías que vale la pena comparar:

← Todos