Vale a pena apontar possíveis conseqüências não intencionais do uso do recurso LIMIT do ufw.
Suponha que alguém tenha colocado um limite geral na porta 22 / tcp como a primeira regra do ufw:
To Action From
-- ------ ----
[ 1] 22/tcp LIMIT IN Anywhere
...
supondo que todas as conexões que operam abaixo do limite ainda possam ser filtradas seguindo as regras do ufw e, finalmente, a política padrão de "negar (de entrada)".
Pelo menos para o ufw 0,35, essa suposição estaria errada. De fato, a lógica LIMIT IN imediatamente aceita qualquer entrada não rejeitada pelo critério de limite.
No psuedocode, a lógica LIMIT é
if CONDITION then DENY else ACCEPT
enquanto outras regras ufw parecem ter lógica:
if CONDITION then (DENY|ACCEPT) else continue to next rule
.
Pessoalmente, achei que havia um comportamento inesperado para o ufw LIMIT, que só descobri inesperadamente ao encontrar muitas tentativas de login da porta 22 no arquivo de log do sistema, que nunca deveriam ter acontecido devido à filtragem por outras regras do ufw.
Detalhes de confirmação de comportamento
As linhas relevantes do código iptables inseridas pelo ufw são as seguintes:
-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
A lista acima pode ser criada com
iptables -S | grep ufw-user-limit
As duas primeiras linhas são consecutivas ufw-user-input
e podem ser confirmadas com
iptables -S | grep ufw-user-input