Nftables는 예상대로 미터 사용을 차단하지 않습니다.

Nftables는 예상대로 미터 사용을 차단하지 않습니다.

목표: 소스 IP 및 대상 포트 속도가 초당 200패킷을 초과하는 초과 패킷을 처리합니다. 예:

1s, 2s, 3s...: IP 1.1.1.1 to MyServer:80
[1초에 201번 발생]

소스 IP 및 대상 포트에 대해 초당 200개 이상의 패킷 전송 속도로 패킷을 계산하고 싶습니다. 기본적으로 http(아래 체인)에 대해서만 이 작업을 수행하지만 작동하지 않습니다.

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

1.) 등록 패킷이 100개만 있는 반면 2.) 73개의 등록 패킷이 있는데 그 중 100이 200보다 작으므로 2의 카운터는 200의 속도를 초과하는 패킷이 없으므로 0이 되어야 합니다. per Saddr:dport 초당 패킷 수입니다.

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

나는 또한 다음을 시도했습니다.

ip saddr 191.185.17.156 meter http size 65535 { ip saddr . tcp dport limit rate over 200/second } add @blocklist { ip saddr } counter

다른 IP에서 패킷을 받고 있는 줄 알았는데 아쉽게도 그렇지 않더군요.

관련 정보