Implementar un VPS de Linux público sin un endurecimiento defensivo lo deja vulnerable al relleno de credenciales automatizado, análisis de fuerza bruta y exploits de escalada de privilegios a los pocos minutos de conectarse. En esta lista de verificación, aplicamos una arquitectura de seguridad Defensa en Profundidad que cumple con las directrices de Nivel 1 del Center for Internet Security (CIS).
1. Paso 1: Aplicación de Claves SSH Criptográficas
Desactive toda la autenticación SSH basada en contraseñas y fuerce el uso de claves modernas de curva elíptica en /etc/ssh/sshd_config:
# /etc/ssh/sshd_config Hardening
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
X11Forwarding no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Genere claves usando ssh-keygen -t ed25519 -a 100 en su estación de trabajo local y verifique la conexión antes de reiniciar el demonio SSH mediante sudo systemctl reload sshd.
2. Paso 2: Aislamiento de Entrada con Firewall No Complicado (UFW)
Aplique una política de denegación predeterminada estricta para el tráfico entrante y exponga únicamente los servicios web públicos necesarios:
# Reset and enforce default deny
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow HTTP and HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Restrict SSH to custom management subnet if applicable
sudo ufw allow 22/tcp
# Enable and inspect
sudo ufw enable
sudo ufw status verbose
3. Paso 3: Limitación de Tasa Automatizada con Fail2ban
Configure Fail2ban para supervisar los registros de autenticación y los flujos de errores HTTP de Nginx, descartando automáticamente las direcciones IP infractoras a través de iptables:
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 86400
findtime = 600
maxretry = 3
banaction = ufw
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/*error.log
maxretry = 2
4. Paso 4: Auditoría CIS & Actualizaciones de Seguridad Automáticas
Habilite la aplicación automática de parches de seguridad desatendidos y realice auditorías periódicas de cumplimiento:
# Enable automated security updates
sudo apt install unattended-upgrades update-notifier-common
sudo dpkg-reconfigure --priority=low unattended-upgrades
# Verify /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::Automatic-Reboot "false";
5. Paso 5: Endurecimiento de Montaje del Sistema de Archivos de Memoria & Compartida
Los atacantes que obtienen acceso restringido a la terminal frecuentemente ejecutan binarios maliciosos desde directorios accesibles para todos con permisos de escritura como /tmp y /dev/shm. Proteja estos puntos de montaje agregando indicadores defensivos a /etc/fstab:
# /etc/fstab Hardening
tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,nosuid,nodev,noexec,mode=1777 0 0
tmpfs /dev/shm tmpfs defaults,nosuid,nodev,noexec 0 0
El indicador noexec previene la ejecución de cualquier binario o script directamente desde el directorio, neutralizando la inserción común de shells en aplicaciones web.
6. Paso 6: Autoprotección del Kernel & Seguridad de Red a través de Sysctl
Endurezca la pila de red de Linux contra la suplantación de identidad IP (IP spoofing), ataques de inundación SYN y manipulación de redirección ICMP configurando /etc/sysctl.d/50-security.conf:
# Reverse Path Filtering (Mitigate IP Spoofing)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ignore ICMP Broadcast Requests & Smurf Attacks
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disable ICMP Redirect Acceptance (Mitigate Man-in-the-Middle)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Prevent Rogue Source-Routed Packets
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Protect Hardlinks and Symlinks against TOCTOU Race Conditions
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
# Maximize Address Space Layout Randomization (ASLR)
kernel.randomize_va_space = 2
7. Paso 7: Auditoría Automatizada de Cumplimiento con Lynis
Audite regularmente el cumplimiento del sistema frente a los estándares CIS utilizando Lynis, una herramienta de auditoría de seguridad de código abierto:
# Install and run Lynis security audit
sudo apt install lynis
sudo lynis audit system --quick
# Review Lynis hardening index and generated warnings
grep "Hardening index" /var/log/lynis.log
grep "WARNING" /var/log/lynis.log
Apunte a una puntuación en el Índice de Endurecimiento de Lynis de 80 o superior en entornos de alojamiento web de producción.
Preguntas Frecuentes
¿Es suficiente cambiar el puerto SSH predeterminado (22) para proteger el servidor?
Cambiar el puerto SSH a un puerto no estándar (por ejemplo, 2222) reduce los análisis de bots automatizados en los registros de acceso, pero es meramente seguridad por oscuridad. Un simple escaneo de puertos con Nmap descubrirá inmediatamente el servicio SSH a la escucha. La aplicación de claves criptográficas, la desactivación del inicio de sesión de root con contraseña y la limitación de tasa con Fail2ban proporcionan seguridad genuina.
¿Cómo desbloqueo la dirección IP de un administrador bloqueada accidentalmente por Fail2ban?
Si un administrador ingresa credenciales incorrectas y activa el bloqueo de una cárcel, conéctese desde una IP secundaria en la lista blanca o desde la consola fuera de banda del proveedor de alojamiento, luego ejecute:
sudo fail2ban-client set sshd unbanip 203.0.113.50
También puede incluir permanentemente en la lista blanca las subredes IP de la oficina administrativa agregándolas a la directiva ignoreip en /etc/fail2ban/jail.local.
¿Cuál es la diferencia entre el Nivel 1 y el Nivel 2 de las Guías CIS?
El Nivel 1 de CIS proporciona controles de seguridad defensivos que se pueden aplicar con un riesgo mínimo de interrumpir el software operativo normal. El Nivel 2 aplica medidas de defensa en profundidad (como políticas estrictas de control de acceso obligatorio, módulos de kernel restringidos y un aislamiento agresivo del sistema de archivos) que requieren un ajuste personalizado de las aplicaciones para evitar conflictos operativos.
¿Por qué es crucial la Aleatorización de la Disposición del Espacio de Direcciones (ASLR = 2)?
Configurar kernel.randomize_va_space = 2 aleatoriza las direcciones de memoria de la pila, la página VDSO, las bibliotecas de memoria compartida y el segmento de datos. Esto evita que los exploits de corrupción de memoria (como desbordamientos de búfer y ataques de programación orientada a retornos) predigan los objetivos de memoria ejecutables.
Resumen & Línea Base de Seguridad en la Nube
Endurecer un servidor Linux requiere una postura defensiva en capas. Al implementar pares de claves SSH criptográficas, un aislamiento estricto del firewall de entrada, prevención de intrusiones con Fail2ban, montajes de memoria compartida protegidos y auditorías de los estándares CIS, los administradores de sistemas garantizan que las instancias de producción permanezcan resilientes frente a la explotación automatizada.
Implementar VPS en la Nube Pre-endurecido
Implemente instancias de Linux endurecidas con filtrado DDoS integrado, almacenamiento NVMe y redes virtuales aisladas en WinWinHost.
Explorar VPS en la Nube Endurecido →