fail2ban não usa tipo de bloco DROP

fail2ban não usa tipo de bloco DROP

Usando o Ubuntu 20.04 LTS, tenho isso em /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

Mas é isso que vejo quando listo as regras do 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

O problema é que ele usa REJECT (com ICMP) em vez de DROP.

O action.d/iptables.conf contém isto:

# 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>

É o arquivo de ação padrão do iptables, enviado com o pacote oficial fail2ban apt para esta versão do sistema operacional.

Também tentei adicionar "blocktype=drop" em [sshd], mas não teve efeito.

Não tenho certeza de como depurar isso, porque o serviço fail2ban não registra os comandos reais do iptables.

o que estou perdendo?

Responder1

Para fornecer algum parâmetro para a ação de prisão única, você deve definir actiontodos os parâmetros (também normalmente fornecidos na seção padrão do jail.conf) ou em caso de ação de banimento você pode usar algo assim:

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

No que diz respeito ao tema DROP vs. REJECT, a discussão é tão antiga quanto o próprio subsistema net-filter, com muitos prós/contras para ambos os lados.
Relacionado a questões de banimento, consultehttps://github.com/fail2ban/fail2ban/issues/2217#issuecomment-423248516para detalhes.

Responder2

Aceitei a solução do @sebres mas gostaria de acrescentar algumas dicas.

Para a proibição iptables-allports, o tipo de bloco rejeitado pode conter espaços dentro. Você precisa citar isso.

Exemplo:

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

Segunda coisa interessante: tanto a configuração do banaction quanto a jail possuem um parâmetro chamado "protocol". Fiquei confuso pela primeira vez quando a configuração abaixo não gerou nenhum erro, mas não bloqueou solicitações UDP:

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

Aconteceu porque estava faltando a configuração protocol=all da prisão. Você precisa especificar protocol=all no nível da prisão:

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

A razão para isso é que a seçãonamed-ddos cria uma nova cadeia no iptables, e os ips banidos estão criando regras dentro dessa cadeia. Se você não especificar protocol=all no nível da prisão, a cadeia será definida assim:

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           

É verdade que o banimento criará regras com proto=alldentro da cadeia, mas a cadeia em si não será usada para pacotes não TCP. A conclusão é que você precisa especificar protocol=all tanto no nível da prisão quanto no banaction (se for compatível), caso contrário não funcionará.

informação relacionada