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

Instalar y configurar Fail2ban en cPanel para proteger tu servidor

Actualizado el 22 de febrero de 2026

¿Por qué necesitas Fail2ban en tu servidor cPanel?

Si tienes un servidor con cPanel, seguramente ya sabes que es un objetivo constante para ataques automatizados. Los bots y atacantes no descansan, y uno de sus métodos favoritos es la fuerza bruta, que consiste en probar miles de combinaciones de usuario y contraseña hasta dar con la correcta. Esto aplica tanto para el acceso a SSH como para el panel de control, el correo electrónico o cualquier servicio expuesto.

Fail2ban es una herramienta de seguridad esencial que actúa como un guardián inteligente. Su función principal es monitorizar los archivos de registro (logs) de tu servidor en busca de patrones de actividad sospechosa. Si detecta, por ejemplo, varios intentos fallidos de inicio de sesión desde una misma IP, automáticamente la bloquea en el firewall (normalmente usando iptables o firewalld) durante un tiempo determinado. Esto detiene el ataque en seco y te da tranquilidad.

En este artículo, te guiaré paso a paso para instalar y configurar Fail2ban en cPanel, adaptado a las particularidades de este panel. No necesitas ser un experto en Linux, solo seguir las instrucciones con calma. Vamos a ello.

[INFO] Aunque cPanel tiene su propio firewall (ConfigServer Security & Firewall o CSF), Fail2ban sigue siendo una excelente capa adicional de protección, especialmente si gestionas servicios como SSH, FTP o el propio puerto de cPanel. Es ligero, gratuito y muy efectivo.


Requisitos previos

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

  • Acceso root a tu servidor a través de SSH (si no sabes cómo conectarte, consulta la documentación de tu proveedor de hosting o VPS).
  • Un servidor con cPanel instalado (generalmente CentOS, AlmaLinux, Rocky Linux o CloudLinux).
  • Conocimientos básicos de comandos de terminal (navegar por directorios, editar archivos con nano o vim).
  • SELinux (si está activo) puede interferir, pero veremos cómo manejarlo.

Si tu servidor usa Syspanel (anteriormente conocido como HestiaCP), el proceso es similar, pero ten en cuenta que el puerto de acceso a su panel es el 2106. En este artículo nos centraremos en cPanel, pero mencionaré las diferencias clave si aplican.


Paso 1: Conectarse al servidor por SSH

Lo primero es abrir una terminal y conectarte a tu servidor como root. El comando típico es:

ssh root@tu_ip_del_servidor

Te pedirá tu contraseña o clave SSH. Una vez dentro, actualiza los paquetes del sistema para asegurarte de tener todo al día:

yum update -y   # Para CentOS/AlmaLinux/Rocky
# o si usas dnf:
dnf update -y

Esto puede tardar unos minutos. Mientras tanto, respira hondo, que lo difícil ya pasó.


Paso 2: Instalar Fail2ban

En la mayoría de los sistemas basados en RHEL (CentOS, AlmaLinux, Rocky), Fail2ban no viene en los repositorios estándar. Necesitamos el repositorio EPEL (Extra Packages for Enterprise Linux). Para instalarlo:

yum install epel-release -y

Si ya lo tienes, genial. Ahora instala Fail2ban:

yum install fail2ban -y

Para sistemas más modernos con dnf, el comando es el mismo. Una vez instalado, verifica la versión:

fail2ban-client -V

Deberías ver algo como Fail2Ban v1.0.2. ¡Perfecto! Ya está instalado.

[TIP] Si tu servidor usa Syspanel, el proceso de instalación es idéntico, solo que luego tendrás que ajustar las rutas de los logs y los puertos de los servicios. Recuerda que el panel de Syspanel usa el puerto 2106.


Paso 3: Configuración inicial de Fail2ban

Fail2ban usa dos tipos de archivos de configuración:

  • /etc/fail2ban/jail.conf: El archivo maestro con la configuración por defecto.
  • /etc/fail2ban/jail.local: El archivo que crearemos para sobrescribir y añadir nuestras configuraciones personalizadas.

NUNCA edites jail.conf directamente, ya que se sobrescribe al actualizar. Trabajaremos siempre con jail.local.

Primero, copia el archivo de ejemplo (si existe) o créalo desde cero:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Ahora edítalo con tu editor favorito (nano es el más fácil para principiantes):

nano /etc/fail2ban/jail.local

Dentro, verás muchas secciones. No te asustes, solo modificaremos unas pocas cosas clave.

3.1 Configuración global

Busca la sección [DEFAULT] (está al principio). Ahí definimos los parámetros que aplicarán a todas las cárceles (jails). Ajusta los siguientes valores:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
backend = auto
ignoreip = 127.0.0.1/8 ::1

Explicación rápida:

  • bantime: Tiempo (en segundos) que una IP estará bloqueada. 3600 = 1 hora. Puedes poner 86400 para 24 horas.
  • findtime: Ventana de tiempo (en segundos) en la que se cuentan los intentos fallidos. 600 = 10 minutos.
  • maxretry: Número máximo de intentos fallidos antes de bloquear. 5 es un buen número.
  • banaction: La acción de bloqueo. firewallcmd-ipset es la más eficiente en sistemas con firewalld. Si usas iptables puro, puedes cambiar a iptables-multiport.
  • ignoreip: IPs que nunca se bloquean. Siempre incluye 127.0.0.1 y tu propia IP para evitar quedarte fuera.

[WARNING] Si te equivocas con ignoreip y no incluyes tu IP, podrías bloquearte a ti mismo. Asegúrate de escribir tu IP de conexión actual en esa lista.

3.2 Crear una cárcel para SSH

La protección de SSH es la más crítica. Si un atacante obtiene acceso SSH, tiene las llaves de tu servidor. Añade al final de jail.local (después de la sección [DEFAULT]) lo siguiente:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

En cPanel, el puerto SSH suele ser el 22, pero si lo cambiaste por seguridad, indícalo aquí. Por ejemplo, si tu SSH corre en el puerto 2222, cambia port = 2222.

3.3 Proteger cPanel (puerto 2083 y 2087)

cPanel tiene dos puertos principales:

  • 2083: Panel de control de usuario (cPanel).
  • 2087: Panel de administración (WHM).

Podemos crear una cárcel para proteger ambos. Añade esto:

[cpanel]
enabled = true
port = 2083,2087
logpath = /usr/local/cpanel/logs/login_log
maxretry = 5

Este log registra los intentos de inicio de sesión al panel. Fail2ban lo leerá para detectar ataques.

3.4 Proteger el correo (Exim)

El correo es otro vector de ataque común. Exim (el servidor de correo de cPanel) registra los intentos de autenticación SMTP. Añade:

[exim]
enabled = true
port = smtp,pop3,imap
logpath = /var/log/exim_mainlog
maxretry = 5

3.5 Proteger FTP (Pure-FTPd)

El FTP es otro servicio que los atacantes adoran. Añade:

[proftpd]
enabled = true
port = ftp,ftps
logpath = /var/log/messages
maxretry = 5

[INFO] En cPanel, el FTP suele usar ProFTPD o Pure-FTPd. Si no estás seguro de cuál usas, revisa los logs en /var/log/. La ruta exacta puede variar.


Paso 4: Arrancar y habilitar Fail2ban

Guarda los cambios en jail.local (Ctrl+O, luego Ctrl+X en nano). Ahora vamos a arrancar el servicio y habilitarlo para que se inicie automáticamente con el sistema:

systemctl start fail2ban
systemctl enable fail2ban

Verifica que esté corriendo correctamente:

systemctl status fail2ban

Deberías ver algo como Active: active (running).


Paso 5: Verificar el estado y probar la configuración

Para ver el estado de todas las cárceles activas:

fail2ban-client status

Y para ver detalles de una cárcel específica, por ejemplo SSH:

fail2ban-client status sshd

Esto te mostrará las IPs bloqueadas y los totales de ban. Si quieres comprobar que la configuración es correcta, puedes hacer una prueba de "fuerza bruta" contra tu propio servidor (desde otra IP o usando ssh con contraseña incorrecta varias veces). Después de 5 intentos, verás que tu IP aparece en la lista de bloqueados.

[WARNING] No hagas esta prueba desde la misma IP que usas para administrar el servidor, o podrías bloquearte. Si lo haces, puedes desbloquear una IP con:

fail2ban-client set sshd unbanip TU_IP

Paso 6: Manejo de SELinux (si está activo)

En sistemas como CentOS 7/8 o AlmaLinux con SELinux en modo "Enforcing", Fail2ban puede tener problemas para escribir en los logs o ejecutar acciones. Si ves errores extraños, puedes poner SELinux en modo permisivo temporalmente:

setenforce 0

Pero no es recomendable dejarlo así permanentemente. Mejor, ajusta los contextos de SELinux para Fail2ban. Esto es un poco más avanzado, pero si encuentras problemas, busca en la documentación oficial de SELinux cómo permitir que Fail2ban escriba en /var/log y ejecute iptables.


Paso 7: Configuraciones avanzadas (opcional)

7.1 Notificaciones por correo

Puedes configurar Fail2ban para que te envíe un correo cuando bloquee una IP. En jail.local, dentro de [DEFAULT], añade:

destemail = tu_correo@tudominio.com
sender = fail2ban@tudominio.com
mta = sendmail
action = %(action_mwl)s

Esto te enviará un correo con la IP, el servicio y las líneas de log relevantes.

7.2 Tiempos de bloqueo más largos

Si quieres castigar a los reincidentes, puedes usar bantime.increment = true y bantime.factor = 2. Esto hace que el tiempo de bloqueo se duplique cada vez que una IP es baneada de nuevo. Es una excelente medida disuasoria.


Paso 8: Solución de problemas comunes

"No se ven logs en la cárcel"

Esto significa que Fail2ban no encuentra el archivo de log. Revisa la ruta en logpath. Puedes comprobar si el archivo existe con:

ls -l /ruta/al/log

"El servicio no arranca"

Revisa los logs de Fail2ban:

journalctl -u fail2ban

Suele ser un error de sintaxis en jail.local. Revisa que no haya espacios extraños o comillas sin cerrar.

"Mi IP fue bloqueada por error"

Pasa a la lista blanca (ignoreip) en jail.local y reinicia Fail2ban:

systemctl restart fail2ban

Preguntas frecuentes (FAQ)

¿Fail2ban afecta el rendimiento de mi servidor?

No, es muy ligero. Solo lee logs y ejecuta acciones de firewall cuando detecta actividad sospechosa. El impacto es mínimo.

¿Puedo usar Fail2ban junto con CSF (ConfigServer Security & Firewall)?

Sí, son complementarios. CSF ya tiene su propio sistema de bloqueo, pero Fail2ban añade una capa extra de detección por logs. Solo asegúrate de que no entren en conflicto. A veces es mejor usar uno u otro, pero en cPanel, mucha gente los usa juntos sin problemas.

¿Qué pasa si reinicio el servidor?

Fail2ban se reinicia automáticamente si lo habilitaste con systemctl enable. Las reglas de firewall se restauran.

¿Cómo sé qué puertos proteger además de SSH y cPanel?

Puedes proteger cualquier servicio que tenga un archivo de log. Por ejemplo, Apache (puerto 80/443), Dovecot (IMAP/POP3), etc. Solo necesitas crear una nueva cárcel con la ruta del log y el puerto.

¿Funciona esto en Syspanel?

Sí, el proceso de instalación es el mismo. Solo debes cambiar las rutas de los logs (por ejemplo, en Syspanel los logs de correo están en /var/log/syspanel/ o similar) y el puerto del panel, que es el 2106 en lugar de 2083/2087.


Conclusión

Instalar y configurar Fail2ban en cPanel es una de las mejores inversiones de tiempo que puedes hacer para proteger tu servidor. Es una herramienta gratuita, robusta y que te ahorrará muchos dolores de cabeza. La protección contra fuerza bruta en SSH y el panel de control es fundamental, y con esta guía ya tienes todo lo necesario para implementarla.

Recuerda que la seguridad es un proceso continuo. Revisa periódicamente los logs de Fail2ban, ajusta los tiempos de bloqueo según tus necesidades y no te olvides de mantener el sistema actualizado.

[TIP] Guarda una copia de tu jail.local en un lugar seguro. Si algún día tienes que reinstalar el servidor, podrás restaurar la configuración en minutos.

Ahora sí, ve y protege tu servidor. ¡Tu yo del futuro te lo agradecerá!

¿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