O UDP é um protocolo sem estado, mas o kernel do Linux ainda rastreia os números de IP e porta para ele por 30 segundos, para determinar o tráfego estabelecido e relacionado. (30 segundos ou o valor em /proc/sys/net/netfilter/nf_conntrack_udp_timeout
) - Link ServerFault: Iptables: "-p udp - state ESTABLISHED"
O DNS funciona em UDP, por isso, se você enviar uma consulta de DNS e tiver comentado a regra que permite o tráfego de retorno relacionado, não receberá resposta. > > DNS quebrado.
Como o 'estado' do UDP é rastreado por 30 segundos, sua tentativa de inserir uma nova regra de bloqueio na parte superior do INPUT não tem nenhum efeito. "ufw-before-input" acontece primeiro e permite o tráfego ESTABLISHED, antes que sua regra INPUT consiga ver e DROP.
Para corrigir, você precisa:
-
Use algo como 'conntrack' para remover a entrada UDP rastreada do host que você deseja bloquear e adicione a regra de bloqueio ao firewall. Não haverá uma conexão estabelecida ou relacionada, portanto o bloqueio deve ter efeito imediato. por exemplo. Exclui entradas específicas do conntrack?
-
Rework suas regras de firewall para que você faça a regra ESTABLISHED, RELACIONADA nas regras INPUT após seus DROPs, em vez de fazê-lo primeiro.
I cannot afford to reboot the computer every time I want to block an ip address
Mas você pode filtrar 4 bilhões de endereços IP, um de cada vez, bloqueando-os manualmente? Isso não parece uma coisa razoável de se fazer. Use um dispositivo IPS, use o fail2ban.