Fail2ban en un VPS: protección básica contra fuerza bruta
- fail2ban
- ssh
- seguridad
- vps
- fuerza bruta
- infraestructura
Un VPS expuesto recibe ataques constantes
Si gestionas un VPS, sabes que en cuanto lo pones en marcha, empieza a recibir intentos de conexión. La mayoría son ataques de fuerza bruta automatizados que prueban combinaciones de usuario y contraseña en servicios como SSH. Ignorarlos es un riesgo innecesario, y aquí es donde Fail2ban se convierte en una herramienta esencial.
Aunque uses claves SSH y desactives el login de root, estos intentos siguen consumiendo recursos y llenando tus logs. Necesitas una primera línea de defensa que actúe de forma proactiva.
Cómo funciona Fail2ban para bloquear intrusos
Esta herramienta escanea los archivos de log de tu servidor en busca de patrones que indiquen un intento de ataque. Cuando detecta un número predefinido de fallos de autenticación desde una misma IP en un periodo de tiempo, activa el firewall para bloquear esa IP temporalmente. Es una capa de seguridad esencial y relativamente sencilla de implementar.
Mi regla es clara: cualquier VPS que gestiono para un cliente o para mí mismo, tiene este sistema funcionando desde el primer día. No es una solución total, pero filtra gran parte del ruido y los riesgos más básicos.
Instalación y configuración básica de Fail2ban en tu VPS
Instalar el software es un proceso estándar en la mayoría de distribuciones Linux. En sistemas basados en Debian/Ubuntu, se hace con un simple comando:
sudo apt update
sudo apt install fail2ban
Una vez instalado, el siguiente paso es configurar los “jails”. La herramienta usa un archivo jail.conf que no debes modificar directamente. En su lugar, crea un jail.local para tus configuraciones personalizadas y así evitar que tus cambios se sobrescriban en futuras actualizaciones.
Para SSH, una configuración básica en /etc/fail2ban/jail.local podría ser:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 10m
Con maxretry = 3, si una IP intenta autenticarse en SSH tres veces sin éxito en findtime = 10m (diez minutos), el sistema la bloqueará durante bantime = 1h (una hora). Después de guardar, reinicia el servicio con sudo systemctl restart fail2ban.
Para verificar las IPs bloqueadas, puedes usar el comando sudo fail2ban-client status sshd.
Jails comunes para otros servicios en tu servidor
Este sistema no se limita a SSH. Puedes proteger otros servicios que estén expuestos a internet y generen logs de intentos fallidos. Esto incluye servidores web, de correo o bases de datos.
Algunos jails que suelo habilitar para clientes son:
nginx-http-auth: Protege directorios con autenticación básica HTTP.nginx-dos: Detección de posibles ataques de denegación de servicio.postfixydovecot: Para servidores de correo.
La lógica es la misma: encontrar el log adecuado (logpath), definir un filtro si no existe uno por defecto, y establecer los parámetros de maxretry, bantime y findtime. Si gestionas un servidor y necesitas asegurar todos tus servicios, es clave tener backups automáticos en tu VPS — es la base de cualquier estrategia de seguridad.
El tradeoff honesto de usar Fail2ban
Es una herramienta robusta para lo que hace, pero no es una bala de plata.
Lo que ganas:
- Reducción de ruido en logs: Menos intentos de conexión fallidos que revisar.
- Protección básica automatizada: No tienes que estar pendiente de bloquear IPs manualmente.
- Ahorro de recursos: Los ataques de fuerza bruta consumen CPU y RAM; los corta antes.
- Disuade a atacantes básicos: La mayoría de bots pasarán al siguiente objetivo.
Lo que complicas:
- No es una solución total: Atacantes sofisticados pueden usar IPs rotatorias o proxies para evadirlo.
- Puede bloquear IPs legítimas: Una mala configuración o un usuario despistado puede auto-bloquearse.
- Falsa sensación de seguridad: Es una capa, no la única. El servicio sigue expuesto.
- Requiere monitoreo y ajustes: Los filtros pueden necesitar actualizaciones si los formatos de log cambian.
La realidad es que este sistema es una medida de higiene básica. Para una seguridad más robusta, especialmente en SSH, yo prefiero no exponer el puerto 22 en absoluto. Mi enfoque es usar Cloudflare Tunnel como única puerta de entrada al VPS, eliminando la superficie de ataque por completo para el acceso de gestión.
El sistema resuelve un problema real de manera efectiva para un tipo específico de ataque. Para asegurar un servidor de forma integral, este es solo el primer paso. Si quieres ir más allá de la protección básica y explorar estrategias de seguridad más avanzadas para tu infraestructura, te recomiendo revisar cómo gestionar certificados SSL automáticos con Let’s Encrypt y Traefik. Y para mantener la integridad de tus datos, asegúrate de tener una estrategia sólida de backups externos con rsync. También puedes considerar cómo la IA puede ayudarte a analizar logs y detectar anomalías en tu servidor para un monitoreo proactivo.
Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →
¿Necesitas que alguien se ocupe de tu web?
Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.