Guía Avanzada de Hardening VPS 2026: Asegura tu Servidor como un Profesional
TUTORIAL 14 min read fordnox

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

CapaHerramientasPropósito
RedUFW, iptables, fail2banBloquear acceso no autorizado
AutenticaciónHardening SSH, 2FAPrevenir fuerza bruta
KernelAjuste de sysctlReducir superficie de ataque
Control de Acceso ObligatorioAppArmor / SELinuxContener servicios comprometidos
Detección de IntrusionesAIDE, auditdDetectar cambios no autorizados
Registrorsyslog, logwatchMonitorear todo
Actualizaciones Automáticasunattended-upgradesParchear vulnerabilidades

Requisitos Previos

Proveedores de VPS recomendados para usuarios conscientes de la seguridad:

ProveedorPor quéPrecio Inicial
HetznerCentros de datos en la UE, cumplimiento GDPR, rendimiento bruto€3.79/mes
HostingerKVM asequible con copias de seguridad por snapshots$4.99/mes
VultrOpciones bare metal, protección DDoS incluida$6/mes
DigitalOceanRedes 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 = 1 si 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: noexec en /tmp puede 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ónComandoEsperado
Root SSH deshabilitadogrep PermitRootLogin /etc/ssh/sshd_configno
Auth por contraseña desactivadagrep PasswordAuthentication /etc/ssh/sshd_configno
Firewall activosudo ufw statusactive
Fail2ban en ejecuciónsudo fail2ban-client statusJails activos listados
AppArmor cargadosudo aa-statusPerfiles en modo de aplicación
AIDE inicializadosudo aide --checkSin cambios inesperados
Actualizaciones automáticas activadasapt-config dump | grep Unattended"1"
Puertos abiertos mínimossudo ss -tlnpSolo puertos esperados
Kernel fortalecidosysctl kernel.randomize_va_space2

Mantenimiento Continuo

El hardening no es algo que se hace una sola vez. Programa estas tareas:

Mejores Proveedores de VPS para Seguridad

ProveedorCaracterísticas de SeguridadIdeal Para
HostingerAislamiento KVM, protección DDoS, copias de seguridadMejor relación calidad-precio: seguridad sólida a bajo costo
HetznerLeyes de privacidad de la UE, firewall dedicado, snapshotsDespliegues enfocados en privacidad
VultrProtección DDoS, API de firewall, bare metalCargas de trabajo de alta seguridad
DigitalOceanVPC, firewalls gestionados, monitoreoEntornos de equipo
LinodeMitigación DDoS gratuita, monitoreo LongviewConfiguraciones 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.

~/vps-hardening-advanced/get-started

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

hardening vps seguridad vps guía hardening servidor seguridad servidor linux configuración firewall vps configuración fail2ban apparmor vps detección intrusiones vps

// related guides

Andrius Putna

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.