Hardening completo de servidor Linux para producción
Guía paso a paso para asegurar un servidor Linux recién instalado antes de exponerlo a Internet, cubriendo SSH, firewall, actualizaciones automáticas y auditoría del sistema.
Introducción
Un servidor Linux recién instalado es vulnerable por defecto. Sin configuración de seguridad adecuada, puede ser comprometido en minutos una vez expuesto a Internet. Los bots que escanean la red continuamente buscan servidores con contraseñas débiles, SSH mal configurado o servicios obsoletos. Este tutorial cubre los 10 pasos esenciales de hardening que debes aplicar antes de poner cualquier servidor en producción.
Paso 1: Actualizar el sistema completamente
La primera acción al acceder a un servidor nuevo es actualizar todos los paquetes. Las vulnerabilidades en software desactualizado son la causa número uno de compromisos:
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y# CentOS/RHEL/Rocky Linux sudo dnf update -y && sudo dnf autoremove -y
# Reiniciar si se actualizó el kernel sudo reboot ```
Después del reinicio, verifica que estás ejecutando el kernel más reciente con `uname -r`.
Paso 2: Crear un usuario no-root y deshabilitar el acceso root directo
Trabajar como root es una práctica peligrosa. Crea un usuario con privilegios sudo:
# Crear el usuario
adduser adminuser
usermod -aG sudo adminuser # Ubuntu/Debian
usermod -aG wheel adminuser # RHEL/Rocky# Verificar que el usuario puede usar sudo su - adminuser sudo whoami # Debe responder: root ```
Una vez confirmado que el nuevo usuario funciona, prohíbe el login directo de root modificando `/etc/passwd`: cambia `root:x:0:0:root:/root:/bin/bash` a `root:x:0:0:root:/root:/usr/sbin/nologin`.
Paso 3: Configurar autenticación SSH por clave pública
Las contraseñas son vulnerables a ataques de fuerza bruta. Las claves SSH son matemáticamente mucho más seguras:
# En tu máquina local, genera un par de claves ED25519 (más moderno y seguro que RSA)
ssh-keygen -t ed25519 -C "tu-email@dominio.com" -f ~/.ssh/id_ed25519# Copia la clave pública al servidor ssh-copy-id -i ~/.ssh/id_ed25519.pub adminuser@IP-DEL-SERVIDOR
# Verifica que puedes conectar sin contraseña ssh -i ~/.ssh/id_ed25519 adminuser@IP-DEL-SERVIDOR ```
Paso 4: Endurecer la configuración de SSH
Edita `/etc/ssh/sshd_config` con los siguientes cambios críticos:
# Cambiar el puerto por defecto (dificulta escaneos automatizados)
Port 2222# Deshabilitar login de root por SSH PermitRootLogin no
# Deshabilitar autenticación por contraseña (solo claves) PasswordAuthentication no ChallengeResponseAuthentication no
# Limitar intentos de autenticación MaxAuthTries 3
# Desconectar sesiones inactivas ClientAliveInterval 300 ClientAliveCountMax 2
# Deshabilitar forwarding X11 si no lo necesitas X11Forwarding no
# Permitir solo protocolos modernos Protocol 2 ```
# Verificar configuración sin errores de sintaxis
sudo sshd -t# Reiniciar el servicio sudo systemctl restart sshd ```
Muy importante: mantén tu sesión actual abierta y abre una nueva ventana para verificar que puedes conectar antes de cerrar la sesión existente.
Paso 5: Configurar el firewall con UFW
UFW (Uncomplicated Firewall) simplifica la gestión de iptables:
# Instalar UFW si no está disponible
sudo apt install ufw# Política por defecto: denegar todo el tráfico entrante sudo ufw default deny incoming sudo ufw default allow outgoing
# Permitir SSH en el nuevo puerto sudo ufw allow 2222/tcp comment 'SSH'
# Permitir servicios web si aplica sudo ufw allow 80/tcp comment 'HTTP' sudo ufw allow 443/tcp comment 'HTTPS'
# Activar el firewall sudo ufw enable
# Ver el estado y las reglas activas sudo ufw status verbose ```
Paso 6: Instalar y configurar Fail2Ban
Fail2Ban monitoriza los logs del sistema y banea IPs que muestran comportamiento malicioso:
sudo apt install fail2ban -y# Crear configuración local (nunca edites jail.conf directamente) sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local ```
Edita `/etc/fail2ban/jail.local`:
[DEFAULT]
bantime = 3600 # Banear por 1 hora
findtime = 600 # Ventana de tiempo de 10 minutos
maxretry = 5 # Máximo 5 intentos fallidos[sshd] enabled = true port = 2222 logpath = %(sshd_log)s backend = %(sshd_backend)s ```
sudo systemctl enable fail2ban && sudo systemctl start fail2ban
sudo fail2ban-client status sshd # Ver estadoPaso 7: Configurar actualizaciones automáticas de seguridad
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgradesEdita `/etc/apt/apt.conf.d/50unattended-upgrades` para habilitar actualizaciones automáticas de seguridad y notificaciones por email:
Unattended-Upgrade::Mail "admin@tudominio.com";
Unattended-Upgrade::MailReport "on-change";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";Paso 8: Deshabilitar servicios innecesarios
Each servicio en ejecución es una superficie de ataque potencial:
# Ver todos los servicios activos
systemctl list-units --type=service --state=running# Deshabilitar servicios que no necesitas (ejemplos comunes) sudo systemctl disable --now avahi-daemon # Descubrimiento de red local sudo systemctl disable --now cups # Sistema de impresión sudo systemctl disable --now bluetooth # Si es un servidor
# Ver puertos escuchando sudo ss -tulnp ```
Solo deben estar escuchando los servicios que explícitamente necesitas.
Paso 9: Configurar auditoría del sistema con auditd
sudo apt install auditd -y
sudo systemctl enable auditd && sudo systemctl start auditdAñade reglas de auditoría en `/etc/audit/rules.d/audit.rules`:
# Auditar cambios en archivos de autenticación
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers# Auditar comandos ejecutados por root -a exit,always -F arch=b64 -F euid=0 -S execve -k root_commands
# Auditar intentos de acceso fallidos -a exit,always -F arch=b64 -S open -F exit=-EACCES -k access_denied ```
Paso 10: Verificación final con Lynis
Lynis es una herramienta de auditoría de seguridad que evalúa la postura de seguridad del sistema:
sudo apt install lynis -y
sudo lynis audit systemLynis generará un informe detallado con una puntuación de endurecimiento (Hardening Index) y recomendaciones específicas para tu sistema. Un servidor bien configurado debería obtener una puntuación superior a 75/100. Revisa cada advertencia y sugerencia del informe e implementa las correcciones aplicables a tu caso de uso. Repite esta auditoría mensualmente para mantener el nivel de seguridad a medida que el sistema evoluciona.
Recibe el mejor contenido tech cada mañana
Gratis · Sin spam · Cancela cuando quieras