Todas las notas Seguridad

Hardening de Linux: lo mínimo que todo servidor necesita

8 min

Por qué importa el hardening

Un servidor recién instalado es un servidor vulnerable. Los defaults de la mayoría de distribuciones Linux priorizan la compatibilidad sobre la seguridad. SSH con password authentication, puertos abiertos, sin firewall, sin monitoreo de intentos de intrusión.

Si tu servidor tiene una IP pública, los escaneos automatizados empiezan en minutos. No se necesita ser un target específico; los bots escanean rangos de IP completos buscando servicios expuestos.

1. SSH: la puerta principal

SSH es el punto de entrada más atacado. Las configuraciones mínimas que todo servidor necesita:

# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

Lo que la mayoría ignora: cambiar el puerto de SSH (22 a otro) no es seguridad real; es “security through obscurity”. Los escaneos automatizados prueban todos los puertos. Lo que sí funciona: deshabilitar passwords y usar solo llaves SSH con passphrase.

2. Firewall con nftables

nftables reemplaza a iptables como el firewall estándar en Debian 12+. La diferencia principal: las reglas son declarativas y legibles.

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    # Loopback
    iif lo accept

    # Conexiones establecidas
    ct state established,related accept

    # SSH y HTTPS solamente
    tcp dport { 22, 443 } accept

    # Todo lo demás: drop silencioso
  }
}

Principio: política default drop. Solo se abre lo que explícitamente se necesita. Dos puertos abiertos (SSH + HTTPS) son suficientes para la mayoría de servidores web.

3. Fail2Ban: respuesta automática

Fail2Ban monitorea logs y banea IPs después de intentos fallidos. La configuración base:

# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
bantime = 86400
findtime = 600

Esto significa: 5 intentos fallidos en 10 minutos = ban de 24 horas. En la práctica, reduce los intentos de fuerza bruta de miles por día a prácticamente cero.

4. Actualizaciones automáticas de seguridad

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

Configurar para que solo aplique parches de seguridad automáticamente. Las actualizaciones de features se hacen manualmente para evitar breaking changes.

5. Lo que la mayoría olvida

Configuraciones que rara vez se mencionan en guías de hardening pero que importan en producción:

  • sysctl hardening: Deshabilitar IP forwarding, ICMP redirects, y source routing. Previene ataques de red a nivel kernel.
  • Permisos de cron: Limitar qué usuarios pueden crear cron jobs con /etc/cron.allow.
  • Logs centralizados: Sin logs, no hay auditoría. journald con persistencia habilitada como mínimo.
  • Banner SSH: Remover el banner del sistema operativo que delata la versión exacta del OS.

Resultado

Un servidor hardenizado no es impenetrable; ningún sistema lo es. Pero cada capa de defensa aumenta el costo de un ataque. El objetivo no es ser invulnerable, sino hacer que atacar tu servidor sea más costoso que pasar al siguiente target.

Estas configuraciones toman menos de una hora en implementar y cubren el 90% de los vectores de ataque más comunes contra servidores Linux expuestos a internet.

Estos temas son relevantes para tu negocio?

Si estás enfrentando problemas similares, podemos hablar sobre cómo resolverlos para tu caso específico.

Conversemos