Servidores y VPS

Cómo asegurar un servidor VPS Linux: guía paso a paso

Aprende a asegurar tu servidor VPS Linux desde cero con esta guía paso a paso que cubre SSH, firewall, actualizaciones, fail2ban y más.

Networking equipment with connected cables, showcasing modern technology infrastructure.

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:

← Todos