用于计量表的 nftables set-syntax 替换究竟是如何工作的?

用于计量表的 nftables set-syntax 替换究竟是如何工作的?

如今的nftables推荐例如,在创建动态每 IP 黑名单时使用集合而不是计量(示例改编自手册页v0.98:

set blackhole {
    type ipv4_addr
    flags dynamic
    timeout 30m
}

set flood {
    type ipv4_addr
    flags dynamic
    timeout 1m
}

ip saddr @blacklist drop

ct state new \
  add @flood { ip saddr limit rate over 10/minute } \
  add @blacklist { ip saddr } \
  drop
  1. 这里的-语句的执行流程是怎样的add?第二个仅在达到add第一个中指定的每 ip 限制时执行,但为什么呢?它与第一个是否实际执行任何操作(即表中还没有条目)add有关吗?add或者它是否通过查看到目前为止创建的连接集和数量来发挥一些作用?

  2. 总是被执行吗drop?或者在add评估第二个之后?为什么?

  3. 查找表如何帮助跟踪限制?当我查看该集合的实际内容时,我没有看到任何计数,例如最后一分钟的新连接。它是否只存储时间戳并将实际计数委托给内核?

  4. 为什么我们需要指定两次洪水限制间隔(如settimeoutlimit语句中)?是否存在使用两个不同值有意义的用例?

  5. 红帽 7 文档给出每个 IP 连接限制器的示例: nft add rule ip filter input ip protocol tcp ct state new, untracked limit rate over 10/minute add @denylist { ip saddr }

这对我来说似乎不正确,因为汇率是这样的,这add意味着一旦达到每分钟 10 个新连接,它就会将 IP 添加到表中任何知识产权?

感谢指向有关该语言实际语义的文档的指针。

相关内容