Comportamiento extraño con fail2ban al prohibir IP permanentemente

Comportamiento extraño con fail2ban al prohibir IP permanentemente

Según la documentación, establecer la suspensión de prisión en un valor negativo debería resultar en una prohibición permanente. Sin embargo, una vez hecho esto, el siguiente comportamiento cambia, en comparación con cuando se establece bantime en un número entero positivo:

1) ipset listno muestra la tabla hash fail2ban-sshd

2) firewall-cmd --direct --get-all-rulesestá vacío

3) /var/log/fail2ban.logse convierte en una sola línea. entrada interesante

sshd[25772]: Usuario ubuntu no válido desde 93.174.89.88 puerto 37477', 'ip': '93.174.89.88', 'ipmatches': en 0x7f4588f9dc08>, 'ipfailures': en 0x7f4588f9daa0>, 'time': 2.088076, 'fallos ': 1443, 'ipjailfailures': en 0x7f4588f9dd70>})': Error al prohibir 93.174.89.88

4) /var/log/messagestiene lo siguiente

firewalld[916]: ADVERTENCIA: '/usr/sbin/iptables-restore --wait=2 -n' falló: iptables-restore v1.4.21: La configuración de fail2ban-sshd no existe.#012#012Se produjo un error en la línea: 2#012Pruebe 'iptables-restore -h' o 'iptables-restore --help' para obtener más información. firewalld[916]: ERROR: COMMAND_FAILED

El único comando que funciona como se esperaba es fail2ban-client status sshd, sin embargo, las IP que se muestran prohibidas aún intentan conectarse. Creo que la raíz de todos los problemas es que ipset no se crea por ningún motivo una vez que el número entero es negativo.

¿Algunas ideas? Además, ¿el comando fail2ban-client reloadtiene el mismo efecto que systemctl restart fail2ban.servicecuando se aplica una nueva configuración?

En mi caso, /etc/fail2ban/jail.d/local.conf

[sshd]
enabled = true
bantime = -1
findtime = 3600
maxretry = 5
action = %(action_)s

Respuesta1

Esto era un error en versiones anteriores de fail2ban. Desde entonces se ha solucionado, pero si su distribución de Linux todavía incluye esa versión anterior, es posible que también necesite una solución alternativa.

ElProblema de GitHubque explica el problema y la solución también incluye una solución alternativa:

Esto se soluciona en versiones más nuevas. Para 0.9, simplemente puede sobrescribir el parámetro bantime (tiempo de espera) en acción dentro de la cárcel (el tiempo de espera del parámetro para la regla persistente de ipset es 0).

[sshd]
bantime = -1
action = %(banaction)s[name=%(__name__)s, bantime=0, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

Respuesta2

ipset sólo puede tener un tiempo de espera mínimo de 0 o un tiempo de espera máximo de 2147483 verhttp://ipset.netfilter.org/ipset.man.html

timeout Todos los tipos de conjuntos admiten el parámetro de tiempo de espera opcional al crear un conjunto y agregar entradas. El valor del parámetro de tiempo de espera para el comando de creación significa el valor de tiempo de espera predeterminado (en segundos) para nuevas entradas. Si se crea un conjunto con soporte de tiempo de espera, entonces se puede usar la misma opción de tiempo de espera para especificar valores de tiempo de espera no predeterminados al agregar entradas. El valor de tiempo de espera cero significa que la entrada se agrega de forma permanente al conjunto. El valor de tiempo de espera de los elementos ya agregados se puede cambiar volviendo a agregar el elemento usando la opción -exist. El valor de tiempo de espera más grande posible es 2147483 (en segundos).

el valor que se utiliza para la creación del tiempo de espera del ipset es el valor de configuración bantime. Dado que tiene un -1 en el valor de configuración de Bantime, su sistema está teniendo un error al crear el ipset para las cárceles de fail2ban, ya que no se ha creado ningún ipset porque, en esencia, el sistema ejecuta algo como esto:

ipset create fail2ban-sshd hash:ip timeout -1

El rango de valores de tiempo de espera aceptable es 0-2147483 segundos. luego sin un ipset llamado fail2ban-sshd ejecutando algo como:

firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

o:

iptables -t filter -I INPUT_direct 1 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

ciertamente fallaría ya que no se ha creado ningún ipset llamado fail2ban-sshd. debes cambiar tu tiempo de baneo -1 a 0.

información relacionada