Blindaje de seguridad para VPS Ubuntu/Debian con un solo comando
Automatiza la configuración de seguridad de tu servidor VPS en minutos: SSH endurecido, firewall UFW, y protección Fail2ban.
Conéctate a tu VPS como root y ejecuta:
curl -fsSL https://raw.githubusercontent.com/juanlara-aidev/armor-vps/main/install.sh | bash¡Eso es todo! El script te pedirá:
- Tu llave pública SSH (generada previamente en tu computadora)
- El puerto SSH deseado (o presiona Enter para uno aleatorio)
| Componente | Configuración |
|---|---|
| Usuario | Se mantiene root como usuario principal |
| Autenticación SSH | Solo mediante llave pública (password desactivado) |
| Puerto SSH | Cambiado a un puerto alto (aleatorio o definido por ti) |
| Firewall UFW | Configuración mínima: puertos 80, 443 y el nuevo SSH |
| Fail2ban | Protección robusta con jails sshd + recidive |
| Idempotencia | Puedes ejecutarlo múltiples veces sin problemas |
| Seguridad | Rollback automático si algo falla |
- ✅ Autenticación exclusiva por llave pública
- ✅ Puerto no estándar (dificulta escaneos automatizados)
- ✅
PermitRootLogin prohibit-password(root solo con llave) - ✅ Desactivado: ChallengeResponse, X11Forwarding
- ✅ Máximo 3 intentos de autenticación
- ✅ Política por defecto: denegar entrada, permitir salida
- ✅ Solo puertos esenciales: 80 (HTTP), 443 (HTTPS), SSH personalizado
- ✅ sshd: 3 intentos fallidos = ban 24 horas
- ✅ recidive: reincidentes baneados 1 semana
ssh root@TU_IP_DEL_SERVIDOR¡IMPORTANTE! No cierres tu sesión SSH actual hasta verificar que puedes conectarte con el nuevo puerto.
ssh root@TU_IP_DEL_SERVIDORcurl -fsSL https://raw.githubusercontent.com/juanlara-aidev/armor-vps/main/install.sh | bashEl script te pedirá:
-
Tu llave pública SSH completa Pégala tal como la copiaste (ejemplo:
ssh-ed25519 AAAAC3NzaC1... tu@email.com) -
El puerto SSH deseado
- Ingresa un número entre 10000-65000
- O presiona Enter para generar uno aleatorio
¡MUY IMPORTANTE! Mantén abierta tu sesión actual y abre una nueva terminal.
En la nueva terminal, conéctate con el nuevo puerto:
ssh -p NUEVO_PUERTO root@TU_IP_DEL_SERVIDORSi la conexión funciona, ¡todo está listo! Puedes cerrar la sesión anterior.
Si aún tienes la sesión original abierta:
# Restaurar backup
cp /etc/ssh/sshd_config.backup.* /etc/ssh/sshd_config
# Reiniciar SSH
systemctl restart ssh
# o
systemctl restart sshd# Estado de SSH
systemctl status ssh
# Estado de UFW
ufw status verbose
# Estado de Fail2ban
fail2ban-client statusDesde otra IP o consola de tu proveedor:
# Ver IPs baneadas
fail2ban-client status sshd
# Desbanear una IP específica
fail2ban-client set sshd unbanip TU_IP# Ejemplo: abrir puerto 3000 para una aplicación
ufw allow 3000/tcp comment 'Mi App'
# Ver reglas actuales
ufw status numbered
# Eliminar una regla por número
ufw delete NUMERO| Archivo | Descripción |
|---|---|
/etc/ssh/sshd_config |
Configuración principal de SSH |
/root/.ssh/authorized_keys |
Llaves públicas autorizadas |
/etc/fail2ban/jail.local |
Configuración de Fail2ban |
/var/log/auth.log |
Logs de autenticación |
/var/log/fail2ban.log |
Logs de Fail2ban |
# SSH
systemctl restart ssh # Reiniciar SSH
sshd -t # Verificar sintaxis de config
# UFW
ufw status verbose # Ver estado completo
ufw allow PUERTO/tcp # Abrir puerto
ufw delete allow PUERTO/tcp # Cerrar puerto
ufw reload # Recargar reglas
# Fail2ban
fail2ban-client status # Ver jails activos
fail2ban-client status sshd # Ver estado de jail sshd
fail2ban-client set sshd unbanip IP # Desbanear IP
fail2ban-client reload # Recargar configuraciónPara facilitar las conexiones futuras, configura tu archivo ~/.ssh/config local:
Host mi-vps
HostName TU_IP_DEL_SERVIDOR
User root
Port NUEVO_PUERTO
IdentityFile ~/.ssh/id_ed25519
Y luego simplemente:
ssh mi-vps- ✅ Ubuntu 18.04+
- ✅ Ubuntu 20.04 LTS
- ✅ Ubuntu 22.04 LTS
- ✅ Ubuntu 24.04 LTS
- ✅ Debian 9+
- ✅ Debian 10 (Buster)
- ✅ Debian 11 (Bullseye)
- ✅ Debian 12 (Bookworm)
- Idempotente: Puedes ejecutarlo múltiples veces sin romper nada
- Rollback automático: Si algo falla, restaura la configuración original
- Sin reinicio necesario: El servidor no necesita reiniciarse
- Backups automáticos: Crea respaldo antes de cualquier cambio
- Validaciones robustas: Verifica cada paso antes de continuar
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add: nueva característica') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
Este script modifica configuraciones críticas de seguridad de tu servidor. Aunque incluye múltiples validaciones y rollback automático, úsalo bajo tu propia responsabilidad.
Recomendaciones:
- Prueba primero en un servidor de desarrollo
- Ten siempre una forma alternativa de acceder a tu servidor (consola del proveedor)
- Mantén la sesión SSH original abierta hasta verificar que todo funciona
Después de ejecutar Armor VPS, considera:
-
Actualizar regularmente tu sistema:
apt update && apt upgrade -y -
Revisar logs periódicamente:
tail -f /var/log/auth.log tail -f /var/log/fail2ban.log
-
Configurar alertas de Fail2ban (opcional)
-
Implementar 2FA para SSH (avanzado)
-
Usar fail2ban para otros servicios (web, email, etc.)
Si tienes problemas o preguntas:
- 🐛 Reportar un bug
- 💬 Iniciar una discusión
- ⭐ Si te fue útil, ¡deja una estrella!
Hecho con ❤️ por Juan Lara para la comunidad