Para asegurar un servidor VPS Linux debes completar una serie de pasos en el orden correcto: primero bloquear el acceso SSH, luego activar el firewall, después instalar protección contra fuerza bruta y, finalmente, mantener el sistema actualizado. Ejecutar estos pasos toma menos de una hora y elimina la gran mayoría de los vectores de ataque automatizados que afectan a servidores VPS recién creados.
Esta guía cubre cada paso de forma práctica, con los comandos exactos para distribuciones basadas en Debian/Ubuntu y equivalentes para CentOS/AlmaLinux/Rocky Linux.
Paso 1: Hardening de SSH
SSH es la puerta de entrada al servidor. Asegurarla es la primera prioridad.
1.1 Crear un usuario administrador y deshabilitar root
Nunca administres el servidor directamente como root. Crea un usuario con privilegios sudo y deshabilita el login de root por SSH.
adduser adminuser
usermod -aG sudo adminuser
Edita /etc/ssh/sshd_config y establece:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
1.2 Usar autenticación por llave pública
Desde tu máquina local, genera un par de llaves si aún no tienes uno:
ssh-keygen -t ed25519 -C "mi-servidor-vps"
Copia la llave pública al servidor:
ssh-copy-id -i ~/.ssh/id_ed25519.pub adminuser@IP_DEL_SERVIDOR
1.3 Cambiar el puerto SSH
Añade esta línea a /etc/ssh/sshd_config (elige un puerto entre 1024 y 65535):
Port 2299
Reinicia SSH solo después de abrir el nuevo puerto en el firewall para no perder el acceso:
systemctl restart sshd
Paso 2: Configurar el Firewall
Un firewall bien configurado es la segunda línea de defensa más importante después de SSH.
2.1 UFW (Ubuntu/Debian)
ufw default deny incoming
ufw default allow outgoing
ufw allow 2299/tcp # puerto SSH personalizado
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose
2.2 firewalld (CentOS/AlmaLinux/Rocky)
firewall-cmd --permanent --add-port=2299/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Solo abre los puertos que realmente necesitas. Cada servicio expuesto es una posible superficie de ataque.
Paso 3: Instalar Fail2Ban
Fail2Ban monitorea los logs del sistema y bloquea automáticamente las IPs que realizan demasiados intentos de acceso fallidos. Es esencial para frenar ataques de fuerza bruta.
# Ubuntu/Debian:
apt install fail2ban -y
# CentOS/AlmaLinux/Rocky:
dnf install epel-release -y && dnf install fail2ban -y
Crea el archivo de configuración local (nunca edites jail.conf directamente):
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Edita /etc/fail2ban/jail.local para configurar el jail de SSH:
[sshd]
enabled = true
port = 2299
maxretry = 5
bantime = 3600
findtime = 600
systemctl enable --now fail2ban
Paso 4: Mantener el Sistema Actualizado
Las vulnerabilidades en el kernel de Linux y en paquetes del sistema se publican y explotan en cuestión de días. Mantener el servidor actualizado es una de las medidas de seguridad más efectivas y subestimadas.
4.1 Actualizaciones manuales
# Ubuntu/Debian:
apt update && apt upgrade -y
# CentOS/AlmaLinux/Rocky:
dnf update -y
4.2 Actualizaciones automáticas de seguridad
En Ubuntu/Debian instala unattended-upgrades:
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades
En CentOS/AlmaLinux/Rocky usa dnf-automatic:
dnf install dnf-automatic -y
# En /etc/dnf/automatic.conf:
apply_updates = yes
systemctl enable --now dnf-automatic.timer
Paso 5: Proteger Servicios y Datos
5.1 Aislar la base de datos
MySQL, PostgreSQL y cualquier base de datos deben escuchar solo en localhost, nunca en una interfaz pública.
# En /etc/mysql/mysql.conf.d/mysqld.cnf:
bind-address = 127.0.0.1
5.2 Revisar puertos y servicios activos
Antes de poner el servidor en producción, verifica qué está escuchando en interfaces públicas:
ss -tlnp
Desinstala o deshabilita cualquier servicio que no necesites.
5.3 Permisos de archivos web
find /var/www/miapp -type f -exec chmod 644 {} \;
find /var/www/miapp -type d -exec chmod 755 {} \;
chown -R www-data:www-data /var/www/miapp
5.4 Instalar un escáner de rootkits
Herramientas como rkhunter o chkrootkit detectan signos de compromiso en el servidor:
apt install rkhunter -y
rkhunter --update && rkhunter --check
Paso 6: Configurar Backups Automáticos
La seguridad no termina en la prevención de ataques. Un backup funcional puede ser la diferencia entre horas de trabajo perdido y días enteros.
- Snapshots del proveedor: Actívalos desde el panel de control del VPS. Costo típico: $1–5 USD/mes.
- rsync a servidor externo: Programa un cron job para copiar los datos críticos fuera del servidor.
- mysqldump automatizado: Para bases de datos, un dump diario comprimido en cron es simple y efectivo.
# Ejemplo de cron para backup de MySQL:
0 2 * * * mysqldump -u root -p'password' --all-databases | gzip > /backups/db_$(date +\%F).sql.gz
Verifica regularmente que los backups se pueden restaurar. Un backup que no se puede restaurar no es un backup.
| Medida de seguridad | Prioridad | Tiempo estimado |
|---|---|---|
| Hardening SSH (llave pública, sin root) | Crítica | 15 min |
| Firewall UFW/firewalld | Crítica | 10 min |
| Fail2Ban | Alta | 10 min |
| Actualizaciones automáticas | Alta | 10 min |
| Aislar base de datos | Alta | 5 min |
| Backups automáticos | Alta | 20 min |
| Escáner de rootkits | Media | 10 min |
Para más recursos sobre administración y seguridad de servidores, visita nuestra sección de servidores VPS.
Conclusiones clave
- Bloquea el acceso root por SSH desde el primer momento y usa llaves públicas.
- Activa el firewall antes de instalar cualquier servicio y abre solo los puertos necesarios.
- Instala Fail2Ban para bloquear automáticamente IPs que hacen fuerza bruta.
- Mantén el sistema actualizado; las vulnerabilidades conocidas se explotan rápidamente.
- Aísla la base de datos en localhost; nunca la expongas a internet.
- Configura backups automáticos y verifica que se puedan restaurar.
- Revisa periódicamente los puertos abiertos y desinstala servicios innecesarios.
Si prefieres que expertos configuren y aseguren tu VPS sin que tengas que hacer nada técnico, en elenlace.com encontrarás servicios de setup y hardening de servidores a medida para tu negocio.
Preguntas frecuentes
¿Cuánto tiempo tarda en asegurar un VPS nuevo?
Seguir los pasos de esta guía toma entre 45 y 90 minutos en un servidor limpio. Los pasos críticos (SSH + firewall + Fail2Ban) pueden completarse en menos de 30 minutos.
¿Necesito un servidor dedicado para aplicar estas medidas?
No. Todas las medidas de esta guía aplican igualmente a VPS (virtuales) y a servidores dedicados. Son independientes del hardware subyacente.
¿Fail2Ban puede bloquear mi propia IP accidentalmente?
Sí, si cometes varios errores de contraseña. Para evitarlo, añade tu IP a la lista blanca en /etc/fail2ban/jail.local con la directiva ignoreip = 127.0.0.1/8 TU_IP_FIJA. Si te quedas bloqueado, puedes desbloquear tu IP desde la consola de emergencia del proveedor.
¿Con qué frecuencia debo revisar la seguridad del servidor?
Revisa los logs de autenticación y el estado del firewall semanalmente. Ejecuta rkhunter mensualmente. Aplica actualizaciones del sistema tan pronto como aparezcan parches de seguridad, idealmente con automatización.
¿Prefieres que lo hagamos por ti? En El Enlace resolvemos hosting y desarrollo web profesional.
Para saber más
Otros proveedores y guías que vale la pena comparar: