Цель: Учет избыточных пакетов, скорость исходного IP-адреса и порта назначения которых превышает 200 пакетов в секунду, например:
от 1 с до 2 с: IP 1.1.1.1 до MyServer:80
[Это происходит 201 раз в секунду 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 }
}
}
Проблема в цепочке http, то есть я сделал 20 http-запросов к серверу (мой публичный исходный IP-адрес 191.185.17.156), счетчик приема показывает, что всего 200 пакетов (включая рукопожатие TCP Tree Way, 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 был добавлен в черный список неправомерно.