如今的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
这里的-语句的执行流程是怎样的
add
?第二个仅在达到add
第一个中指定的每 ip 限制时执行,但为什么呢?它与第一个是否实际执行任何操作(即表中还没有条目)add
有关吗?add
或者它是否通过查看到目前为止创建的连接集和数量来发挥一些作用?总是被执行吗
drop
?或者在add
评估第二个之后?为什么?查找表如何帮助跟踪限制?当我查看该集合的实际内容时,我没有看到任何计数,例如最后一分钟的新连接。它是否只存储时间戳并将实际计数委托给内核?
为什么我们需要指定两次洪水限制间隔(如set
timeout
和limit
语句中)?是否存在使用两个不同值有意义的用例?这红帽 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 添加到表中任何知识产权?
感谢指向有关该语言实际语义的文档的指针。