Hardening básico de servidores Linux

Terminal de Linux con código, representando la configuración segura de servidores

¿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.

Deja un comentario