Hardening básico de servidores Linux

Lista de medidas esenciales para securizar un servidor Linux recién instalado: SSH, usuarios, firewall, kernel y auditoría.

Hardening básico de servidores Linux

Por qué hacer hardening

Un servidor Linux con la instalación por defecto no está preparado para producción. Los valores predeterminados priorizan la compatibilidad sobre la seguridad. Un hardening básico reduce drásticamente la superficie de ataque sin complicar la administración diaria.

1. Mantener el sistema actualizado

Lo más básico y lo más efectivo:

# RHEL/Rocky/Oracle Linux
sudo dnf update -y
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic-install.timer

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

2. Securizar SSH

Edita /etc/ssh/sshd_config:

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers admin deploy

Aplica los cambios:

sudo systemctl restart sshd

Recuerda abrir el nuevo puerto en el firewall antes de reiniciar SSH para no quedarte fuera.

3. Configurar el firewall

Abre solo lo necesario:

sudo firewall-cmd --permanent --remove-service=ssh
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
sudo firewall-cmd --list-all

4. Política de usuarios

# Eliminar usuarios innecesarios
sudo userdel -r games
sudo userdel -r ftp

# Forzar contraseñas fuertes
sudo dnf install libpwquality

Edita /etc/security/pwquality.conf:

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

Configura expiración de contraseñas:

sudo chage -M 90 -W 14 admin

5. Limitar sudo

Evita dar ALL=(ALL) ALL a todos. Usa permisos granulares en /etc/sudoers.d/:

# /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart app, /usr/bin/journalctl -u app

Así el usuario deploy solo puede reiniciar la app y ver sus logs.

6. Parámetros de kernel

Añade a /etc/sysctl.d/90-hardening.conf:

# Desactivar IP forwarding (si no es un router)
net.ipv4.ip_forward = 0

# Ignorar ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

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

# Ignorar pings broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Protección contra IP spoofing
net.ipv4.conf.all.rp_filter = 1

# Desactivar source routing
net.ipv4.conf.all.accept_source_route = 0

Aplicar:

sudo sysctl --system

7. Desactivar servicios innecesarios

# Ver servicios activos
systemctl list-units --type=service --state=running

# Desactivar lo que no necesites
sudo systemctl disable --now cups
sudo systemctl disable --now avahi-daemon
sudo systemctl disable --now bluetooth

8. Configurar fail2ban

sudo dnf install fail2ban

Crea /etc/fail2ban/jail.local:

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

[sshd]
enabled = true
port = 2222
sudo systemctl enable --now fail2ban

Comprobar IPs baneadas:

sudo fail2ban-client status sshd

9. Auditoría con auditd

sudo dnf install audit
sudo systemctl enable --now auditd

Reglas básicas en /etc/audit/rules.d/hardening.rules:

# Monitorizar cambios en /etc/passwd y /etc/shadow
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity

# Monitorizar cambios en sudoers
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers

# Monitorizar cambios en sshd_config
-w /etc/ssh/sshd_config -p wa -k sshd

Cargar las reglas:

sudo augenrules --load

Consultar eventos:

sudo ausearch -k identity -ts recent

Checklist rápido

MedidaComando de verificación
Sistema actualizadodnf check-update
Root SSH desactivadogrep PermitRootLogin /etc/ssh/sshd_config
Firewall activofirewall-cmd --list-all
fail2ban corriendofail2ban-client status
Servicios mínimossystemctl list-units --state=running
Auditoría activaauditctl -l

Conclusión

Estas medidas cubren lo esencial. No hacen el servidor invulnerable, pero elevan significativamente el nivel de esfuerzo necesario para comprometerlo. El siguiente paso sería implementar SELinux en modo enforcing y configurar un SIEM centralizado para correlacionar los logs de auditoría.

## Nota

✍️ Transparencia: Este artículo ha sido creado con el apoyo de herramientas de inteligencia artificial. Toda la información técnica ha sido revisada y validada por el autor antes de su publicación.

$ curl tengoping.com/rss.xml | subscribe [suscribirse por RSS →]