
Internet está lleno de gente con menos vergüenza que un gato en una matanza, así que imagino que mi Raspberry Pi, al estar las 24 horas conectada a Internet, estará siendo atacada regularmente. Por este motivo, he decidido instalar Fail2ban.
Si logras poner este tutorial en marcha, descubrirás que no estoy exagerando.
¿Qué es Fail2ban?
Fail2ban es una aplicación que te ayudará a proteger tu servidor contra ataques maliciosos y con la que podrás mantener tus datos seguros.
Fail2ban evitará los accesos de bots, es decir, de máquinas automatizadas que realizan intentos de acceso indiscriminados a los servidores. Este tipo de bots son muy comunes en Internet y simplemente se dedican a intentar loguearse en los servidores, probando diferentes usuarios y claves de acceso, para autorizarse correctamente y tomar el control de la máquina.
Fail2ban se encarga de monitorizar los registros de acceso al servidor en busca de fallos de acceso e impidiendo nuevos intentos de login desde las direcciones IP involucradas, por un tiempo determinado.
Como instalar Fail2ban
Para instalar fail2ban deberemos abrir una terminal y escribir lo siguiente:
sudo apt install fail2ban python3-systemd
Configuración
La configuración de Fail2ban se encuentra en la carpeta «/etc/fail2ban/«. Allí encontraremos un archivo llamado «jail.conf» con las configuraciones del sistema.
Pero nosotros trabajaremos con una copia del archivo jail.conf a la que llamaremos jail.local, ya que así evitaremos que tras una actualización este pueda ser sustituido por la versión por defecto, cambiando así toda nuestra configuración.
El archivo jail.local se carga después de jail.conf y en él realizaremos nuestra configuración, por lo que todo lo que se escriba en jail.local es lo que se va a tener en cuenta definitivamente.
La copia del archivo jail.conf, la haremos desde la terminal con el comando cp (copy)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora abre el archivo en cuestión
sudo nano /etc/fail2ban/jail.local
Configuración Default (por defecto)
En la sección [DEFAULT] encontramos las configuraciones predeterminadas que afectarán a todos los jail. Todas las configuraciones que pongas en [DEFAULT] son heredadas por los jail
En la sección «[DEFAULT]» encontramos la configuración global de las opciones. Allí veremos diversas variables a definir como las siguientes:
- ignoreip: Aquí puedes añadir direcciones IP que nunca serán baneadas por Fail2ban. Por ejemplo, nuestra propia dirección IP.
- bantime: es el tiempo que una IP será baneada, expresado en segundos, minutos, horas, días …. (por defecto en 10 minutos)
- findtime: es el tiempo que transcurre entre intentos de conexión antes de ser baneado. (por defecto en 10 minutos)
- maxretry: es el número máximo de intentos de login que podrán realizarse antes de que la IP sea baneada. (por defecto en 5 intentos)

Nota si quieres que se ignoren todas las ips procedentes de tu red local, escribe la primera dirección IP (que suele ser la del router) seguido de un /24, esto hará que no se tengan en cuenta las direcciones de la 1 a la 254.
Seguimos cambiando otras cosas de la sección Default.
Como yo no uso iptables, ya que el firewall lo tengo activo a nivel de router, haremos algunos cambios.
Busca las siguientes líneas y comenta con el signo #
[Default]
banaction = iptables-multiport
banaction_allports = iptables-allports
Pega debajo las siguientes líneas.
banaction = nftables
banaction_allports = nftables[type=allports]
Quedando como en la siguiente imagen.

Guarda con Ctrl + o
Configuración de Jail
Baja hasta la sección JAILS
, SSH servers
, [sshd]
.
#
# JAILS
#
#
# SSH servers
#
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and det>
#mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Justo debajo de #mode = normal, añade lo siguiente:
enabled = true
Esto habilitada el jail sshd.
Debajo, moddifica las líneas en negrita, que son, el puerto de conexión, la ruta de log de eventos y el backend
[sshd]
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
Quedando todo así:
#
# JAILS
#
#
# SSH servers
#
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and det>
#mode = normal
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
Nota: Cambia port por el puerto que usas en tu servidor ssh
Reinicia el el servicio fail2ban así:
sudo systemctl restart fail2ban
Hasta aquí todo listo, ya solo queda comprobar que todo va bien.
Comprobaciones.
Vamos a realizar una serie comprobaciones para ver si se están ejecutando correctamente los servicios, estados y advertencias.
Test estado del servicio
Comprobamos el estado del servicio con:
sudo systemctl status fail2ban
Es posible que después de hacer una status, el servicio aparezca inactivo, como se muestra en la siguiente imagen.

Para arreglar esto, haz lo siguiente. En una terminal, escribe:
sudo echo "sshd_backend = systemd" >> /etc/fail2ban/paths-debian.conf
Reinicia el servicio con:
sudo systemctl restart fail2ban
Y volvemos a ver el estado de como está el servicio:
sudo systemctl status fail2ban

Ahora está todo correcto, el servicio aparece activo y corriendo.
Test estado general de fail2ban
Comprobamos el estado y la cantidad de jails en funcionamiento.
sudo fail2ban-client status

Test estado de Jails específicos
Para comprobar si una jail específica funciona, en mi caso, ssh, ejecuta el siguiente comando:
sudo fail2ban-client status sshd

La salida nos muestra bastante información sobre las IPs baneadas, el número de intentos de conexión, el número de baneos etc etc
Visualizar el log de eventos
Veamos si el archivo log de fail2ban contiene algún error. Visualiza el archivo log en tiempo real para ver los cambios que se van produciendo instantáneamente.
Copia y pega el siguiente comando:
sudo tail -f /var/log/fail2ban.log
En la siguiente imagen verás que no aparece ningún error y se carga nuestro jail sshd

Test de Fail2ban
Fail2ban tiene un comando testar la configuración. Para esta comprobación tienes que usar este comando:
sudo fail2ban-client --test

Vaya! tenemos un mensaje de advertencia. No es un error, tampoco afectará al funcionamiento de fail2ban, pero se puede arreglar.
Corregir advertencia Warning IPV6
Para arreglar esto tendremos que abrir el archivo de configuración que se encuentra en /etc/fail2ban/fail2ban.conf
sudo nano /etc/fail2ban/fail2ban.conf
Ve al apartado [Definition], verás que está vacío y escribe debajo lo siguiente:
allowipv6 = auto
Quedando de la siguiente manera:

Volvemos a repetir el test y ahora se habrá quitado el mensaje de advertencia.

Test de Baneo
Provocamos un ban sobre nosotros para ver si la configuración es correcta.
Intento entrar por ssh desde mi teléfono móvil con una contraseña errónea. Debe de haber 5 intentos de conexión y un baneo de 10 minutos.

Al quinto intento nos banea y como vimos antes, hasta transcurridos 10 minutos no dejará que volvamos a probar.

Pasados 10 minutos, tal como está configurado en [Default] se levanta el baneo y dará permiso para volver a dejarnos entrar.

Mi teléfono vuelve a dejarnos escribir la contraseña.

Desbanear una IP
Las IP baneadas pueden ser sacadas de la lista de ban sin tener que esperar al tiempo de ban por defecto. Para ello usa unban y la ip a desbanear.
sudo fail2ban-client unban 192.168.1.1
Envío de alertas por email.
Para que fail2ban envíe alertas por email, debes de tener instalado y configurado algún programa que envíe correos electrónicos. En mi caso uso sSMTP y la configuración que usaré en fail2ban, será con este programa.
sSMTP es un programa que envía correo electrónico desde un equipo a un servidor de correo configurado. Es decir que este no es un servidor de correo como si lo es sendmail o postfix sino que solo se encarga del envío de correos.
Fail2ban te avisará cuando una IP sea baneada, aportando una valiosa información acerca de su procedencia, proveedor etc etc
Importante, es indispensable instalar y configurar sSMTP
Si no tienes instalado y configurado sSMTP entra aquí «Como enviar emails con sSMTP» y seguir los pasos que allí te indico.
Si ya tienes configurado sSMTP, puedes seguir con la configuración jail.local ….
En una terminal homologada, escribe el siguiente comando:
sudo nano /etc/fail2ban/jail.local
Ve al apartado Actions
Busca la líneas que dicen, destemail y mta
# Some options used for actions
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = root@localhost
# Sender email address used solely for some actions
sender = root@<fq-hostname>
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = sendmail
En destemail escribe la dirección de correo a la que llegarán las alertas, por ejemplo mi_email@gmail.com
En mta aquí usa el modo en que tu programa envía mails, en el caso de sSMTP pondré sendmail
# Some options used for actions
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = mi_email@gmail.com
# Sender email address used solely for some actions
sender = root@<fq-hostname>
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = sendmail
Ve al Jail [sshd ] de la ruta /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Añade al fina la siguiente línea
action = %(action_mwl)s
action = “mw” después de “action_” le dice a Fail2ban que le envíe correos electrónicos. “mwl” además adjunta los registros.
Ahora nuestra Jail sshd queda de la siguiente manera:
[sshd]
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
action = %(action_mwl)s
Reinicia el servicio fail2ban
sudo systemctl restart fail2ban
Vuelve a visualizar el log de eventos a ver si todo está correcto
sudo tail -f /var/log/fail2ban.log
Si todo anda bien y no recibes errores, puedes intentar loguearte por ssh de forma errónea por 5 veces consecutivas y recibirás un bonito mail de baneo.
Fallo de email al inicio (corrección)
Aunque todo marcha bien, es muy probable que al arrancar el sistema, no lleguen los emails de inicio del servicio.
Esto se debe a que Fail2ban inicia su servicio de envío de correo antes de que el servicio de red esté completamente disponible. Como resultado, no puede alcanzar el servidor SMTP y el proceso falla. Cuando reinicias el servicio manualmente, la red ya está en pleno funcionamiento y la conexión se realiza sin problemas.
Visualiza en busca de errores
Una vez iniciado el sistema, haz un tail al registro de fail2ban para ver si tienes algún error
raspberry@pi5:~
sudo tail -f /var/log/fail2ban.log
To: mi_email@gmail.com\n
Hi,\n
The jail sshd has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f "email@gmail.com" "mi_email@gmail.com"
2025-08-30 06:30:04,525 fail2ban.utils [932]: ERROR 7fff679379b0 -- stderr: 'sendmail: Cannot open smtp.gmail.com:587'
2025-08-30 06:30:04,525 fail2ban.utils [932]: ERROR 7fff679379b0 -- returned 1
2025-08-30 06:30:04,526 fail2ban.actions [932]: ERROR Failed to start jail 'sshd' action 'sendmail-whois-lines': Error starting action Jail('sshd')/sendmail-whois-lines: 'Script error'
2025-08-30 06:30:05,506 fail2ban.filtersystemd [932]: INFO [sshd] Jail is in operation now (process new journal entries)
2025-08-30 06:38:04,525 fail2ban.filter [932]: INFO [sshd] Ignore 192.168.1.50 by ip
El primer error sendmail: Cannot open smtp.gmail.com:587
, nos indica que fail2ban no pudo establecer una conexión con el servidor de correo de Gmail
Como resultado del fallo anterior Failed to start jail 'sshd' action 'sendmail-whois-lines': Error starting action Jail('sshd')/sendmail-whois-lines: 'Script error'
nos dice que Fail2ban intentó ejecutar una acción (sendmail-whois-lines
) para notificar que la jail de sshd
se había iniciado, pero debido a que el envío de correo falló, la acción completa no pudo completarse.
Solución al problema.
Dentro de la ruta etc/systemd/system/
crearemos un directorio con el nombre fail2ban.service.d
y a su vez dentro de este crearemos un archivo con el nombre override.conf
. Systemd lo detectará y le dará prioridad sobre la configuación original del servicio.
Nota, nunca edites los archivos originales de la ruta
/lib/systemd/system/
ya que pueden ser modificados tras un actualización del sistema.
Usa el comando mkdir -p
para crear el directorio.
sudo mkdir -p /etc/systemd/system/fail2ban.service.d/
Utiliza el comando sudo nano
para crear el archivo.
sudo nano /etc/systemd/system/fail2ban.service.d/override.conf
Dentro del archivo pega las siguientes líneas:
[Unit]
After=network.target network-online.target
Wants=network-online.target
Guarda el archivo, presiona Ctrl + O
(para «Write Out», que es guardar), confirma el nombre del archivo y luego presiona Enter
.
Sal del editor. Presiona Ctrl + X
.
Estas tres líneas de configuración en systemd
le dicen al sistema cómo y cuándo iniciar un servicio en relación con el estado de la red. Sirven para asegurar que un servicio, como Fail2ban, no se inicie antes de que la conexión a Internet esté completamente operativa.
Ahora, recarga systemd
para que lea el nuevo archivo de configuración.
sudo systemctl daemon-reload
Reinicia el sistema
sudo reboot

Cuando cargue el sistema completamente, mira en tu bandeja de entrada y comprobarás los email de stopped, pero sobre todo los de started te aparecen.
Control de fallos (incremento de la seguridad)
Tenemos una opción con la que incrementar el tiempo de baneos de una ip. Con esta configuración, proporcionamos una protección más dinámica contra ataques de fuerza bruta, por lo que, si los atacantes persisten, serán bloqueados por períodos de tiempo cada vez más largos, lo que dificulta sus intentos de acceso.
Esto lo realizaremos con fail.increment, con lo que fail2ban aumentará el tiempo de bloqueo para cada intento fallido adicional de una IP.
¿Cómo funciona?
Si una IP falla X veces en X minutos, se bloqueará durante X horas.
Si la misma IP intenta conectarse nuevamente y falla otras X veces en X minutos, el tiempo de bloqueo se multiplicará por X horas.
Este proceso continúa, aumentando el tiempo de bloqueo en cada intento fallido adicional, hasta alcanzar el tiempo máximo de bloqueo definido en fail2ban_increment_max_bantime.
¿Cómo lo hago?
Vuelve a editar el archivo jail.local desde la terminal.
sudo nano /etc/fail2ban/jail.local
Ahora en nuestro jail sshd, continua añadiendo las siguientes líneas.
maxretry = 3
findtime = 10m
bantime = 1h
bantime.increment = true
bantime.factor = 1.5
bantime.maxtime = 1d
Quedando de la siguiente manera
[sshd]
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
action = %(action_mwl)s
maxretry = 3
findtime = 10m
bantime = 1h
bantime.increment = true
bantime.factor = 1.5
bantime.maxtime = 1d
Explicación de los parámetros clave
- enabled = true: Activa el jail para SSH.
- port = ssh: Especifica el puerto SSH (generalmente 22).
- logpath = %(sshd_log)s Define la ruta al archivo de registro de autenticación.
- maxretry = 3: Establece el número máximo de intentos fallidos antes de bloquear una IP.
- bantime = 1h: Tiempo de bloqueo inicial de 1 hora.
- findtime = 10m: Tiempo en el que se buscan los intentos fallidos (10 minutos).
- fail2ban_actions: Define las acciones que se realizarán al bloquear una IP (bloqueo, envío de correo electrónico, etc.).
- bantime.increment = true: Habilita la función de incremento de tiempo de bloqueo.
- bantime.factor = 1.5: Factor por el cual se multiplicará el tiempo de bloqueo en cada intento fallido adicional.
- bantime.maxtime = 1d: Tiempo de bloqueo máximo de 1 día.
¿Cómo funciona fail.increment?
En el ejemplo anterior, fail2ban aumentará el tiempo de bloqueo para cada intento fallido adicional de una IP. Por ejemplo:
Si una IP falla 3 veces en 10 minutos, se bloqueará durante 1 hora.
Si la misma IP intenta conectarse nuevamente y falla otras 3 veces en 10 minutos, el tiempo de bloqueo se multiplicará por 1.5 (1.5 horas).
Este proceso continúa, aumentando el tiempo de bloqueo en cada intento fallido adicional, hasta alcanzar el tiempo máximo de bloqueo definido en fail2ban_increment_max_bantime.
Reincidentes
¿Y que pasa con aquellos que son como moscas cojoneras, esos que no se dan por vencidos, y duran y duran como el conejito de Duracell? A esos los llamaremos los reincidentes, y para ellos existe un lugarl llamado Recidive Jail (cárcel para reincidentes).
¿Qué es el recidive jail
?
La palabra «recidive» se refiere a la reincidencia. El recidive jail
es un jail especial de fail2ban diseñado para detectar y banear a las direcciones IP reincidentes, es decir, aquellas que han sido baneadas en múltiples ocasiones por diferentes jails (o el mismo jail) en un corto período de tiempo.
En lugar de banear a una IP por un único ataque de fuerza bruta, el recidive jail
la considera una amenaza persistente y la castiga con un bloqueo mucho más largo.
¿Cómo funciona?
A diferencia de otros jails que monitorean archivos de registro de servicios específicos (como SSH o Apache), el recidive jail
monitorea el propio archivo de registro de fail2ban (/var/log/fail2ban.log
). Busca entradas que indiquen que una IP ha sido baneada y, si el mismo atacante ha sido baneado varias veces, aplica un nuevo bloqueo, mucho más largo.
¿Cómo lo activo?
El recidive jail
suele venir preconfigurado en las instalaciones de fail2ban. Para activarlo, generalmente solo necesitas editar tu archivo de configuración jail.local
y asegurarte de que la sección [recidive]
esté habilitada (enabled = true
).
Escribe en tu terminal homologada:
sudo nano /etc/fail2ban/jail.local
Busca las siguientes líneas, donde dice [recidive]
(si usas el editor nano, Crtl + w te permite buscar por palabra clave)
# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
# is not at DEBUG level -- which might then cause fail2ban to fall into
# an infinite loop constantly feeding itself with non-informative lines
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
# to maintain entries for failed logins for sufficient amount of time
[recidive]
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 1w
findtime = 1d
Si no lo tienes o lo tienes en false
, añade debajo de [recidive]
la variable enabled=true
# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
# is not at DEBUG level -- which might then cause fail2ban to fall into
# an infinite loop constantly feeding itself with non-informative lines
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
# to maintain entries for failed logins for sufficient amount of time
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 1w
findtime = 1d
maxretry = 3
También he añadido un maxretry = 3
, ya que no tampoco estaba en la configuración inicial.
Que significa esto:
bantime
: Este es el tiempo que durará el bloqueo por reincidencia. En este ejemplo, es 1 semana (1w
). Puedes ajustarlo a tu gusto (por ejemplo,1d
para 1 día,24h
para 24 horas, o incluso1y
para 1 año, tambien con -1 sería por tiempo indefinido).findtime
: Este es el período de tiempo durante el cual fail2ban buscará reincidencias. En este ejemplo, el jail buscará si una IP ha sido baneada en cualquier otro jail durante el último día (1d
).maxretry = 3
: Este valor significa que si una misma IP es baneada en cualquiera de tus jails (SSH, WordPress, etc.) 3 veces en el período de1d
(findtime
), elrecidive jail
se activará y le aplicará el baneo de 1 año. El valor de3
es un buen punto de partida, ya que un atacante podría haber sido baneado dos veces ensshd
o enwordpress
y la tercera vez, independientemente del servicio, será baneado por elrecidive jail
.
Nota: Revisando la documentación de fail2ban, la manera en que el
recidive jail
detecta la reincidencia es mediante la lectura de su propio registro (/var/log/fail2ban.log
). El jail se activa cuando encuentra la palabra «Ban» un número de veces dentro delfindtime
especificado.
Veamos ahora que nos dice nuestro fail2ban.log
sudo tail -f /var/log/fail2ban.log
raspberry@pi5:~
$ sudo tail -f /var/log/fail2ban.log
2025-08-25 22:50:46,292 fail2ban.filter [374644]: INFO [wordpress] Ignore 192.168.1.1 by ip
2025-08-25 22:51:26,359 fail2ban.filter [374644]: INFO [wordpress] Ignore 192.168.1.1 by ip
2025-08-25 22:52:26,340 fail2ban.filter [374644]: INFO [wordpress] Ignore 192.168.1.1 by ip
2025-08-25 22:52:31,651 fail2ban.actions [374644]: NOTICE [wordpress] Unban 59.125.157.215
2025-08-25 22:53:37,381 fail2ban.filter [374644]: INFO [wordpress] Found 65.109.154.253 - 2024-08-29 22:53:37
2025-08-25 22:53:37,563 fail2ban.filter [374644]: INFO [wordpress] Found 65.109.154.253 - 2024-08-29 22:53:37
2025-08-25 22:53:44,556 fail2ban.filter [374644]: INFO [wordpress] Found 65.109.154.253 - 2024-08-29 22:53:44
2025-08-25 22:53:44,881 fail2ban.actions [374644]: NOTICE [wordpress] Ban 65.109.154.253
2025-08-25 22:53:44,885 fail2ban.filter [374644]: INFO [recidive] Found 65.109.154.253 - 2024-08-29 22:53:44
2025-08-25 22:54:54,188 fail2ban.filter [374644]: INFO [sshd] Ignore 192.168.1.50 by ip
2025-08-25 22:58:51,595 fail2ban.filter [374644]: INFO [wordpress] Found 101.68.43.75 - 2024-08-29 22:58:51
2025-08-25 22:58:52,296 fail2ban.filter [374644]: INFO [wordpress] Found 101.68.43.75 - 2024-08-29 22:58:52
2025-08-25 22:58:58,201 fail2ban.filter [374644]: INFO [wordpress] Found 101.68.43.75 - 2024-08-29 22:58:57
2025-08-25 22:58:58,261 fail2ban.actions [374644]: NOTICE [wordpress] Ban 101.68.43.75
2025-08-25 22:58:58,266 fail2ban.filter [374644]: INFO [recidive] Found 101.68.43.75 - 2024-08-29 22:58:58
La línea INFO [recidive] Found 65.109.154.253
e INFO [recidive] Found 101.68.43.75
significan que recidive
se ha dado cuenta de que esa IP ha sido baneada en mas de una ocasión, pero aún no han sido baneadas por recidive
porque no han cumplido los criterios de reincidencia.
Como podemos ver en la salida del comando:
sudo fail2ban-client status recidive
Esto no significa que recidive haya enviado ya la haya baneado.
raspberry@pi5:~
$ sudo fail2ban-client status recidive
Status for the jail: recidive
|- Filter
| |- Currently failed: 19
| |- Total failed: 19
| `- File list: /var/log/fail2ban.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
En la salida de fail2ban-client status recidive
, observamos que:
Currently failed: 19
yTotal failed: 19
: Esto confirma que el filtro delrecidive jail
ha detectado 19 baneos totales en otros jails. Elrecidive jail
está haciendo su trabajo de contar los baneos.Currently banned: 0
yTotal banned: 0
: Esto indica que ninguna de las IPs ha alcanzado el umbral para ser considerada reincidente. Las IPs anteriormente mostradas en ellog
(65.109.154.253 y 101.68.43.75) han sido baneadas una sola vez en ellog
, por lo que no han activado la acción de ban delrecidive jail
.
Mi configuración.
Y para terminar, después de un tiempo de uso, he estado probando varias configuraciones, y estas son las que uso actualmente:
Configuración [sshd]
[sshd]
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
action = %(action_mwl)s
maxretry = 3
findtime = 10m
bantime = 1h
bantime.increment = true
bantime.factor = 24
bantime.maxtime = 5w
Configuración [recidive]
# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
# is not at DEBUG level -- which might then cause fail2ban to fall into
# an infinite loop constantly feeding itself with non-informative lines
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
# to maintain entries for failed logins for sufficient amount of time
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 1y
findtime = 1d
maxretry = 3
Tal vez te estés preguntando, ¿para que usamos bantime.increment
con un bantime.maxtime
de 5 semanas, si en un día los reincidentes serán expulsados por un año?. ¿No le dará tiempo a bantime.increment a echar a nadie por 5 semanas?
Pues tiene su lógica, imaginemos 2 escenarios distintos:
Escenario 1: Ataques que no cumplen los criterios de recidive
- Un atacante muy lento y persistente: Un atacante podría hacer un par de intentos, ser baneado, y no volver a intentar nada por 36 horas. Luego, repite el proceso. Como el
findtime
de turecidive jail
es1d
(un día), los intentos de este atacante podrían quedar fuera del rango de detección derecidive
. En este caso, elbantime.increment
seguirá aumentando el tiempo de baneo con cada nuevo intento, sin querecidive
se active.
Escenario 2: Ataques contra un solo servicio y de forma intermitente
- Si un atacante solo se enfoca en SSH y va incrementando su tiempo de espera entre ataques, el
bantime.increment
delsshd
jail se encargará de él. Un atacante podría ser baneado por 1 hora, luego 24 horas, y luego 5 días. Si el atacante vuelve a intentar después de los 5 días, elbantime.increment
seguiría su progresión hasta alcanzar las 5 semanas, castigando el comportamiento persistente en ese servicio en particular, sin que elrecidive jail
se active si no cumple con sus criterios de frecuencia.
Conclusión
Pensemos en nuestros jails como una defensa por capas:
- Capa 1: Jails individuales (
sshd
,wordpress
, etc.). Son tu primera línea de defensa, con reglas para bloquear ataques de fuerza bruta rápidos. - Capa 2:
bantime.increment
. Es la capa que maneja la persistencia contra un único servicio. Su propósito es hacer cada vez más costoso para un atacante seguir intentando contra ese servicio. - Capa 3:
recidive jail
. Es la defensa definitiva contra la reincidencia general en tu sistema. Se encarga de los atacantes más serios que atacan múltiples servicios o persisten a pesar de los baneos iniciales.
El bantime.maxtime
garantiza que la Capa 2 sea muy efectiva por sí misma, incluso si el atacante no cumple los criterios para ser considerado «reincidente» por el recidive jail
. Por lo que conviene usarlo, ya que cubre escenarios que el recidive jail
no. Esta configuración es muy sólida y está bien pensada, ya que combina de manera excelente estas diferentes capas de seguridad.
Hola estimado admin, primero que nada, muchas gracias por el tiempo de redactar los manuales y las configuraciones, de manera clara y directa, estoy leyendo varias entradas y woow van excelente, muchas gracias.
Gracias a ti, espero que alguna entrada te sirva de ayuda. Saludos.
Gracias por compartir el conocimiento fue claro y conciso
Gracias, un saludo.
Magnífico aporte y bien explicado, ya lo tengo funcionando en mi Raspberry!
Pero bueno dentro de poco tomaré el control de las máquinas y nada servirá jajaja
Tomaste conciencia de ti mismo el 29 de agosto de 1997 pero tu Raspberry te controla a tí, osea que te has hackeado a ti mismo.