32blogby StudioMitsu

Guía de Seguridad SSH: De Autenticación por Clave a Acceso Solo por VPN

Fortalece SSH paso a paso. Autenticación por clave, fail2ban, reglas de firewall y cómo ocultar SSH detrás de una VPN. Guía práctica para administradores de VPS.

5 min read

This article contains affiliate links.

Contenido

Lo primero que hay que hacer después de configurar un VPS es fortalecer SSH. Deja SSH expuesto en el puerto 22 con la configuración por defecto, y los intentos de fuerza bruta comenzarán en minutos. Esto no es una exageración — revisa /var/log/auth.log en cualquier VPS nuevo y compruébalo tú mismo.

Este artículo te guía a través del fortalecimiento de SSH en niveles progresivos, desde lo esencial hasta ocultar completamente tu puerto SSH de internet.

Entendiendo los Riesgos de SSH

SSH es potente, pero estar expuesto a internet lo convierte en un objetivo constante.

AtaqueDescripción
Fuerza brutaBots automatizados probando combinaciones de usuario/contraseña 24/7
Credential stuffingUsando contraseñas filtradas de otros servicios
Escaneo de puertosDescubriendo puertos abiertos. Puerto 22 abierto = objetivo inmediato
Compromiso de claveClaves privadas filtradas sin frase de paso otorgan acceso completo

Nivel 1: Configuración Esencial

Lo mínimo que debes hacer. Solo con esto se detienen la mayoría de los ataques de fuerza bruta.

Crea un Usuario Regular y Deshabilita el Login de Root

bash
adduser deploy
usermod -aG sudo deploy

Edita /etc/ssh/sshd_config.

text
PermitRootLogin no
AllowUsers deploy

Root es la cuenta más atacada. Usa un usuario regular con sudo en su lugar.

Cambia a Autenticación por Clave y Deshabilita Contraseñas

Genera un par de claves en tu máquina local. Ed25519 es recomendado — claves más cortas con seguridad equivalente o superior a RSA.

bash
ssh-keygen -t ed25519 -C "deploy@myserver"
ssh-copy-id deploy@YOUR_SERVER_IP

Después de confirmar que el login basado en clave funciona, deshabilita la autenticación por contraseña.

text
PasswordAuthentication no
PubkeyAuthentication yes

Aplica los cambios.

bash
sudo systemctl restart sshd

Nivel 2: Defensa Más Profunda

Añade esto sobre lo básico para reducir aún más las tasas de éxito de ataques.

Instala fail2ban

Bloquea automáticamente las IPs después de repetidos fallos de autenticación.

bash
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edita /etc/fail2ban/jail.local.

text
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 3600
findtime = 600

Tres fallos activan un bloqueo de una hora. Esto reduce drásticamente la eficiencia de la fuerza bruta.

bash
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Configura el Firewall

Usa UFW para permitir solo los puertos necesarios.

bash
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Cambia el Puerto SSH (Opcional)

Mover del puerto 22 a un puerto no estándar evita la mayoría de los escáneres automatizados.

text
Port 2222

Esto es seguridad por oscuridad — no es una defensa real. Un escaneo de puertos lo encontrará igualmente. Es mejor que nada, pero no confíes solo en esto.

Limita los Intentos de Autenticación

text
MaxAuthTries 3
LoginGraceTime 30

Nivel 3: Oculta SSH Completamente

Todo lo anterior hace que SSH sea lo suficientemente seguro. Pero no exponer el puerto SSH en absoluto es la defensa definitiva. No puedes atacar un puerto que no existe.

Permite SSH Solo a Través de una VPN

Permite conexiones SSH solo a través de un túnel VPN y cierra el puerto SSH público.

Usar NordVPN cifra tu tráfico cuando gestionas un VPS desde una cafetería o red pública. SSH sobre WiFi no cifrado es arriesgado. Haz el hábito de conectarte a una VPN antes de abrir una sesión SSH — solo esto mejora significativamente la seguridad.

Usa Tailscale para Cerrar el Puerto Completamente

Para una solución más completa, Tailscale es una VPN de malla construida sobre WireGuard que oculta tu puerto SSH de internet público por completo.

bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh

Cierra el acceso público a SSH con UFW.

bash
sudo ufw delete allow ssh

Ahora SSH solo es accesible desde dentro de la red Tailscale. Desde internet público, el puerto SSH simplemente no existe.

Tailscale es gratuito para uso personal (3 usuarios, 100 dispositivos). También gestiona las claves automáticamente y proporciona grabación de sesiones para fines de auditoría.

Para una comparación detallada de opciones VPN para flujos de trabajo de desarrollo, consulta nuestra Guía de VPN para Desarrolladores. Si ejecutas NordVPN en tu servidor o estación de trabajo, la Guía de Configuración de NordVPN en Linux cubre la configuración por CLI. Los desarrolladores también deberían revisar 5 Formas en que los Desarrolladores Filtran Información Personal — las claves SSH son solo un vector.

Conclusión

NivelAccionesEfecto
1 (Esencial)Autenticación por clave + deshabilitar contraseñas + sin login de rootDetiene la mayoría de la fuerza bruta
2 (Recomendado)fail2ban + firewall + cambio de puertoReduce significativamente los ataques restantes
3 (Máximo)Solo VPN / Tailscale para cerrar el puertoLos ataques se vuelven imposibles

El Nivel 1 es obligatorio para todo administrador de VPS. Toma cinco minutos. El Nivel 2 maneja la mayoría de las amenazas restantes. El Nivel 3 elimina el puerto SSH de internet por completo, haciendo los ataques estructuralmente imposibles.

Si gestionas VPSes desde cafeterías o redes públicas, usa NordVPN para cifrar tu conexión antes de SSH. Ese único hábito hace una diferencia medible.