¿Por qué hacer hardening?
Montar un servidor Linux y dejarlo con la configuración por defecto es como comprar una casa y no cambiar la cerradura. El sistema viene pensado para ser funcional, no para ser seguro. Y en cuanto lo conectas a internet, los escáneres automáticos empiezan a llamar a la puerta.
Este artículo no pretende ser una guía de seguridad militar, sino un checklist práctico de las medidas básicas que cualquier servidor Linux debería tener antes de ponerse en producción. Cosas que aprendes con los años y que, cuando las aplicas, duermes mucho más tranquilo.
1. Actualiza el sistema
Parece obvio, pero es el paso que más se salta. Un servidor recién instalado suele llevar paquetes con vulnerabilidades conocidas. Antes de nada:
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu
sudo dnf update -y # RHEL/Fedora
Después, configura las actualizaciones de seguridad automáticas:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Esto instala parches de seguridad críticos sin intervención manual. Para entornos de producción, puedes revisarlo después, pero al menos las vulnerabilidades graves estarán cubiertas.
2. Acceso SSH seguro
El puerto 22 abierto a internet es la puerta más llamativa para un atacante. Estas son las medidas mínimas:
Deshabilitar login por contraseña y usar solo claves SSH:
# En /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
Port 2222 # Cambia el puerto (opcional pero recomendado)
Reinicia el servicio:
sudo systemctl restart sshd
Con estas tres líneas eliminas el 90% de los ataques automatizados: no se puede entrar con contraseña, no se puede entrar como root y, si cambias el puerto, los escáneres de bots ni lo encuentran.
3. Firewall: solo lo necesario
No dejes puertos abiertos «por si acaso». Cada puerto abierto es una superficie de ataque. Con UFW (Ubuntu/Debian) es muy sencillo:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # Puerto SSH que hayas configurado
sudo ufw allow 80/tcp # HTTP si tienes web
sudo ufw allow 443/tcp # HTTPS si tienes web
sudo ufw enable
Para sistemas RHEL/Fedora, usa firewalld:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
La filosofía es simple: denegar todo por defecto y abrir solo lo imprescindible.
4. Fail2ban: contra ataques de fuerza bruta
Fail2ban monitoriza los logs del sistema y bloquea IPs que fallan reiteradamente al autenticarse. Es una capa extra que no debería faltar:
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
En /etc/fail2ban/jail.local puedes configurar:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
Esto bloquea durante 1 hora a cualquier IP que falle 3 veces al conectar por SSH.
5. Usuarios y privilegios
Nunca trabajes como root en el día a día. Crea un usuario con privilegios sudo:
sudo adduser tu_usuario
sudo usermod -aG sudo tu_usuario
Revisa periódicamente qué usuarios existen en el sistema y si todos son necesarios:
cat /etc/passwd | grep "/home" | cut -d: -f1
Si encuentras cuentas que no se usan, elimínalas o bloquéalas:
sudo usermod -L usuario_no_usado # Bloquear
sudo userdel usuario_no_usado # Eliminar
6. Protege el acceso a servicios web
Si tu servidor tiene servicios web expuestos, estas medidas son básicas:
- HTTPS obligatorio: Usa Certbot/Let’s Encrypt para certificados gratuitos. Hoy en día no hay excusa para servir HTTP plano.
- Headers de seguridad: Configura cabeceras HTTP como Strict-Transport-Security, X-Content-Type-Options y Content-Security-Policy en tu servidor web (Apache/Nginx).
- Rate limiting: Limita el número de peticiones por IP para mitigar ataques de denegación de servicio básicos.
7. Logs y monitorización
No puedes proteger lo que no ves. Configura logs centralizados y revisa periódicamente:
sudo apt install logwatch
sudo logwatch --detail High --mailto [email protected] --service All
Esto te envía un resumen diario de la actividad del servidor. También puedes instalar herramientas como Netdata o Prometheus + Grafana para monitorización en tiempo real.
8. Checklist rápido de hardening
| ✔️ | Medida |
|---|---|
| ☐ | Sistema actualizado con parches de seguridad |
| ☐ | SSH con claves, sin contraseña, sin root |
| ☐ | Firewall configurado con denegación por defecto |
| ☐ | Fail2ban activo para SSH y otros servicios |
| ☐ | Usuarios sin privilegios para tareas diarias |
| ☐ | HTTPS configurado en servicios web |
| ☐ | Logs monitorizados (resumen diario) |
| ☐ | Backups configurados y probados |
En resumen
El hardening no es un proyecto de fin de semana. Es un proceso continuo: actualizar, revisar, auditar, repetir. Pero con estas 8 medidas básicas cubres el 90% de los casos.
La mayoría de los ataques no son sofisticados. Buscan servidores mal configurados. Si aplicas estas pautas, tu servidor ya no será el blanco fácil, y los atacantes seguirán buscando la siguiente puerta abierta.
¿Qué medidas aplicas tú en tus servidores? ¿Alguna que haya funcionado especialmente bien? Cuéntalo en los comentarios.