![Nftables가 미터로 차단할 것으로 예상대로 작동하지 않습니다.](https://rvso.com/image/789276/Nftables%EA%B0%80%20%EB%AF%B8%ED%84%B0%EB%A1%9C%20%EC%B0%A8%EB%8B%A8%ED%95%A0%20%EA%B2%83%EC%9C%BC%EB%A1%9C%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
목표: 속도 소스 IP 및 대상 포트가 초당 200개 패킷을 초과하는 초과 패킷을 고려합니다. 예:
1s ~ 2s: IP 1.1.1.1 ~ MyServer:80
[1초에 201회 발생]
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 }
}
}
문제는 http 체인 내에 있습니다. 즉, 서버에 20개의 http 요청을 했습니다(내 공개 소스 IP는 191.185.17.156입니다). 수락 카운터에는 총 200개의 패킷이 있는 것으로 표시됩니다(tcp 트리 방식 핸드셰이크, ack 등 포함). , 그때까지는 정상입니다. 다음을 참조하세요.
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
이제 내 머리를 아프게 하는 것은 어떻게 내 소스 IP에서 서버의 포트 80으로 100개의 패킷을 갖고 동시에 73개의 초과 패킷이 있을 수 있습니까? 100은 200보다 작으므로 두 번째 카운터는 비어 있어야 합니다.
IPv4가 차단 목록에 부당하게 추가되었다는 사실은 말할 것도 없습니다.