![Nftables não funciona como esperado para bloquear com medidor](https://rvso.com/image/789276/Nftables%20n%C3%A3o%20funciona%20como%20esperado%20para%20bloquear%20com%20medidor.png)
Objetivo: Contabilizar pacotes em excesso cuja taxa IP origem e porta destino sejam superiores a 200 pacotes por segundo, exemplo:
1s a 2s: IP 1.1.1.1 para MeuServidor:80
[Isso acontece 201 vezes no segundo 1]
table netdev filter {
set whitelist {
type ipv4_addr
elements = { 186.248.79.100 }
}
set blocklist {
type ipv4_addr
size 65535
flags dynamic,timeout
timeout 30s
}
chain ingress {
type filter hook ingress device "eth0" priority -450; policy accept;
ip saddr @whitelist accept
ip daddr 10.0.0.192 jump input
ip daddr != 10.0.0.192 jump forward
}
chain http {
ip saddr 191.185.17.156 counter
meter http size 65535 { ip saddr . tcp dport limit rate over 200/second } add @blocklist { ip saddr } counter
}
chain forward { }
chain input {
tcp dport vmap { 8000 : jump portainer, 9443 : jump portainer }
tcp dport vmap { 80 : jump http }
}
}
O problema está dentro da cadeia http, ou seja, fiz 20 requisições http para o servidor (meu IP de fonte pública é 191.185.17.156) o contador de aceitação mostra que são 200 pacotes no total (incluindo tcp tree way handshake, ack etc) , até então é normal, veja:
ip saddr 191.185.17.156 counter packets 100 bytes 4920
meter http size 65535 { ip saddr . tcp dport limit rate over 200/second } add @blocklist { ip saddr } counter packets 73 bytes 3576
Agora o que está me quebrando a cabeça, como é possível ter 100 pacotes do meu IP de origem para a porta 80 do servidor, e ao mesmo tempo existirem 73 pacotes em excesso? Como 100 é menor que 200, o segundo contador deve estar vazio
Sem falar que o IPv4 foi adicionado indevidamente à lista de bloqueio.