fail2ban no utiliza el tipo de bloque DROP

fail2ban no utiliza el tipo de bloque DROP

Usando Ubuntu 20.04 LTS, tengo esto en /etc/fail2ban/jail.local:

[DEFAULT]
bantime   = 3600
banaction = iptables
blocktype = drop


[sshd]
enabled   = true
protocol  = tcp
port      = ssh
filter    = sshd
logpath   = /var/log/auth.log
maxretry  = 3

Pero esto es lo que veo cuando enumero las reglas de iptables:

╰─# iptables -L f2b-sshd -n -v
Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
   13  1356 REJECT     all  --  *      *       222.187.232.205      0.0.0.0/0            reject-with icmp-port-unreachable
   18  1516 REJECT     all  --  *      *       221.181.185.153      0.0.0.0/0            reject-with icmp-port-unreachable
   17  1064 REJECT     all  --  *      *       222.186.180.130      0.0.0.0/0                  777 55854 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

El problema es que usa REJECT (con ICMP) en lugar de DROP.

El archivo action.d/iptables.conf contiene esto:

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>

Es el archivo de acción predeterminado de iptables, que se envía con el paquete oficial fail2ban apt para esta versión del sistema operativo.

También intenté agregar "blocktype=drop" en [sshd] pero no tiene ningún efecto.

No estoy seguro de cómo depurar esto, porque el servicio fail2ban no registra los comandos reales de iptables.

¿Qué me estoy perdiendo?

Respuesta1

Para proporcionar algún parámetro a la acción de cárcel única, debe configurar actiontodos los parámetros (normalmente también se proporcionan en la sección predeterminada de jail.conf) o en caso de acción de prohibición, puede usar algo como esto:

[some_jail]
banaction = %(known/banaction)s[blocktype=DROP]

En cuanto al tema DROP versus REJECT, la discusión es tan antigua como el propio subsistema de filtro de red, con muchos pros y contras para ambas partes.
En relación con las preocupaciones sobre la prohibición, consultehttps://github.com/fail2ban/fail2ban/issues/2217#issuecomment-423248516para detalles.

Respuesta2

Acepté la solución de @sebres pero me gustaría agregar algunos errores.

Para la prohibición de iptables-allports, el tipo de bloque rechazado puede tener espacios en su interior. Necesitas citar eso.

Ejemplo:

[sshd]
banaction=iptables-allports[blocktype="REJECT --reject-with icmp-port-unreachable"]

Segunda cosa interesante: tanto la configuración banaction como la jail tienen un parámetro llamado "protocolo". La primera vez que me confundí fue que la siguiente configuración no arrojaba ningún error, pero no bloqueaba las solicitudes UDP:

[named-ddos]
banaction=iptables-allports[blocktype=DROP,protocol=all]

Sucedió porque me faltaba la configuración protocolo=todo de la cárcel. Debes especificar protocolo=todo en el nivel de cárcel:

[named-ddos]
banaction=iptables-allports[blocktype=DROP,protocol=all]
protocol=all

La razón de esto es que la sección nombrada-ddos crea una nueva cadena en iptables, y las ips prohibidas están creando reglas dentro de esa cadena. Si no especifica protocolo=all en el nivel de cárcel, entonces la cadena se definirá así:

Chain INPUT (policy DROP 22 packets, 952 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1371  229K named-ddos  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           

Es cierto que la prohibición creará reglas con proto=alldentro de la cadena, pero la cadena en sí no se utilizará para paquetes que no sean TCP. La conclusión es que necesitas especificar protocolo=all tanto en el nivel de cárcel como en la prohibición (si lo admite), de lo contrario no funcionará.

información relacionada