Tutoriales 14 min de lectura

Hardening de servidores Linux — 15 pasos esenciales

Checklist completo de hardening para servidores Ubuntu y Debian en producción. 15 pasos prácticos para reducir la superficie de ataque y proteger tu infraestructura de amenazas reales.

Terminal de Linux mostrando proceso de hardening con verificación de configuraciones de seguridad
Terminal de Linux mostrando proceso de hardening con verificación de configuraciones de seguridad

Un servidor con la configuración por defecto es un servidor vulnerable. Los valores por defecto están diseñados para compatibilidad y facilidad de uso, no para seguridad. SSH con acceso root habilitado, servicios innecesarios corriendo, firewall desactivado, sin límites de intentos de login — cada uno es una puerta abierta para un atacante.

Esta guía te lleva por los 15 pasos esenciales de hardening que aplicamos en cada servidor que desplegamos para nuestros clientes. No es una lista académica — son las configuraciones que bloquean los vectores de ataque más comunes que vemos en auditorías de ciberseguridad en empresas mexicanas.

Antes de empezar

Haz estos cambios en un ambiente de pruebas primero

Aplicar hardening en un servidor de producción sin probar puede dejarte fuera del servidor o romper aplicaciones. Prueba cada paso en una VM de Proxmox o en un servidor de staging antes de aplicar en producción.

Todos los comandos asumen Ubuntu 24.04 LTS. La mayoría aplican también a Debian 12.

1. Actualizar el sistema

Lo más básico y lo más olvidado. Las actualizaciones de seguridad parchean vulnerabilidades conocidas:

sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y

2. Configurar actualizaciones automáticas de seguridad

Las actualizaciones manuales dependen de que alguien se acuerde. Las automáticas no:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

Verifica que esté activo:

cat /etc/apt/apt.conf.d/20auto-upgrades

Debe tener:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

3. Configurar firewall con UFW

Si aún no lo has hecho, sigue nuestra guía de UFW. El resumen rápido:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw limit ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

4. Endurecer SSH

SSH es el vector de ataque #1 en servidores Linux. Edita /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Aplica estos cambios:

# Deshabilitar acceso root por SSH
PermitRootLogin no

# Solo autenticación por llaves (deshabilitar contraseñas)
PasswordAuthentication no
PubkeyAuthentication yes

# Deshabilitar autenticación por teclado interactivo
KbdInteractiveAuthentication no

# Cambiar puerto (reduce 99% del ruido de bots)
Port 2222

# Limitar intentos de autenticación
MaxAuthTries 3
MaxSessions 3

# Timeout de conexiones inactivas
ClientAliveInterval 300
ClientAliveCountMax 2

# Deshabilitar X11 forwarding (no necesitas GUI en un servidor)
X11Forwarding no

# Solo permitir usuarios específicos
AllowUsers tuusuario admin

Antes de deshabilitar contraseñas

Asegúrate de haber copiado tu llave pública SSH al servidor con ssh-copy-id y de que puedes conectarte sin contraseña. Si desactivas PasswordAuthentication sin tener una llave configurada, te quedas fuera permanentemente.

Reinicia SSH:

sudo systemctl restart sshd

5. Instalar fail2ban

fail2ban monitorea los logs de SSH y bloquea automáticamente IPs que intentan fuerza bruta:

sudo apt install fail2ban -y

Crea la configuración local:

sudo tee /etc/fail2ban/jail.local > /dev/null <<EOF
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
EOF
sudo systemctl enable --now fail2ban

Verifica las IPs bloqueadas:

sudo fail2ban-client status sshd

6. Deshabilitar servicios innecesarios

Cada servicio corriendo es una superficie de ataque potencial. Revisa qué está corriendo:

sudo systemctl list-units --type=service --state=running

Deshabilita lo que no necesites:

# Ejemplos comunes de servicios innecesarios en un servidor
sudo systemctl disable --now cups        # Impresión
sudo systemctl disable --now avahi-daemon # Descubrimiento de red
sudo systemctl disable --now bluetooth   # Bluetooth
sudo systemctl disable --now ModemManager # Módem

7. Configurar permisos de archivos críticos

# Proteger archivos de configuración
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 600 /etc/shadow
sudo chmod 644 /etc/passwd
sudo chmod 700 /root

# Proteger crontab
sudo chmod 600 /etc/crontab
sudo chmod 700 /etc/cron.d
sudo chmod 700 /etc/cron.daily
sudo chmod 700 /etc/cron.hourly

8. Configurar política de contraseñas

Aunque uses llaves SSH, los usuarios locales deben tener contraseñas fuertes:

sudo apt install libpam-pwquality -y

Edita /etc/security/pwquality.conf:

minlen = 12
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
maxrepeat = 3

9. Limitar el uso de sudo

No todos los usuarios deben tener acceso sudo completo:

# Crear un grupo de administradores
sudo groupadd sysadmins

# Agregar usuarios al grupo
sudo usermod -aG sysadmins tuusuario

# Configurar sudo solo para el grupo
sudo visudo

Agrega:

%sysadmins ALL=(ALL:ALL) ALL

Verifica que no haya entradas genéricas de sudo innecesarias.

10. Habilitar auditoría del sistema

auditd registra eventos de seguridad — quién accedió a qué archivo, quién ejecutó qué comando:

sudo apt install auditd audispd-plugins -y
sudo systemctl enable --now auditd

Agrega reglas de auditoría para archivos críticos:

sudo tee /etc/audit/rules.d/hardening.rules > /dev/null <<EOF
# Monitorear cambios en usuarios y grupos
-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 identity

# Monitorear cambios en SSH
-w /etc/ssh/sshd_config -p wa -k sshd_config

# Monitorear cambios en cron
-w /etc/crontab -p wa -k cron
-w /var/spool/cron -p wa -k cron

# Monitorear ejecución de comandos como root
-a always,exit -F arch=b64 -F euid=0 -S execve -k root_commands
EOF

sudo augenrules --load

11. Configurar los parámetros del kernel

Edita /etc/sysctl.conf para endurecer la pila de red y el kernel:

sudo tee -a /etc/sysctl.conf > /dev/null <<EOF

# --- Hardening de red ---
# Deshabilitar redirecciones ICMP (previene MitM)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# Deshabilitar source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# Habilitar protección contra SYN flood
net.ipv4.tcp_syncookies = 1

# Ignorar pings broadcast (previene Smurf attack)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Log de paquetes marcianos (paquetes con IPs imposibles)
net.ipv4.conf.all.log_martians = 1

# Deshabilitar IPv6 si no lo usas
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# --- Hardening del kernel ---
# Restringir acceso a logs del kernel
kernel.dmesg_restrict = 1

# Deshabilitar SysRq (teclas mágicas del kernel)
kernel.sysrq = 0

# ASLR habilitado (randomización de memoria)
kernel.randomize_va_space = 2
EOF

sudo sysctl -p

12. Deshabilitar USB y medios removibles (servidores)

En un servidor de producción nadie debería conectar una USB:

echo "blacklist usb-storage" | sudo tee /etc/modprobe.d/disable-usb-storage.conf

13. Configurar banners de advertencia

Un banner legal advierte a posibles intrusos que el acceso no autorizado es ilegal y será perseguido:

sudo tee /etc/issue.net > /dev/null <<EOF
***********************************************
*  Acceso restringido a personal autorizado   *
*  Toda actividad es monitoreada y registrada *
*  El acceso no autorizado será procesado     *
***********************************************
EOF

Actívalo en SSH:

# En /etc/ssh/sshd_config
Banner /etc/issue.net

14. Configurar NTP (sincronización de tiempo)

Los logs de seguridad son inútiles si la hora del servidor está mal. Los timestamps inconsistentes hacen imposible correlacionar eventos entre servidores:

sudo apt install chrony -y
sudo systemctl enable --now chrony

# Verificar sincronización
chronyc tracking

15. Programar escaneos de vulnerabilidades

Instala Lynis para auditorías periódicas de seguridad:

sudo apt install lynis -y
sudo lynis audit system

Lynis genera un reporte con puntuación de hardening y recomendaciones específicas. Prográmalo semanal con cron y revisa el reporte:

# Crontab semanal
0 2 * * 0 /usr/bin/lynis audit system --quiet >> /var/log/lynis-weekly.log 2>&1

Script de hardening automatizado

Para aplicar todos los pasos en servidores nuevos, automatiza con un script o con Ansible. Aquí el resumen en un script:

#!/bin/bash
# hardening.sh — Hardening básico para Ubuntu 24.04
# Ejecutar como root en servidores NUEVOS antes de poner en producción

set -e

echo "=== Actualizando sistema ==="
apt update && apt upgrade -y

echo "=== Configurando actualizaciones automáticas ==="
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

echo "=== Configurando firewall ==="
ufw default deny incoming
ufw default allow outgoing
ufw limit 2222/tcp
ufw --force enable

echo "=== Instalando fail2ban ==="
apt install fail2ban -y
systemctl enable --now fail2ban

echo "=== Instalando auditoría ==="
apt install auditd -y
systemctl enable --now auditd

echo "=== Aplicando sysctl ==="
sysctl -p

echo "=== Ejecutando Lynis ==="
apt install lynis -y
lynis audit system --quiet

echo "=== Hardening completado ==="
echo "NOTA: Configura SSH manualmente (/etc/ssh/sshd_config)"
echo "NOTA: Revisa el reporte de Lynis en /var/log/lynis.log"

Siguientes pasos

Con estos 15 pasos cubiertos, tu servidor es significativamente más difícil de comprometer. Para ir más allá:

  • Automatización con Ansible — aplica el hardening a decenas de servidores en minutos con playbooks reproducibles
  • AIDE/Tripwire — detección de cambios no autorizados en archivos del sistema (integridad de archivos)
  • Wazuh — SIEM open source que correlaciona eventos de seguridad de todos tus servidores en un solo dashboard
  • Pentesting — contrata una auditoría de penetración para validar que el hardening es efectivo contra ataques reales
  • CIS Benchmark completo — esta guía cubre los puntos más críticos; el benchmark CIS completo tiene 200+ controles

Seguridad empresarial

¿Quieres que tus servidores nazcan seguros?

Implementamos hardening automatizado con Ansible y CIS benchmarks para que cada servidor nuevo de tu infraestructura esté protegido desde el primer minuto.

Solicitar auditoría

Preguntas frecuentes

Temas relacionados

#seguridad#hardening#linux#servidores#ssh#tutorial

¿Te fue útil? Compártelo

Artículos relacionados

Ver todos

Consultoría gratuita

¿Necesitas hardening profesional para tu infraestructura?

Auditamos y endurecemos tus servidores siguiendo benchmarks CIS con automatización Ansible para que cada servidor nuevo nazca seguro.

Solicitar auditoría