🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo instalar y configurar fail2ban en CentOS 7 para proteger SSH

Actualizado el 26 de noviembre de 2025

¿Tu servidor CentOS 7 recibe intentos de acceso SSH sospechosos constantemente? Es un problema muy común. Cada vez que alguien intenta adivinar tu contraseña miles de veces, está poniendo en riesgo la seguridad de tu servidor. Pero no te preocupes, existe una herramienta gratuita y muy potente que te ayudará a bloquear automáticamente a esos atacantes: fail2ban.

En esta guía completa, aprenderás paso a paso cómo instalar, configurar y optimizar fail2ban en CentOS 7 para proteger SSH de forma efectiva. Al final, tendrás un sistema que detecta los intentos fallidos de inicio de sesión y bloquea las IPs maliciosas durante el tiempo que tú decidas.


¿Qué es fail2ban y por qué necesitas proteger SSH?

fail2ban es un sistema de prevención de intrusiones que escanea los archivos de registro (logs) de tu servidor en busca de patrones de ataques, como múltiples intentos fallidos de contraseña. Cuando detecta una IP que está haciendo demasiados intentos, la bloquea temporalmente en el firewall (normalmente iptables o firewalld).

Proteger SSH es crítico porque el puerto 22 es el punto de entrada principal para administrar tu servidor. Sin protección, cualquier bot en internet puede intentar forzar tu contraseña sin descanso. Con fail2ban, reduces drásticamente el riesgo de ataques de fuerza bruta.


Requisitos previos

Antes de empezar, asegúrate de tener lo siguiente:

  • Un servidor con CentOS 7 instalado y acceso root (o un usuario con sudo).
  • Conexión a internet para descargar los paquetes.
  • Al menos 10 minutos de tiempo libre.
  • Conocimientos básicos de la terminal (no te preocupes, los comandos son sencillos).

[TIP] Si estás usando un panel de control como Syspanel (antes conocido como HestiaCP), recuerda que su puerto de acceso es el 2106 y no interfiere con esta configuración. De hecho, fail2ban también puede proteger otros servicios de Syspanel si lo configuras adecuadamente.


Paso 1: Actualizar el sistema e instalar el repositorio EPEL

fail2ban no viene en los repositorios oficiales de CentOS 7, así que primero necesitamos habilitar el repositorio EPEL (Extra Packages for Enterprise Linux).

1.1 Actualizar los paquetes actuales

Conéctate a tu servidor por SSH y ejecuta:

sudo yum update -y

Esto asegura que tengas las últimas versiones de los paquetes.

1.2 Instalar el repositorio EPEL

EPEL proporciona software adicional para CentOS. Instálalo con:

sudo yum install epel-release -y

1.3 Verificar la instalación

Puedes comprobar que el repositorio se agregó correctamente:

yum repolist | grep epel

Deberías ver el repositorio listado.


Paso 2: Instalar fail2ban en CentOS 7

Ahora que tenemos EPEL, instalar fail2ban es muy sencillo.

2.1 Instalar el paquete

Ejecuta el siguiente comando:

sudo yum install fail2ban -y

El proceso descargará e instalará fail2ban junto con sus dependencias (como Python y firewalld).

2.2 Habilitar e iniciar el servicio

Una vez instalado, necesitamos habilitar el servicio para que arranque automáticamente al iniciar el servidor y luego iniciarlo:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

2.3 Verificar que está funcionando

Puedes comprobar el estado del servicio con:

sudo systemctl status fail2ban

Deberías ver un mensaje que diga "active (running)".

[INFO] Si ves algún error, no te alarmes. A menudo es porque el archivo de configuración aún no está creado. Lo haremos en el siguiente paso.


Paso 3: Configuración básica de fail2ban para proteger SSH

La configuración principal de fail2ban se encuentra en /etc/fail2ban/jail.conf. Sin embargo, no modifiques ese archivo directamente, ya que se sobrescribe en las actualizaciones. En su lugar, crearemos un archivo local de configuración.

3.1 Crear el archivo de configuración local

Crea un archivo llamado jail.local en el directorio de configuración:

sudo nano /etc/fail2ban/jail.local

3.2 Configuración general

Dentro de jail.local, pega el siguiente contenido básico. Explicaremos cada parte después.

[DEFAULT]
# Ignorar IPs de confianza (por ejemplo, tu propia IP)
ignoreip = 127.0.0.1/8 ::1

# Tiempo de prohibición en segundos (1 hora = 3600)
bantime = 3600

# Tiempo de la ventana de observación en segundos (10 minutos)
findtime = 600

# Número máximo de intentos fallidos antes de la prohibición
maxretry = 5

# Acción a tomar: bloquear con firewalld (por defecto en CentOS 7)
banaction = firewallcmd-ipset

# Enviar correo al administrador (opcional, requiere configurar MTA)
# action = %(action_mwl)s

[sshd]
# Habilitar la protección para SSH
enabled = true

# Puerto de SSH (normalmente 22)
port = ssh

# Archivo de log de SSH
logpath = %(sshd_log)s

# Usar la configuración del bloque [DEFAULT]

3.3 Explicación de las variables clave

  • ignoreip: Lista de IPs que nunca serán bloqueadas. Siempre incluye 127.0.0.1 (localhost). Si tienes una IP fija en tu casa u oficina, agrégala separada por espacios.
  • bantime: Duración del bloqueo en segundos. 3600 = 1 hora. Puedes poner 86400 para un día o -1 para bloqueo permanente (no recomendado sin supervisión).
  • findtime: Ventana de tiempo en segundos durante la cual se cuentan los intentos fallidos.
  • maxretry: Número de intentos fallidos permitidos dentro de findtime antes de ser bloqueado. 5 es un valor seguro.
  • banaction: La acción que ejecutará fail2ban al bloquear. En CentOS 7, firewallcmd-ipset es lo más eficiente.

[WARNING] No uses bantime = -1 al principio. Si bloqueas accidentalmente tu propia IP, te quedarás fuera del servidor. Siempre ten una IP de respaldo en ignoreip.

3.4 Guardar y cerrar el archivo

En nano, presiona Ctrl + X, luego Y para confirmar y Enter para guardar.


Paso 4: Reiniciar fail2ban y verificar la protección SSH

Después de crear la configuración, debemos reiniciar el servicio para que aplique los cambios.

4.1 Reiniciar el servicio

sudo systemctl restart fail2ban

4.2 Verificar el estado de la cárcel SSH

Puedes ver las reglas activas para SSH con:

sudo fail2ban-client status sshd

La salida debería mostrar algo como:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/secure
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Si ves "Currently banned: 0", significa que aún no se ha bloqueado ninguna IP. ¡Eso es bueno! Significa que tu servidor está limpio (por ahora).

4.3 Probar que funciona

Para probar, puedes intentar conectarte a tu servidor desde otra terminal con una contraseña incorrecta varias veces. Después de 5 intentos, fail2ban bloqueará esa IP. Luego ejecuta de nuevo el comando de estado y verás la IP en la lista.


Paso 5: Configuraciones avanzadas (opcionales)

Una vez que lo básico funciona, puedes ajustar fail2ban para que se adapte mejor a tus necesidades.

5.1 Aumentar el tiempo de bloqueo

Si quieres bloquear a los atacantes por más tiempo, cambia bantime en jail.local:

bantime = 86400  # 24 horas

5.2 Ignorar tu propia IP

Para evitar bloquearte accidentalmente, agrega tu IP pública a ignoreip:

ignoreip = 127.0.0.1/8 ::1 192.168.1.100

Reemplaza 192.168.1.100 con tu IP real (puedes saberla visitando whatismyip.com).

5.3 Recibir notificaciones por correo

Si quieres que fail2ban te envíe un correo cada vez que bloquea una IP, descomenta la línea action en jail.local:

action = %(action_mwl)s

Pero necesitarás un servidor de correo (MTA) configurado, como Postfix. Esto es más avanzado.

5.4 Proteger otros servicios

fail2ban también puede proteger servicios como Apache, Nginx, FTP o incluso Syspanel (puerto 2106). Solo necesitas crear una nueva sección en jail.local. Por ejemplo, para proteger el panel de Syspanel, podrías agregar:

[syspanel]
enabled = true
port = 2106
logpath = /var/log/syspanel/auth.log
maxretry = 3
bantime = 3600

Ajusta la ruta del log según tu instalación de Syspanel.


Paso 6: Monitorear y gestionar fail2ban

Aprende algunos comandos útiles para administrar fail2ban.

6.1 Ver todas las cárceles activas

sudo fail2ban-client status

6.2 Desbloquear una IP manualmente

Si bloqueaste accidentalmente una IP legítima, puedes desbloquearla con:

sudo fail2ban-client set sshd unbanip 192.168.1.100

Reemplaza la IP por la que deseas desbloquear.

6.3 Ver los logs de fail2ban

Los registros de actividad se guardan en /var/log/fail2ban.log. Puedes revisarlos con:

sudo tail -f /var/log/fail2ban.log

Esto te mostrará en tiempo real qué IPs están siendo bloqueadas.


Preguntas frecuentes (FAQ)

¿fail2ban consume muchos recursos del servidor?

No. Es muy ligero. Solo analiza los logs en tiempo real y actualiza las reglas del firewall cuando es necesario. En un servidor promedio, su impacto en CPU y memoria es mínimo.

¿Puedo usar fail2ban junto con firewalld?

Sí, en CentOS 7 fail2ban está diseñado para integrarse con firewalld mediante la acción firewallcmd-ipset. Es la combinación recomendada.

¿Qué hago si me bloqueo a mí mismo?

Si te bloqueas, puedes conectarte al servidor a través de un panel de control como Syspanel (puerto 2106) o mediante la consola de tu proveedor de hosting (VPS). Luego, ejecuta el comando fail2ban-client set sshd unbanip TU_IP para desbloquearte.

¿Es necesario configurar algo más para proteger SSH?

fail2ban es una capa de seguridad excelente, pero no es suficiente por sí solo. Te recomiendo también:

  • Usar autenticación con llaves SSH en lugar de contraseña.
  • Cambiar el puerto SSH por defecto (puerto 22) a uno no estándar.
  • Mantener el sistema actualizado.

¿Fail2ban protege contra ataques DDoS?

No. fail2ban está diseñado para ataques de fuerza bruta, no para DDoS. Para eso necesitas herramientas como Cloudflare o mod_evasive.


Conclusión

Has aprendido a instalar y configurar fail2ban en CentOS 7 para proteger SSH de ataques de fuerza bruta. Este pequeño pero poderoso programa hará que tu servidor sea mucho más seguro, bloqueando automáticamente a los atacantes y dándote tranquilidad.

Recuerda que la seguridad es un proceso continuo. Revisa periódicamente los logs de fail2ban para detectar patrones de ataque y ajusta la configuración según sea necesario. Y si usas Syspanel, no olvides proteger también su puerto de acceso (2106).

Ahora, tu servidor está un paso más cerca de ser un búnker. ¡Disfruta de la tranquilidad de saber que los malos se quedarán fuera!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel