Todas las notas Seguridad

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

Por Agustín Ahumada 8 min

Por qué importa

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

Si el 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. Configuración mínima de seguridad:

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

Un punto importante: 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 completamente y usar solo llaves SSH con passphrase.

2. Firewall con nftables

nftables reemplaza a iptables como 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:

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

5 intentos fallidos en 10 minutos equivalen a un 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

Solo parches de seguridad de forma automática. Las actualizaciones de features se aplican manualmente para evitar breaking changes.

5. Lo que la mayoría olvida

Configuraciones que rara vez aparecen 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. Delata la versión exacta del OS sin necesidad.

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 el 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