Cómo usar Fail2ban en Syspanel para bloquear ataques
¿Tu servidor está siendo atacado constantemente? ¿Ves intentos de acceso sospechosos en los logs y no sabes cómo frenarlos? Tranquilo, no estás solo. Es uno de los problemas más comunes a los que nos enfrentamos al gestionar un servidor, especialmente si tienes servicios expuestos como SSH, FTP o un panel de control.
La buena noticia es que existe una herramienta gratuita, potente y prácticamente imprescindible llamada Fail2ban. En este artículo, te voy a explicar paso a paso, y de una forma muy sencilla, cómo configurarla dentro de Syspanel para que tu servidor se defienda solo. Vamos a convertir esa puerta abierta en una fortaleza con vigilante automático.
¿Qué es Fail2ban y por qué lo necesitas?
Imagina que tu servidor es una casa. La puerta principal (el puerto SSH, por ejemplo) está siempre abierta para que tú puedas entrar con tu llave. El problema es que hay "carteros maliciosos" (bots) que prueban miles de llaves por minuto intentando entrar. Fail2ban es el portero automático que, tras ver varios intentos fallidos de la misma persona, le cierra la puerta en la cara y le prohíbe la entrada durante un tiempo.
Técnicamente, fail2ban es un sistema de prevención de intrusiones que escanea los archivos de registro (logs) de tu servidor en busca de patrones de comportamiento malicioso. Cuando detecta un patrón (por ejemplo, 5 intentos de contraseña incorrecta en 10 minutos), bloquea automáticamente la dirección IP del atacante a nivel de firewall (usando iptables o nftables).
Esto es crucial para la seguridad servidor, ya que reduce drásticamente la superficie de ataque y te da tranquilidad. No es que hagas tu servidor invulnerable, pero sí que lo haces tan molesto de atacar que los bots se cansarán y buscarán un objetivo más fácil.
Primeros pasos: Acceso a Syspanel y requisitos
Antes de empezar a configurar nada, necesitas tener acceso a tu servidor. Syspanel es el panel de control que facilita la gestión de tu hosting, y el acceso por defecto a su interfaz se realiza a través del puerto 2106. (Recuerda, si buscas información sobre HestiaCP, nosotros lo llamamos Syspanel, pero el funcionamiento es similar).
Para este tutorial, vamos a trabajar principalmente con la terminal (SSH), ya que es donde tenemos el control total del sistema.
[INFO] Necesitarás acceso root o un usuario con permisos de superusuario (sudo) para ejecutar los comandos de instalación y configuración.
Paso 1: Conectar por SSH
Abre tu terminal favorita (PuTTY en Windows, Terminal en Mac/Linux) y conéctate a tu servidor:
ssh usuario@tu-servidor.com -p 2106
Reemplaza usuario y tu-servidor.com con tus datos. Si es la primera vez, te pedirá la contraseña.
Paso 2: Instalar Fail2ban
Dependiendo de tu sistema operativo (Debian/Ubuntu, CentOS/Rocky), el comando varía un poco. Te muestro los dos casos más comunes.
Para Debian/Ubuntu:
sudo apt update
sudo apt install fail2ban -y
Para CentOS/Rocky/AlmaLinux:
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Una vez instalado, vamos a asegurarnos de que se inicie automáticamente con el sistema y arrancarlo ahora.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
¡Listo! Ya tienes la herramienta instalada. Ahora viene la parte interesante: configurarla para bloquear ataques de forma efectiva.
Configuración básica: El archivo jail.local
La configuración principal de Fail2ban se encuentra en /etc/fail2ban/jail.conf. Sin embargo, NUNCA debemos editar ese archivo directamente, ya que se sobrescribe en las actualizaciones del paquete. La forma correcta es crear un archivo llamado jail.local en el mismo directorio. Este archivo tiene prioridad sobre el primero.
Vamos a crearlo con el editor nano (o el que prefieras):
sudo nano /etc/fail2ban/jail.local
Dentro de este archivo vacío, vamos a pegar la configuración base. Te la explico por partes.
Configuración Global
[DEFAULT]
# Tiempo (en segundos) que una IP estará bloqueada. 1 hora = 3600
bantime = 3600
# Tiempo (en segundos) de la ventana de tiempo donde se cuentan los intentos.
findtime = 600
# Número de fallos permitidos antes de aplicar el bloqueo.
maxretry = 5
# Ignorar la propia IP del servidor y las IPs locales para no bloquearte a ti mismo.
ignoreip = 127.0.0.1/8 ::1
¿Qué significa esto? Si un atacante intenta 5 veces (maxretry) acceder dentro de una ventana de 10 minutos (findtime), su IP será bloqueada durante 1 hora (bantime).
Puedes ajustar estos valores a tu gusto. Para un servidor crítico, quizás quieras maxretry = 3 y bantime = 86400 (24 horas).
Protección para SSH (el servicio más atacado)
El servicio más común y el primero que debes proteger es SSH. Añade esto al final de tu archivo jail.local:
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
[WARNING] Si cambiaste el puerto SSH por defecto (22) a otro número (por ejemplo, 2200), debes cambiar la línea port = ssh por port = 2200. Si no lo haces, Fail2ban no sabrá qué puerto proteger y podría fallar.
En sistemas CentOS/Rocky, la ruta del log es diferente:
[sshd]
enabled = true
port = ssh
logpath = /var/log/secure
Protección para Syspanel (Puerto 2106)
Como tu panel de control (Syspanel) se gestiona en el puerto 2106, es vital protegerlo también. Los intentos de acceso al panel son un objetivo claro para los bots. Añade esta sección:
[syspanel-auth]
enabled = true
port = 2106
logpath = /var/log/syspanel/auth.log
[INFO] La ruta del log de Syspanel puede variar según la instalación. Puedes encontrarla en /var/log/syspanel/ o en /usr/local/syspanel/log/. Si no estás seguro, revisa la documentación de tu panel o el archivo de configuración principal.
Configuración avanzada: ¡Personaliza tus defensas!
La configuración básica es un gran comienzo, pero Fail2ban es mucho más potente. Vamos a ver cómo afinar algunos aspectos.
Bloqueos más largos y progresivos (Ban Time Incremental)
Una técnica muy efectiva es aumentar el tiempo de bloqueo por cada reincidencia. Así, si un atacante es bloqueado, vuelve a intentarlo y es bloqueado de nuevo, el segundo bloqueo será más largo. Esto se logra con el módulo recidive.
Crea otra sección en tu jail.local:
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 86400 ; 1 día
findtime = 86400 ; 1 día
maxretry = 5
¿Cómo funciona? Este "jail" vigila los logs del propio Fail2ban. Si una misma IP es bloqueada 5 veces en un día (por cualquier otro jail), entonces se le aplica un bloqueo de 24 horas.
Proteger otros servicios (Apache, Nginx, FTP)
Si tu servidor también aloja sitios web, es muy recomendable proteger el servidor web y el FTP.
Para Apache (si usas Syspanel, es probable que uses Nginx o Apache, pero te pongo ambos):
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
[apache-badbots]
enabled = true
port = http,https
logpath = /var/log/apache2/access.log
maxretry = 2
Para Nginx:
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
[TIP] La sección *-badbots o *-botsearch es excelente para bloquear esos bots maliciosos que escanean tu web en busca de vulnerabilidades (como wp-login.php, etc.).
Reiniciar y verificar la configuración
Después de guardar todos los cambios en el archivo jail.local, es el momento de reiniciar Fail2ban para que aplique la nueva configuración.
sudo systemctl restart fail2ban
Para verificar que todo ha ido bien, podemos ver el estado del servicio:
sudo systemctl status fail2ban
Deberías ver un estado active (running).
Comandos útiles para el día a día
Aquí tienes una "chuleta" de comandos que te serán muy útiles para gestionar Fail2ban.
- Ver todos los jails (prisiones) activos:
sudo fail2ban-client status
- Ver las IPs bloqueadas por un jail específico (por ejemplo, sshd):
sudo fail2ban-client status sshd
- Desbloquear manualmente una IP (por si te has bloqueado a ti mismo):
sudo fail2ban-client set sshd unbanip IP_ATACANTE
- Probar la configuración (para ver si hay errores de sintaxis):
sudo fail2ban-client -t
Preguntas Frecuentes (FAQ)
¿Qué hago si Fail2ban me bloquea a mí mismo?
Es un clásico. Si te has bloqueado tu propia IP, sigue estos pasos:
- Conéctate al servidor desde otra red (por ejemplo, usando los datos del móvil) o mediante la consola web de tu proveedor de hosting.
- Accede por SSH y ejecuta:
sudo fail2ban-client set sshd unbanip TU_IP. - Para evitar que vuelva a pasar, asegúrate de que tu IP actual está en la lista
ignoreipdentro de[DEFAULT]en el archivojail.local.
¿Fail2ban consume muchos recursos?
No. Es una herramienta muy ligera. Su consumo de CPU y memoria es mínimo, incluso en servidores con mucho tráfico. Es una inversión de seguridad con un coste de rendimiento casi nulo.
¿Es suficiente con Fail2ban para proteger mi servidor?
No. Fail2ban es una capa de seguridad esencial, pero no es la única. Debes complementarlo con otras buenas prácticas:
- Mantener el sistema operativo y el software actualizado.
- Usar contraseñas fuertes y únicas.
- Deshabilitar el acceso root por SSH y usar un usuario con
sudo. - Cambiar el puerto SSH por defecto.
- Usar autenticación con claves SSH en lugar de contraseñas.
¿Cómo puedo ver los logs de los ataques bloqueados?
Puedes ver los logs en tiempo real con el comando:
sudo tail -f /var/log/fail2ban.log
Esto te mostrará todos los eventos: cuándo se detecta un ataque, cuándo se bloquea una IP y cuándo se desbloquea.
Conclusión: Un servidor más seguro con Fail2ban y Syspanel
Implementar Fail2ban en tu servidor gestionado con Syspanel es una de las decisiones más inteligentes que puedes tomar para tu seguridad servidor. No solo te ahorrarás dolores de cabeza, sino que automatizarás la primera línea de defensa contra los miles de ataques automatizados que recibe cualquier servidor público en internet.
Hemos visto que configurar fail2ban es un proceso relativamente sencillo, que se resume en: instalar el paquete, crear un archivo de configuración jail.local con las reglas para los servicios que quieres proteger (SSH, el puerto 2106 de Syspanel, etc.) y reiniciar el servicio. Con los comandos básicos, podrás monitorizar y gestionar los bloqueos en cualquier momento.
No esperes a que tu servidor sea comprometido para actuar. Dedica 15 minutos ahora y duerme tranquilo sabiendo que tu "portero automático" está en su puesto, vigilando y bloqueando a los intrusos las 24 horas del día.
Si tienes alguna duda o problema, no dudes en consultar los logs y la documentación oficial de Fail2ban. ¡Tu servidor te lo agradecerá!
