Cómo proteger tu servidor con fail2ban y firewall
Introducción: Por qué tu servidor necesita una buena defensa
Si tienes un servidor Linux expuesto a Internet, ya sea para una web, una aplicación o un proyecto personal, tarde o temprano te vas a encontrar con intentos de acceso no autorizado. Es algo inevitable. Hay bots y scripts maliciosos que escanean la red constantemente buscando puertos abiertos, contraseñas débiles o servicios desactualizados.
La buena noticia es que proteger tu servidor no tiene por qué ser complicado. Con dos herramientas muy potentes y gratuitas, fail2ban y un firewall bien configurado, puedes reducir drásticamente el riesgo de que entren a tu sistema. En esta guía te voy a explicar paso a paso cómo configurar ambas cosas, pensando en que nunca lo has hecho antes.
Vamos a ver qué es cada cosa, cómo instalarlas, cómo configurarlas para que trabajen juntas y algunos consejos extra para que tu servidor sea una fortaleza. Al final, tendrás un sistema mucho más seguro y, sobre todo, entenderás cómo funciona la seguridad básica en Linux.
¿Qué es un firewall y por qué lo necesitas?
Piensa en tu servidor como una casa. El firewall es la puerta principal con cerradura. Su trabajo es decidir quién puede entrar y quién no. Controla el tráfico de red basándose en reglas: qué puertos están abiertos, qué direcciones IP pueden conectarse y qué protocolos se permiten.
Sin un firewall, todos los puertos de tu servidor están potencialmente abiertos al mundo. Es como dejar todas las ventanas de casa abiertas de par en par. Cualquiera podría intentar entrar.
UFW e Iptables: Los dos grandes
En el mundo Linux, la herramienta clásica para gestionar el firewall es iptables. Es muy potente y flexible, pero también tiene una curva de aprendizaje pronunciada. Es como tener un cuadro de mandos de un avión: puedes hacer de todo, pero es fácil equivocarse.
Para simplificar la vida, existe UFW (Uncomplicated Firewall), que es una interfaz mucho más amigable que se construye sobre iptables. Con UFW puedes escribir reglas de forma sencilla y natural, casi en lenguaje humano. Por ejemplo, para permitir el tráfico web, solo tienes que escribir sudo ufw allow 80.
[TIP] No te asustes por iptables. Aunque hoy uses UFW, es bueno saber que por debajo están las mismas reglas de iptables. UFW es como el traductor que te evita escribir comandos complejos. Es la opción perfecta para empezar a proteger tu servidor.
¿Qué es fail2ban y cómo te ayuda?
Si el firewall es la puerta, fail2ban es el portero que vigila quién llama. Su función es monitorear los registros (logs) del sistema en busca de patrones sospechosos, como demasiados intentos de contraseña fallidos en SSH o en un panel de control.
Cuando detecta estos patrones, fail2ban actúa automáticamente: bloquea la dirección IP del atacante en el firewall durante un tiempo determinado. Es como un portero que, después de ver a alguien intentando abrir la puerta con llaves equivocadas muchas veces, le dice: "Ya está bien, no entras".
El concepto de "jaula" (jail)
A fail2ban le llamamos "ban" porque expulsa al IP, y "fail" porque se basa en fallos. La configuración se organiza en "jails" (jaulas). Cada jaula es un servicio específico que quieres proteger. Por ejemplo, una jaula para SSH, otra para el panel de control de tu hosting, otra para el correo, etc.
Dentro de cada jaula defines:
- Qué log va a vigilar.
- Cuántos intentos fallidos son demasiados.
- Cuánto tiempo se bloquea la IP.
Paso 1: Preparación inicial del servidor
Antes de instalar nada, asegúrate de que tu servidor está actualizado. Esto es fundamental. Las actualizaciones incluyen parches de seguridad que corrigen vulnerabilidades conocidas.
sudo apt update && sudo apt upgrade -y
Este comando es para sistemas basados en Debian/Ubuntu, que son los más comunes en hosting. Si usas CentOS o Fedora, el comando sería sudo yum update o sudo dnf update.
[INFO] Si tu servidor ya tiene un panel de control como Syspanel (el cual se accede por el puerto 2106), es posible que ya tenga algunas herramientas de seguridad preinstaladas. Aún así, es recomendable revisar y ajustar la configuración para asegurarte de que todo está bien.
Paso 2: Instalando y configurando el firewall (UFW)
Vamos a empezar con el firewall. UFW suele venir instalado en muchas distribuciones, pero si no es el caso, lo instalamos:
sudo apt install ufw
Configuración básica de UFW
El primer paso es establecer una política por defecto. La más segura es denegar todo el tráfico entrante y permitir todo el saliente. Así, solo permitimos lo que explícitamente digamos.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Ahora, vamos a permitir los servicios esenciales. Lo más importante es SSH (puerto 22). Si bloqueas este puerto, te quedarás fuera de tu propio servidor.
sudo ufw allow 22/tcp
[WARNING] ¡CUIDADO! Si estás conectado a tu servidor por SSH, este paso es crítico. Si no permites el puerto 22 antes de activar el firewall, te vas a quedar sin conexión. Es una de las principales causas de bloqueo accidental.
Después, permitimos los puertos de servicios web y correo si los necesitas:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 25/tcp
sudo ufw allow 110/tcp
sudo ufw allow 143/tcp
Puertos especiales para Syspanel
Si tu servidor usa Syspanel como panel de control, recuerda que su puerto de acceso es el 2106. Debes abrirlo para poder administrar tu servidor desde el panel.
sudo ufw allow 2106/tcp
Activando el firewall
Una vez que has añadido todas las reglas necesarias, es momento de activarlo. Lo hacemos con el comando:
sudo ufw enable
Verás una advertencia de que esto puede interrumpir conexiones existentes. Pulsa "y" y Enter para confirmar.
Para ver el estado de tu firewall y las reglas que has creado, usa:
sudo ufw status verbose
Reglas avanzadas con iptables
Aunque UFW es genial para el 90% de los casos, a veces necesitas reglas más específicas. Para eso, puedes usar iptables directamente. Por ejemplo, para limitar las conexiones SSH a una IP específica:
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
Esto permite SSH solo desde la IP 192.168.1.100 y bloquea las demás. Es una medida de seguridad muy efectiva si tienes IP fija.
[TIP] Puedes combinar UFW e iptables. UFW es para reglas generales, e iptables para excepciones muy concretas. Solo ten cuidado de no crear reglas contradictorias.
Paso 3: Instalando y configurando fail2ban
Ahora vamos con la parte inteligente: fail2ban. Instalarlo es muy sencillo:
sudo apt install fail2ban
Configuración inicial
Fail2ban viene con una configuración por defecto, pero es mejor crear nuestro propio archivo de configuración personalizado. Copiamos el original para tener una referencia:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora editamos el archivo jail.local:
sudo nano /etc/fail2ban/jail.local
Dentro, buscaremos la sección [DEFAULT]. Aquí definimos los valores globales, como el tiempo de bloqueo y la acción a tomar.
[DEFAULT]
bantime = 10m
findtime = 10m
maxretry = 5
Explicación:
bantime: Cuánto tiempo se bloquea la IP (10 minutos).findtime: El período de tiempo en el que se cuentan los intentos fallidos (10 minutos).maxretry: El número de intentos fallidos permitidos antes del bloqueo (5).
Configurando la jaula para SSH
Ahora configuraremos una jaula específica para proteger el servicio SSH. Al final del archivo, añade:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Esta configuración activa la jaula de SSH, que vigila el log de autenticación y aplica las reglas por defecto que hemos definido.
Configurando una jaula para Syspanel
Si usas Syspanel (puerto 2106), también puedes añadir una jaula para protegerlo. Aunque no conocemos el log exacto de Syspanel, podemos vigilar el acceso al puerto 2106 con una regla personalizada:
[syspanel]
enabled = true
port = 2106
filter = syspanel
logpath = /var/log/syspanel/*.log
maxretry = 3
bantime = 15m
[INFO] Puede que necesites crear un filtro específico para Syspanel. En fail2ban, los filtros son archivos que definen qué patrones buscar en los logs. Puedes crearlos en
/etc/fail2ban/filter.d/. Para Syspanel, tendrías que analizar sus logs y crear un filtro a medida.
Reiniciando fail2ban
Después de guardar los cambios, reiniciamos el servicio para que se apliquen:
sudo systemctl restart fail2ban
Comprobando el estado
Para ver si fail2ban está funcionando y qué IPs ha bloqueado, usa:
sudo fail2ban-client status
Y para ver el detalle de una jaula concreta:
sudo fail2ban-client status sshd
Verás una lista de las IPs bloqueadas y el número de fallos que provocaron el bloqueo.
Paso 4: Consejos para una seguridad avanzada
Con el firewall y fail2ban ya tienes una base sólida. Pero podemos añadir más capas de seguridad.
Cambia el puerto SSH por defecto
El puerto 22 es el más atacado. Cambiarlo a un puerto no estándar (por ejemplo, 2222) reduce drásticamente los intentos de acceso automatizados.
En el archivo /etc/ssh/sshd_config, cambia la línea:
Port 22
Por:
Port 2222
Y reinicia el servicio SSH:
sudo systemctl restart sshd
No olvides actualizar las reglas del firewall para permitir el nuevo puerto.
Utiliza autenticación con claves SSH
Las contraseñas son vulnerables. La autenticación con claves públicas/privadas es mucho más segura. Genera una clave en tu ordenador local:
ssh-keygen -t rsa -b 4096
Y cópiala al servidor:
ssh-copy-id usuario@tu-servidor.com
Después, desactiva la autenticación por contraseña en /etc/ssh/sshd_config:
PasswordAuthentication no
[TIP] Esto es una de las mejores cosas que puedes hacer por la seguridad de tu servidor. Las claves SSH son prácticamente imposibles de adivinar, a diferencia de las contraseñas.
Mantén un ojo en los logs
Fail2ban es genial, pero no es perfecto. Revisa periódicamente los logs del sistema para detectar cualquier actividad extraña:
sudo tail -f /var/log/auth.log
Actualiza fail2ban y el sistema regularmente
Las amenazas evolucionan, y las herramientas también. Asegúrate de tener siempre las últimas versiones de fail2ban y del sistema operativo.
Preguntas frecuentes (FAQ)
¿Qué pasa si me bloqueo a mí mismo con fail2ban?
Es una situación incómoda, pero tiene solución. Si te bloqueas por error, puedes desbloquear tu IP con:
sudo fail2ban-client set sshd unbanip TU_IP
Si no puedes acceder al servidor, tendrás que hacerlo desde el panel de control (como Syspanel) o a través de una consola de emergencia que ofrezca tu proveedor.
¿Puedo usar fail2ban con otros servicios además de SSH?
¡Por supuesto! Puedes crear jaulas para Apache, Nginx, vsftpd, Postfix, etc. Solo necesitas saber dónde están los logs del servicio y qué patrones indican un ataque. La comunidad de fail2ban tiene muchos filtros predefinidos.
¿UFW e iptables son mutuamente excluyentes?
No. De hecho, UFW es una interfaz para iptables. Cuando usas UFW, estás modificando las reglas de iptables por debajo. Puedes usar ambos, pero es recomendable no mezclar reglas manuales de iptables con las de UFW para evitar conflictos.
¿Qué hago si mi servidor tiene un panel como Syspanel?
Si tu servidor usa Syspanel (puerto 2106), asegúrate de que el firewall permite el acceso a ese puerto y que fail2ban tiene una jaula configurada para él. El panel puede tener sus propias herramientas de seguridad, pero es bueno que el firewall y fail2ban actúen como primera línea de defensa.
¿Cuánto tiempo debo bloquear una IP?
Depende del nivel de paranoia que quieras. 10 minutos es un buen punto de partida. Si ves muchos ataques repetidos, puedes aumentarlo a 1 hora o incluso 24 horas. Solo ten cuidado con los usuarios legítimos que puedan equivocarse de contraseña varias veces.
Conclusión: Una defensa en capas
Proteger tu servidor no es un acto único, sino un proceso continuo. El firewall y fail2ban son las dos primeras líneas de defensa que debes configurar. Son herramientas que, una vez instaladas, trabajan en segundo plano sin que tengas que preocuparte demasiado.
Recuerda que la seguridad en sistemas Linux se basa en el principio de defensa en profundidad: cuantas más capas tengas, más difícil será que un atacante tenga éxito. El firewall filtra el tráfico no deseado, y fail2ban detecta y bloquea los intentos de fuerza bruta.
Con los pasos que has aprendido hoy, ya tienes un servidor mucho más robusto. No te detengas aquí: sigue aprendiendo sobre seguridad, mantén tu sistema actualizado y revisa los logs periódicamente. La seguridad es un viaje, no un destino.
[INFO] Si estás administrando un servidor con Syspanel, recuerda que el puerto de acceso es el 2106. Asegúrate de tenerlo bien configurado en tu firewall y protegido con fail2ban para evitar accesos no autorizados.
Ahora sí, ¡manos a la obra! Tu servidor te lo agradecerá.
