Antes de instalar tu aplicación, base de datos o servicio, hay que asegurar la base. El hardening consiste en reducir la superficie de ataque: cuantas menos puertas y ventanas abiertas, menos oportunidades para un atacante. Estos cinco pasos son el mínimo indispensable para cualquier servidor Linux expuesto a Internet.

1. SSH con llaves, nunca con contraseña

Las contraseñas se adivinan por fuerza bruta; una clave criptográfica no. Genera un par de llaves, copia la pública al servidor y desactiva el acceso por contraseña.

# En tu equipo local
ssh-keygen -t ed25519 -C "admin@tuempresa"
ssh-copy-id usuario@servidor

# En el servidor: /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
Port 2222   # cambiar el puerto por defecto reduce el ruido de bots
Importante: confirma que puedes entrar con tu llave antes de cerrar el acceso por contraseña, o te quedarás fuera del servidor.

2. Mínimo privilegio

Nadie debería operar como root de forma habitual. Crea un usuario dedicado, dale acceso sudo y ejecuta cada servicio con su propia cuenta sin privilegios.

adduser deploy
usermod -aG sudo deploy
# Cada servicio con su propio usuario, sin shell de login
useradd -r -s /usr/sbin/nologin appservice

3. Actualizaciones automáticas

La mayoría de las brechas explotan vulnerabilidades ya parcheadas. Mantén el sistema al día de forma automática para el software de seguridad.

# Debian / Ubuntu
apt update && apt upgrade -y
apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

4. Cierra todo lo que no uses

Un firewall con política deny by default es tu mejor aliado. Abre solo los puertos estrictamente necesarios y cierra el resto.

# Con UFW (Uncomplicated Firewall)
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp   # SSH en puerto personalizado
ufw allow 443/tcp    # HTTPS
ufw enable

# Revisa qué está escuchando realmente
ss -tulpn

5. Logging y monitoreo

Si no registras, no puedes detectar ni investigar un incidente. Centraliza los logs, protege el acceso por fuerza bruta y revisa periódicamente los intentos fallidos.

# Fail2ban bloquea IPs tras varios intentos fallidos
apt install fail2ban
systemctl enable --now fail2ban

# Revisar accesos y errores de autenticación
journalctl -u ssh --since "today"
fail2ban-client status sshd
Siguiente nivel: alinea la configuración con un estándar reconocido como los CIS Benchmarks o las guías de NIST. Así el hardening deja de ser una lista ad-hoc y pasa a ser algo auditable y repetible.

Conclusión

Estos cinco pasos no requieren herramientas caras ni conocimientos avanzados, pero eliminan la gran mayoría de los ataques oportunistas. Son la base sobre la que construir todo lo demás. Si quieres una revisión completa de tus servidores según CIS/NIST, contáctanos.