Bloqueo permanente de IP después de n reintentos usando fail2ban

38

Tengo un fail2ban configurado como a continuación:

  • bloquear la ip después de 3 intentos fallidos
  • liberar la IP después de 300 segundos de tiempo de espera

Esto funciona perfectamente y quiero mantenerlo así para que un usuario válido tenga la oportunidad de volver a intentar el inicio de sesión después del tiempo de espera. Ahora, quiero implementar una regla en la que si se detecta la misma IP como ataque y se bloquea, se desbloquea 5 veces, se bloquea permanentemente la IP y nunca se vuelve a desbloquear. ¿Se puede lograr esto solo con fail2ban o necesito escribir mi propio script para hacerlo?

Estoy haciendo esto en centos.

BTR Naidu
fuente
2
Es una idea bastante tonta: cuantas más reglas agregue a iptables, más lento será.
symcbean
14
Agradezco tu comentario, pero lo que necesito es una respuesta y no una sugerencia. Gracias de cualquier manera.
BTR Naidu
55
A veces, la respuesta correcta a "cómo hago X" es "no hacer X".
ceejayoz

Respuestas:

32

Antes de 0.11, no había una función predeterminada o una configuración dentro de fail2ban para lograr esto. Pero a partir de la próxima versión 0.11, el tiempo de prohibición se calcula automáticamente y aumenta exponencialmente con cada nuevo delito que, a largo plazo, significará un bloqueo más o menos permanente.

Hasta entonces, su mejor enfoque probablemente sea configurar fail2ban para monitorear su propio archivo de registro . Es un proceso de dos pasos ...

Paso 1

Podríamos necesitar crear un filtro para verificar si hay BAN en el archivo de registro (archivo de registro de fail2ban)

Paso 2

Necesitamos definir la cárcel , similar a lo siguiente ...

[fail2ban]
habilitado = verdadero
filtro = fail2ban
acción = iptables-allports [nombre = fail2ban]
logpath = /path/to/fail2ban.log
# findtime: 1 día
findtime = 86400
# bantime: 1 año
bantime = 31536000

Técnicamente, no es un bloqueo permanente , sino solo bloques por un año (que también podemos aumentar).

De todos modos, para su pregunta (¿Se puede lograr esto solo con fail2ban o necesito escribir mi propio script para hacer eso?) ... escribir el propio script podría funcionar bien. Lo que recomendaría es configurar el script para extraer las IP prohibidas con frecuencia y luego ponerlas en ellas /etc/hosts.deny.

Pothi Kalimuthu
fuente
1
Agregando a esta excelente respuesta ... Dependiendo de cómo estén configurados el registro y MaxAuthTries sshd_config, esto podría bloquear solo 3 inicios de sesión fallidos para una "sesión" sshd, no se proporcionan 3 inicios de sesión fallidos. Por ejemplo, de manera predeterminada, un atacante podría intentar ['pass1', 'pass2', 'pass3'] en una sola sesión antes de que sshd se desconecte. Dependiendo de cómo se configure sshd para iniciar sesión, esto podría aparecer como 1, 2 o 3 intentos de fail2ban.
Jonathan Vanasco
55
Ahí está el filtro recidivo fail2ban para eso.
Guillermo Prandi
¿Qué quieres decir con la próxima versión 0.11 ? El más reciente parece ser 10.3.1: github.com/fail2ban/fail2ban/releases
user5950
Espero que hayas querido decir 0.10.3.1 . Puede seguir el progreso de "0.11" en github.com/fail2ban/fail2ban/tree/0.11 . Básicamente, aún no se ha lanzado.
Pothi Kalimuthu
30

Creo que si pones bantime = -1en esa sección de configuración, es un bloque permanente.

J. Chin
fuente
2
De hecho, establecer bantimeun valor negativo es una prohibición permanente (a partir de Fail2Ban ver. 0.6.1 (16/03/2006))
voretaq7
3
agregar -1 a la configuración hizo que fail2ban no respondiera
Erdem Ece
13

Phil Hagen escribió un excelente artículo sobre este tema. " Prohibir permanentemente a los delincuentes reincidentes con fail2ban ".

Su sugerencia es la misma que Pothi, pero proporciona una guía paso a paso.

Esto incluyó:

  • lista de prohibición separada por cárcel (ip.blocklist.ssh, ip.blocklist.xxx)
  • listas de prohibición cargadas automáticamente si se reinicia el servicio (ventaja principal de este método en mi humilde opinión)
  • notificación por correo electrónico si el repetidor está activado.
xaa
fuente
6

Para ampliar la respuesta de Chin esto es bastante simple. Simplemente edite las 2 configuraciones /etc/fail2ban/jail.localpara que coincidan con sus preferencias.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5
Casey Watson
fuente
4

fail2ban ya tiene una cárcel para prohibir la reincidencia. Si observas /etc/fail2ban/jail.conf, encontrarás:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   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
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

¿Cómo agregar en jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

Para la comprobación del nivel de registro que se puede hacer: fail2ban-client get loglevel.

  • establecer loglevel MYLEVEL : establece el nivel de registro en MYLEVEL. Niveles: CRÍTICO, ERROR, ADVERTENCIA, AVISO, INFORMACIÓN, DEPURACIÓN
  • Más comandos en la wiki .

Con la versión anterior de fail2ban, puede obtener este error .

A-312
fuente
0

Vaya a vim, abra /etc/fail2ban/jail.conf

y simplemente modificar después de fail2ban service restart:

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
Tanveer Ahmad
fuente