- Regla de oro: Deshabilitar inmediatamente el acceso directo de root y la autenticación por contraseña en OpenSSH (/etc/ssh/sshd_config.d/).
- Criptografía recomendada: Utilizar exclusivamente llaves públicas Ed25519 (ssh-keygen -t ed25519) en lugar de RSA de longitud insuficiente.
- Cortafuegos por defecto: Establecer política default deny en UFW (ufw default deny incoming) y abrir únicamente los puertos indispensables (SSH, 80, 443).
- Defensa activa contra fuerza bruta: Implementar Fail2ban con jails dedicados para SSH y Nginx con periodos de baneo progresivos.
Un servidor recién desplegado recibe miles de intentos de escaneo y fuerza bruta por minuto. Aplicar un perfil de fortificación inicial reduce drásticamente el riesgo de intrusión. Para complementar con mitigación de red, consulta nuestra guía de Mitigación de Ataques DDoS en Linux.
1. Niveles de Seguridad y Vulnerabilidades Mitigadas
La siguiente tabla resume las fases críticas del hardening de un VPS y su impacto en la seguridad del sistema:
Tabla 1: Fases de Hardening de VPS Linux y Superficie Mitigada
| Fase de Hardening | Herramienta / Archivo | Acción Principal | Vulnerabilidad Mitigada |
|---|---|---|---|
| Gestión de Identidad | sudo / /etc/sudoers | Crear usuario sin root y exigir sudo para comandos privilegiados | Escalamiento accidental o ejecución no auditada |
| Servicio OpenSSH | /etc/ssh/sshd_config.d/hardening.conf | PasswordAuthentication no & PermitRootLogin no | Ataques de fuerza bruta y diccionarios automatizados |
| Filtrado Perimetral | UFW / iptables | Política Default Deny entrante | Escaneo de puertos y servicios internos expuestos |
| Defensa Reactiva | Fail2ban (/etc/fail2ban/jail.local) | Bloqueo automático tras 3 intentos fallidos | Agotamiento de sockets y fuerza bruta distribuida |
2. Creación de Usuario no Privilegiado y Configuración de Sudo
El primer paso consiste en deshabilitar el inicio de sesión interactivo de root y operar mediante un usuario dedicado asignado al grupo con privilegios administrativos (sudo o wheel).
# Crear usuario de administración
adduser sysadmin_jorge
# Asignar al grupo sudo (en Debian/Ubuntu) o wheel (en RHEL/Rocky)
usermod -aG sudo sysadmin_jorge
# Copiar clave pública SSH autorizada
mkdir -p /home/sysadmin_jorge/.ssh
chmod 700 /home/sysadmin_jorge/.ssh
cp /root/.ssh/authorized_keys /home/sysadmin_jorge/.ssh/
chown -R sysadmin_jorge:sysadmin_jorge /home/sysadmin_jorge/.ssh
chmod 600 /home/sysadmin_jorge/.ssh/authorized_keys3. Hardening del Servicio OpenSSH (/etc/ssh/sshd_config)
El demonio OpenSSH debe ser configurado de forma estricta para restringir cifrados débiles y exigir autenticación basada exclusivamente en pares de claves criptográficas (Ed25519 o RSA 4096).
# Cambiar el puerto por defecto (opcional para reducir ruido en logs)
Port 2222
# Deshabilitar acceso directo de root
PermitRootLogin no
# Exigir autenticación por claves públicas y deshabilitar contraseñas
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
# Limitar intentos máximos de autenticación por conexión
MaxAuthTries 3
MaxSessions 2
# Desactivar reenvío de X11 y agentes no requeridos
X11Forwarding no
AllowTcpForwarding no4. Cortafuegos Perimetral con UFW (Uncomplicated Firewall)
Una política de denegación por defecto garantiza que cualquier servicio secundario en ejecución en la máquina quede aislado del tráfico público:
# 1. Reglas por defecto: denegar entrada, permitir salida
ufw default deny incoming
ufw default allow outgoing
# 2. Permitir el puerto SSH configurado antes de habilitar el firewall
ufw allow 2222/tcp comment 'Custom SSH Port'
# 3. Permitir tráfico web HTTP y HTTPS
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
# 4. Habilitar el firewall
ufw enable5. Siguiente Paso en el Cluster de Seguridad
Una vez protegido el sistema operativo base, el siguiente paso indispensable es fortificar el servidor web que recibe las conexiones externas. Revisa nuestro manual de Hardening en Nginx y SSL/TLS para implementar cifrado seguro TLS 1.3.