Security 5 de enero, 2026 • 12 min de lectura

Hardening de servidores Linux en 10 pasos

Checklist completo de seguridad para endurecer tus servidores Linux y protegerlos contra amenazas comunes.

Introducción

Un servidor Linux recién instalado no está listo para producción. El hardening es el proceso de asegurar el sistema eliminando vectores de ataque innecesarios. Aquí está tu checklist definitivo.

Paso 1: Actualizar el sistema

Siempre empieza con las últimas actualizaciones de seguridad:

# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y

# RHEL/CentOS/Rocky
sudo dnf update -y

# Configurar actualizaciones automáticas de seguridad
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Paso 2: Configurar SSH de forma segura

SSH es la puerta de entrada. Asegúrala correctamente:

# Editar /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config

# Configuración recomendada:
Port 2222                          # Cambiar puerto por defecto
PermitRootLogin no                 # Deshabilitar login root
PasswordAuthentication no          # Solo autenticación por llave
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers tu_usuario              # Whitelist de usuarios

# Reiniciar SSH
sudo systemctl restart sshd

Paso 3: Configurar firewall (UFW/firewalld)

Bloquea todo excepto lo necesario:

# Con UFW (Ubuntu/Debian)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable

# Con firewalld (RHEL/CentOS)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Paso 4: Instalar y configurar Fail2Ban

Protección contra ataques de fuerza bruta:

sudo apt install fail2ban -y

# Crear configuración personalizada
sudo nano /etc/fail2ban/jail.local

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3

[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Paso 5: Deshabilitar servicios innecesarios

Menos servicios = menos superficie de ataque:

# Listar servicios activos
sudo systemctl list-unit-files --state=enabled

# Deshabilitar servicios innecesarios (ejemplos)
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon

# Verificar puertos abiertos
sudo ss -tulpn

Paso 6: Configurar SELinux o AppArmor

Mandatory Access Control añade una capa extra de seguridad:

# SELinux (RHEL/CentOS)
sudo setenforce 1
sudo sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config

# AppArmor (Ubuntu/Debian)
sudo systemctl enable apparmor
sudo systemctl start apparmor
sudo aa-status

Paso 7: Auditoría con Lynis

Herramienta de auditoría de seguridad automatizada:

sudo apt install lynis -y

# Ejecutar auditoría completa
sudo lynis audit system

# Revisar recomendaciones en:
# /var/log/lynis.log

Paso 8: Configurar límites de recursos

Prevenir ataques de denegación de servicio:

# /etc/security/limits.conf
* soft nofile 4096
* hard nofile 65536
* soft nproc 4096
* hard nproc 8192

# Kernel hardening en /etc/sysctl.conf
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
kernel.exec-shield = 1
kernel.randomize_va_space = 2

sudo sysctl -p

Paso 9: Monitoreo de integridad con AIDE

Detecta cambios no autorizados en archivos del sistema:

sudo apt install aide -y

# Inicializar base de datos
sudo aideinit

# Mover base de datos
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# Verificar integridad
sudo aide --check

# Automatizar con cron
echo "0 5 * * * /usr/bin/aide --check | mail -s 'AIDE Report' admin@example.com" | sudo crontab -

Paso 10: Logs centralizados y alertas

Configurar rsyslog para enviar logs a servidor central:

# /etc/rsyslog.conf
*.* @@log-server.example.com:514

# Instalar logwatch para reportes diarios
sudo apt install logwatch -y

# Configurar reporte diario
sudo logwatch --output mail --mailto admin@example.com --detail high

Checklist final

  • ✅ Sistema actualizado con parches automáticos
  • ✅ SSH asegurado (puerto no estándar, sin root, solo llaves)
  • ✅ Firewall activo con reglas restrictivas
  • ✅ Fail2Ban protegiendo contra fuerza bruta
  • ✅ Servicios innecesarios deshabilitados
  • ✅ SELinux/AppArmor en modo enforcing
  • ✅ Auditoría con Lynis ejecutada
  • ✅ Límites de recursos configurados
  • ✅ AIDE monitoreando integridad
  • ✅ Logs centralizados y alertas activas

⚠️ Advertencia:

Prueba todos estos cambios en un entorno de desarrollo primero. Un error en la configuración de SSH o firewall puede dejarte fuera del servidor.