![Nftables는 예상대로 미터 사용을 차단하지 않습니다.](https://linux55.com/image/224414/Nftables%EB%8A%94%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EB%AF%B8%ED%84%B0%20%EC%82%AC%EC%9A%A9%EC%9D%84%20%EC%B0%A8%EB%8B%A8%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
목표: 소스 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에서 패킷을 받고 있는 줄 알았는데 아쉽게도 그렇지 않더군요.