Tutoriales de VPS
Qué hacer si Fail2Ban te bloquea el VPS (2026): guía de auto-rescate para cuando no puedes entrar por SSH, unbanip e ignoreip
Después de instalar Fail2Ban en un VPS, SSH deja de conectar de repente, posiblemente porque tu propia IP fue bloqueada por error por el jail de sshd. Las causas comunes incluyen contraseñas incorrectas que activan maxretry, IP dinámicas que no se añadieron a ignoreip, configuración de jail demasiado estricta y bans antiguos restaurados desde la base de datos tras un reinicio. Este artículo recorre la solución capa por capa: auto-rescate por consola/VNC, fail2ban-client status, unbanip, ignoreip, jail.local, dbpurgeage y cómo evitar otro autobloqueo.

Fail2Ban está pensado para prevenir ataques de fuerza bruta, pero con una configuración descuidada también puede dejarte fuera de tu propio VPS.
El escenario más típico: introduces mal la contraseña de SSH varias veces seguidas, o cambias a una nueva salida de red, y de repente descubres:
ssh: connect to host x.x.x.x port 22: Connection refused
Connection timed out
Permission denied
Si el servidor no está caído y el servicio SSH no está roto, es muy probable que Fail2Ban haya añadido tu IP a la lista de bloqueos del jail sshd.
Este artículo no trata de "cómo instalar Fail2Ban", sino de cómo recuperarte después de haberte bloqueado a ti mismo y cómo evitar que vuelva a ocurrir.
Si todavía tienes una sesión SSH abierta, o puedes iniciar sesión desde otra IP, primero revisa:
sudo fail2ban-client status
Luego mira el jail de SSH:
sudo fail2ban-client status sshd
Fíjate en:
Currently banned: el número actual de bloqueos;Banned IP list: la lista de IP bloqueadas;- si tu IP pública actual está en ella.
Consulta tu propia IP pública:
curl -4 ifconfig.me
Si tu IP está en la lista, el servicio SSH no está roto: te ha bloqueado Fail2Ban.
Si aún puedes entrar al VPS mediante otra IP, otro usuario, un jump host o una sesión conservada, desbloquea directamente:
sudo fail2ban-client set sshd unbanip 你的IP
Algunas versiones también permiten desbloquear una IP de todos los jails:
sudo fail2ban-client unban 你的IP
Si es solo un entorno de pruebas y quieres borrar temporalmente todos los bloqueos:
sudo fail2ban-client unban --all
En producción, no ejecutes unban --all a la ligera, porque también liberará IP de atacantes reales.
Tras desbloquear, prueba de nuevo:
ssh root@你的服务器IP
O:
ssh 用户名@你的服务器IP
Si no funciona ninguna conexión SSH, necesitas un inicio de sesión fuera de banda:
- Consola web del proveedor de nube;
- VNC / noVNC;
- Serial Console;
- Rescue Mode;
- Consola IPMI / KVM.
Tras iniciar sesión, no empieces a borrar reglas al azar; primero ejecuta:
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 你的IP
Si fail2ban-client no está disponible, detén temporalmente el servicio:
sudo systemctl stop fail2ban
Esto es solo un rescate temporal. En cuanto puedas entrar por SSH de nuevo, corrige la configuración de inmediato, o Fail2Ban podría volver a bloquearte tras un reinicio.
La ubicación correcta suele ser:
sudo nano /etc/fail2ban/jail.local
En [DEFAULT], añade:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 你的固定IP 你的VPN出口IP
Si tienes una subred fija en la oficina o en casa, también puedes usar CIDR:
ignoreip = 127.0.0.1/8 ::1 203.0.113.10 198.51.100.0/24
Tras guardar, recarga:
sudo fail2ban-client reload
O:
sudo systemctl reload fail2ban
Nota: ignoreip solo protege frente a bloqueos futuros; no necesariamente levanta automáticamente una IP ya bloqueada. Una IP ya bloqueada todavía necesita primero unbanip.
Archivos comunes de Fail2Ban:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
/etc/fail2ban/fail2ban.conf
El principio es simple:
jail.confes la configuración predeterminada; no se recomienda editarla, ya que las actualizaciones pueden sobrescribirla;jail.localcontiene la configuración de anulación local;jail.d/*.locales adecuado para dividir por servicio;fail2ban.confes la configuración propia de Fail2Ban, que contiene opciones relacionadas con la base de datos.
Una configuración separada de SSH puede escribirse así:
[sshd]
enabled = true
port = ssh
maxretry = 3
findtime = 10m
bantime = 1h
Si cambiaste SSH a un puerto distinto del 22, actualiza esto en consecuencia:
port = 2222
De lo contrario, la monitorización y las acciones de firewall de Fail2Ban podrían no coincidir con tu puerto SSH real.
Los tres parámetros principales:
| Parámetro | Significado | Valores comunes |
|---|---|---|
maxretry | Número de fallos permitidos dentro de la ventana de tiempo | 3-5 habituales para SSH |
findtime | Ventana de tiempo para contar fallos | 10m |
bantime | Cuánto dura el bloqueo | 1h, 24h |
Si lo configuras así:
maxretry = 1
findtime = 1h
bantime = 1w
entonces es muy fácil bloquearte a ti mismo durante una semana.
Para un VPS personal, un punto de partida relativamente seguro:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
Si realmente hay muchos ataques, considera el bloqueo progresivo en lugar de llevar bantime a varias semanas desde el principio.
Hay una situación muy molesta: ya te has añadido a ignoreip y te has desbloqueado, pero tras reiniciar Fail2Ban o el servidor, vuelves a estar bloqueado.
La causa puede ser que los registros de bloqueos antiguos siguen guardados en la base de datos de Fail2Ban.
Revisa la configuración:
sudo grep -n 'dbpurgeage\|dbfile' /etc/fail2ban/fail2ban.conf
dbpurgeage controla cuánto tiempo se conservan los registros en la base de datos. Si los registros antiguos permanecen, los bloqueos antiguos pueden restaurarse tras un reinicio.
Enfoque de diagnóstico:
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 你的IP
sudo systemctl reload fail2ban
Si sigue ocurriendo repetidamente, puedes detener temporalmente Fail2Ban, verificar la base de datos y la configuración, y luego iniciarlo de nuevo:
sudo systemctl stop fail2ban
sudo systemctl start fail2ban
No borres archivos de base de datos sin entender el impacto. En producción, también guardan registros de IP de atacantes reales.
En sistemas como Ubuntu 22.04/24.04 y Debian 12, muchos registros están en journald.
Puedes configurar esto en [DEFAULT]:
backend = systemd
Luego recarga:
sudo systemctl reload fail2ban
Si el backend no coincide, pueden surgir dos problemas:
- Fail2Ban no lee los registros de fallos de inicio de sesión SSH y no bloquea nada en absoluto;
- Un jail personalizado lee los registros equivocados y trata solicitudes normales como ataques.
Antes de cambiar el backend de registros, revisa primero los registros de Fail2Ban:
sudo journalctl -u fail2ban -n 100 --no-pager
sudo tail -n 100 /var/log/fail2ban.log
Las rutas de registro pueden variar entre distribuciones; en entornos systemd, revisa primero journalctl.
Muchos autobloqueos no vienen de SSH, sino de jails personalizados para Nginx, Traefik, Caddy o páginas de inicio de sesión de aplicaciones.
Por ejemplo, mientras depuras el inicio de sesión del panel, recibes 401/403 repetidos, que Fail2Ban identifica como un ataque:
sudo fail2ban-client status
sudo fail2ban-client status nginx-http-auth
sudo fail2ban-client status 自定义jail名
Desbloquear no siempre se reduce a sshd; depende del jail concreto:
sudo fail2ban-client set nginx-http-auth unbanip 你的IP
Si accedes al origen a través de Cloudflare, un proxy inverso o un balanceador de carga, confirma también si la aplicación recibe la IP real del cliente o la IP del proxy. De lo contrario, Fail2Ban podría bloquear al objetivo equivocado.
Para problemas de origen con Cloudflare, consulta: Qué hacer cuando tu sitio web en VPS muestra Cloudflare 521 / 522.
Antes de habilitar Fail2Ban, se recomienda hacer tres cosas primero:
- Confirmar que puedes iniciar sesión mediante la consola/VNC del proveedor de nube;
- Añadir tu IP fija o salida VPN a
ignoreip; - Mantener abierta una sesión SSH actual y no desconectarla de inmediato.
Tras habilitarlo, prueba:
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 50 --no-pager
No configures maxretry muy bajo y bantime muy largo cuando solo tienes una salida de red, sin acceso a consola y sin lista blanca.
Si sospechas que Fail2Ban te ha bloqueado, sigue este orden:
- Cambia de red o inicia sesión en el VPS usando una sesión SSH conservada.
- Ejecuta
fail2ban-client statuspara ver qué jails existen. - Ejecuta
fail2ban-client status sshdpara ver si tu IP está bloqueada. - Ejecuta
fail2ban-client set sshd unbanip 你的IPpara desbloquear. - Si SSH es completamente inaccesible, usa el VNC/consola/modo rescate del proveedor de nube.
- Añade
ignoreipa[DEFAULT]en/etc/fail2ban/jail.local. - Revisa si
maxretry/findtime/bantimees demasiado agresivo. - Revisa si un jail personalizado de Nginx/Traefik te está bloqueando por error.
- Si vuelves a estar bloqueado tras un reinicio, revisa
dbpurgeagey la persistencia de la base de datos. - Tras recargar, mantén una sesión SSH abierta para probar; no la desconectes de inmediato.
El autobloqueo de Fail2Ban no es un evento poco probable, especialmente en VPS nuevos, durante el endurecimiento de seguridad, al cambiar el puerto SSH o al depurar un proxy inverso.
Para una emergencia, primero usa fail2ban-client status para encontrar el jail, luego set sshd unbanip para desbloquear; si SSH es completamente inaccesible, recurre a la consola del proveedor de nube. La solución a largo plazo depende de ignoreip, un maxretry/findtime/bantime razonable, el jail.local correcto y comprender la persistencia de la base de datos. Fail2Ban es una buena herramienta, pero solo si no dejas que te cierre la puerta primero.