Hardening básico de servidores Linux

Saltar al contenido principal
< Todos los temas
Imprimir

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:

code
# 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:

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

Aplica los cambios:

code
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:

code
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

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

# Forzar contraseñas fuertes
sudo dnf install libpwquality

Edita /etc/security/pwquality.conf:

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

Configura expiración de contraseñas:

code
sudo chage -M 90 -W 14 admin

5. Limitar sudo

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

code
# /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:

code
# 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:

code
sudo sysctl --system

7. Desactivar servicios innecesarios

code
# 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

code
sudo dnf install fail2ban

Crea /etc/fail2ban/jail.local:

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

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

Comprobar IPs baneadas:

code
sudo fail2ban-client status sshd

9. Auditoría con auditd

code
sudo dnf install audit
sudo systemctl enable --now auditd

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

code
# 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:

code
sudo augenrules --load

Consultar eventos:

code
sudo ausearch -k identity -ts recent

Checklist rápido

Medida Comando de verificación
Sistema actualizado dnf check-update
Root SSH desactivado grep PermitRootLogin /etc/ssh/sshd_config
Firewall activo firewall-cmd --list-all
fail2ban corriendo fail2ban-client status
Servicios mínimos systemctl list-units --state=running
Auditoría activa auditctl -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.

 

FUENTE