Guía Avanzada de Hardening VPS 2026: Asegura tu Servidor como un Profesional
Guía avanzada de hardening de seguridad VPS que cubre ajuste del kernel, detección de intrusiones, reglas de firewall, fail2ban, AppArmor y más. Protege tu servidor contra amenazas reales.
Guía Avanzada de Hardening VPS: Asegura tu Servidor como un Profesional
Una configuración básica de VPS te deja expuesto. Configuraciones por defecto, puertos abiertos y autenticación débil son una invitación abierta. Esta guía va más allá de lo básico: hardening del kernel, detección de intrusiones, bloqueo automatizado y registro de auditoría que realmente detecta amenazas.
¿Ya tienes claves SSH y un firewall? Bien. Esto continúa donde las guías para principiantes terminan.
Qué Cubre Esta Guía
| Capa | Herramientas | Propósito |
|---|---|---|
| Red | UFW, iptables, fail2ban | Bloquear acceso no autorizado |
| Autenticación | Hardening SSH, 2FA | Prevenir fuerza bruta |
| Kernel | Ajuste de sysctl | Reducir superficie de ataque |
| Control de Acceso Obligatorio | AppArmor / SELinux | Contener servicios comprometidos |
| Detección de Intrusiones | AIDE, auditd | Detectar cambios no autorizados |
| Registro | rsyslog, logwatch | Monitorear todo |
| Actualizaciones Automáticas | unattended-upgrades | Parchear vulnerabilidades |
Requisitos Previos
- Un VPS con Ubuntu 22.04+ o Debian 12+ (la mayoría de ejemplos funcionan en RHEL/Rocky con ajustes menores)
- Autenticación por clave SSH ya configurada
- Acceso root o sudo
- Familiaridad básica con la línea de comandos de Linux
Proveedores de VPS recomendados para usuarios conscientes de la seguridad:
| Proveedor | Por qué | Precio Inicial |
|---|---|---|
| Hetzner | Centros de datos en la UE, cumplimiento GDPR, rendimiento bruto | €3.79/mes |
| Hostinger | KVM asequible con copias de seguridad por snapshots | $4.99/mes |
| Vultr | Opciones bare metal, protección DDoS incluida | $6/mes |
| DigitalOcean | Redes VPC, firewalls gestionados | $6/mes |
1. Hardening SSH (Más Allá de lo Básico)
Ya tienes autenticación por clave. Ahora vamos a asegurarlo aún más.
Restringir SSH Solo a Claves, Deshabilitar Root
sudo nano /etc/ssh/sshd_config
Establece estos valores:
# Autenticación
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
# Limitar exposición
MaxAuthTries 3
MaxSessions 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
# Deshabilitar funciones innecesarias
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
# Usar solo algoritmos fuertes
KexAlgorithms skedf25519-sha256,skedf25519-sha256@libssh.org,diffie-hellman-group16-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Cambiar el Puerto SSH por Defecto
Mover SSH del puerto 22 detiene la mayoría de escaneos automatizados:
# Agregar nuevo puerto (¡no elimines el 22 todavía!)
Port 2222
Port 22
Reinicia y prueba con el nuevo puerto antes de eliminar el 22:
sudo systemctl restart sshd
ssh -p 2222 user@your-server
Una vez confirmado, elimina Port 22 y reinicia de nuevo.
Agregar Autenticación de Dos Factores
sudo apt install libpam-google-authenticator
google-authenticator
Edita la configuración de PAM:
sudo nano /etc/pam.d/sshd
Agrega al inicio:
auth required pam_google_authenticator.so
Actualiza sshd_config:
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
Ahora los inicios de sesión requieren tanto tu clave SSH como un código TOTP.
2. Configuración del Firewall con UFW + Limitación de Velocidad
Configuración Básica de UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Permitir SSH (usa tu puerto personalizado)
sudo ufw limit 2222/tcp comment 'SSH rate-limited'
# Permitir tráfico web
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Activar
sudo ufw enable
La regla limit limita automáticamente la velocidad de conexiones: 6 conexiones cada 30 segundos, luego bloquea.
Avanzado: Reglas iptables para Mitigación de DDoS
Para servidores con tráfico intenso, agrega estas reglas de iptables:
# Descartar paquetes inválidos
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# Bloquear escaneo de puertos
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Limitar velocidad de nuevas conexiones (protección contra SYN flood)
sudo iptables -A INPUT -p tcp --syn -m limit --limit 25/second --limit-burst 50 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP
# Limitar ICMP (protección contra ping flood)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Guarda las reglas para que persistan entre reinicios:
sudo apt install iptables-persistent
sudo netfilter-persistent save
3. Fail2Ban: Protección Inteligente contra Fuerza Bruta
Instalar y Configurar
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Edita /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
backend = systemd
# Notificaciones por correo (opcional)
destemail = you@example.com
action = %(action_mwl)s
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 86400
[sshd-ddos]
enabled = true
port = 2222
# Proteger nginx
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
[nginx-botsearch]
enabled = true
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
# Proteger contra 404 repetidos (escáneres)
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 60
bantime = 3600
Crea el filtro nginx-404:
sudo nano /etc/fail2ban/filter.d/nginx-404.conf
[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD).*" 404
ignoreregex =
Inicia fail2ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status
4. Hardening del Kernel con sysctl
Estas configuraciones reducen la superficie de ataque de tu kernel:
sudo nano /etc/sysctl.d/99-hardening.conf
# Deshabilitar reenvío de IP (a menos que uses Docker/VPN)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Prevenir suplantación de IP
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ignorar redirecciones ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# No enviar redirecciones ICMP
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Ignorar paquetes con ruta de origen
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# Habilitar SYN cookies (protección contra SYN flood)
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Registrar paquetes sospechosos
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Deshabilitar IPv6 si no es necesario
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# Fortalecer el kernel
kernel.randomize_va_space = 2
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.perf_event_paranoid = 3
kernel.yama.ptrace_scope = 2
# Restringir namespaces de usuarios sin privilegios
kernel.unprivileged_userns_clone = 0
# Fortalecimiento del sistema de archivos
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.suid_dumpable = 0
Aplicar inmediatamente:
sudo sysctl --system
Usuarios de Docker: Mantén
net.ipv4.ip_forward = 1si ejecutas contenedores. Docker lo necesita para la red.
5. AppArmor: Control de Acceso Obligatorio
AppArmor confina los programas a un conjunto limitado de recursos; incluso si un atacante explota una vulnerabilidad, no puede escapar del perfil.
Habilitar y Verificar Estado
sudo apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra
sudo aa-status
Aplicar Perfiles para Servicios Clave
# Listar perfiles disponibles
sudo aa-unconfined
# Poner nginx en modo de aplicación
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
# Crear un perfil para una aplicación personalizada
sudo aa-genprof /usr/local/bin/myapp
Crear Perfiles Personalizados
Para aplicaciones sin perfiles existentes:
# Iniciar en modo de queja (registra violaciones pero no bloquea)
sudo aa-complain /path/to/application
# Ejecuta la aplicación normalmente, ejercita todas las funciones
# Luego revisa los registros y convierte a modo de aplicación
sudo aa-logprof
sudo aa-enforce /path/to/application
6. Detección de Intrusiones con AIDE
AIDE (Advanced Intrusion Detection Environment) monitorea la integridad de archivos y te alerta cuando los archivos del sistema cambian inesperadamente.
Instalar e Inicializar
sudo apt install aide
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Configurar Qué Monitorear
sudo nano /etc/aide/aide.conf
Agrega reglas personalizadas:
# Monitorear directorios críticos del sistema
/etc p+i+u+g+sha256
/bin p+i+u+g+sha256
/sbin p+i+u+g+sha256
/usr/bin p+i+u+g+sha256
/usr/sbin p+i+u+g+sha256
# Monitorear la raíz web
/var/www p+i+u+g+sha256
# Excluir directorios ruidosos
!/var/log
!/var/cache
!/tmp
Automatizar Verificaciones Diarias
sudo crontab -e
Agrega:
0 5 * * * /usr/bin/aide --check | mail -s "AIDE Report $(hostname)" you@example.com
7. Registro de Auditoría con auditd
Rastrea quién hace qué en tu sistema:
sudo apt install auditd audispd-plugins
Agregar Reglas de Auditoría
sudo nano /etc/audit/rules.d/hardening.rules
# Monitorear autenticación
-w /etc/pam.d/ -p wa -k auth_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/passwd -p wa -k passwd_changes
# Monitorear configuración SSH
-w /etc/ssh/sshd_config -p wa -k sshd_config
# Monitorear uso de sudo
-w /var/log/auth.log -p wa -k auth_log
-w /etc/sudoers -p wa -k sudoers
# Monitorear cron
-w /etc/crontab -p wa -k cron_changes
-w /etc/cron.d/ -p wa -k cron_changes
-w /var/spool/cron/ -p wa -k cron_changes
# Monitorear configuración de red
-w /etc/hosts -p wa -k hosts_changes
-w /etc/network/ -p wa -k network_changes
# Monitorear módulos del kernel
-w /sbin/insmod -p x -k kernel_modules
-w /sbin/modprobe -p x -k kernel_modules
-w /sbin/rmmod -p x -k kernel_modules
# Registrar todos los comandos ejecutados por root
-a always,exit -F arch=b64 -F euid=0 -S execve -k root_commands
# Hacer las reglas inmutables (requiere reinicio para cambiar)
-e 2
Reiniciar auditd:
sudo systemctl restart auditd
Buscar en los registros de auditoría:
# Encontrar todos los eventos de sudo
sudo ausearch -k sudoers
# Encontrar cambios en la configuración SSH
sudo ausearch -k sshd_config
8. Actualizaciones de Seguridad Automáticas
Nunca te pierdas un parche crítico:
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
Configura qué se actualiza automáticamente:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
// Notificaciones por correo
Unattended-Upgrade::Mail "you@example.com";
Unattended-Upgrade::MailReport "on-change";
9. Asegurar la Memoria Compartida y /tmp
Prevenir ataques a la memoria compartida:
sudo nano /etc/fstab
Agrega:
tmpfs /run/shm tmpfs defaults,noexec,nosuid,nodev 0 0
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G 0 0
Remontar:
sudo mount -o remount /run/shm
sudo mount -o remount /tmp
Nota:
noexecen/tmppuede romper algunos instaladores. Remonta temporalmente con exec cuando sea necesario:sudo mount -o remount,exec /tmp
10. Monitoreo de Registros con Logwatch
Obtén resúmenes de seguridad diarios:
sudo apt install logwatch
Configurar:
sudo nano /etc/logwatch/conf/logwatch.conf
Output = mail
MailTo = you@example.com
Detail = High
Range = yesterday
Service = All
Pruébalo:
sudo logwatch --detail High --mailto you@example.com --range today
Lista de Verificación de Seguridad
Revisa esto después del hardening:
| Verificación | Comando | Esperado |
|---|---|---|
| Root SSH deshabilitado | grep PermitRootLogin /etc/ssh/sshd_config | no |
| Auth por contraseña desactivada | grep PasswordAuthentication /etc/ssh/sshd_config | no |
| Firewall activo | sudo ufw status | active |
| Fail2ban en ejecución | sudo fail2ban-client status | Jails activos listados |
| AppArmor cargado | sudo aa-status | Perfiles en modo de aplicación |
| AIDE inicializado | sudo aide --check | Sin cambios inesperados |
| Actualizaciones automáticas activadas | apt-config dump | grep Unattended | "1" |
| Puertos abiertos mínimos | sudo ss -tlnp | Solo puertos esperados |
| Kernel fortalecido | sysctl kernel.randomize_va_space | 2 |
Mantenimiento Continuo
El hardening no es algo que se hace una sola vez. Programa estas tareas:
- Diario: Revisar bloqueos de fail2ban (
sudo fail2ban-client status sshd) - Semanal: Verificar informes de AIDE, revisar registros de autenticación
- Mensual: Actualizar todos los paquetes, revisar puertos abiertos, verificar nuevos CVEs
- Trimestral: Auditar cuentas de usuario, rotar claves SSH, revisar reglas de firewall
Mejores Proveedores de VPS para Seguridad
| Proveedor | Características de Seguridad | Ideal Para |
|---|---|---|
| Hostinger | Aislamiento KVM, protección DDoS, copias de seguridad | Mejor relación calidad-precio: seguridad sólida a bajo costo |
| Hetzner | Leyes de privacidad de la UE, firewall dedicado, snapshots | Despliegues enfocados en privacidad |
| Vultr | Protección DDoS, API de firewall, bare metal | Cargas de trabajo de alta seguridad |
| DigitalOcean | VPC, firewalls gestionados, monitoreo | Entornos de equipo |
| Linode | Mitigación DDoS gratuita, monitoreo Longview | Configuraciones con monitoreo intensivo |
Hostinger ofrece el mejor equilibrio entre características de seguridad y precio: la virtualización KVM garantiza aislamiento total de otros inquilinos, y su sistema de copias de seguridad automatizadas te da opciones de recuperación si algo sale mal.
Conclusión
Un VPS fortalecido no se trata solo de ejecutar un firewall. Son capas: filtrado de red, controles de autenticación, restricciones del kernel, control de acceso obligatorio, monitoreo de integridad de archivos y parcheo automatizado. Cada capa atrapa lo que las demás dejan pasar.
Comienza con el hardening SSH y fail2ban (impacto inmediato), luego agrega el ajuste del kernel y AppArmor (protección más profunda), y termina con AIDE y auditd (detección y análisis forense).
Ningún servidor es inhackeable. Pero un VPS correctamente fortalecido hace que los atacantes busquen objetivos más fáciles, y ese es el objetivo.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
// related guides
$1 VPS Hosting 2026: Cheapest VPS Servers Starting at $1/Month
Looking for $1 VPS hosting? Compare the cheapest VPS providers starting from $1-3/month. Real specs, no hidden fees, honest reviews of budget VPS options.
tutorialCaddy Reverse Proxy Guide 2026: Automatic HTTPS Made Easy
Set up Caddy as a reverse proxy with automatic HTTPS, zero-config SSL, and simple Caddyfile syntax. Complete VPS deployment guide.
tutorialCloudflare Tunnel VPS Guide 2026: Expose Services Without Opening Ports
Set up Cloudflare Tunnel on your VPS to expose web apps securely without opening ports or revealing your server IP. Complete guide with Docker and DNS config.
tutorialCoolify VPS Setup Guide 2026: Self-Hosted Vercel Alternative
Deploy Coolify on your VPS for a self-hosted Vercel/Netlify experience. Complete setup guide with Docker, SSL, and app deployments.
Andrius Putna
I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.
// last updated: March 14, 2026. Disclosure: This article may contain affiliate links.