使用 nftable 确实很痛苦。我有一个 ipv4 表和一个输入链。
table ip filter { # handle 7
chain input { # handle 1
type filter hook input priority 0; policy accept;
ip daddr 192.168.0.102 counter packets 697173 bytes 850761603 # handle 5
ip saddr 192.168.0.100 counter packets 38 bytes 4096 # handle 6
}
}
但是我怎样才能重置手柄 5 的计数器呢?
答案1
据我所知,不可能重置匿名的计数器(与无法重置相同的问题匿名的配额,见末尾)。
命名计数器
使用 nftables 0.9.0 进行测试。要求:nftables >= 0.8 和内核 >= 4.10。
可以做的是使用命名计数器,是(目前)三种可能之一有状态对象:柜台,(连接跟踪)帮手和配额。然后可以从规则中引用这些命名的计数器。给定的命名计数器附加到表。OP 的规则集可以改为这样写:
table ip filter {
counter mycounterd102 {
packets 697173 bytes 850761603
}
counter mycounters100 {
packets 38 bytes 4096
}
chain input {
type filter hook input priority 0; policy accept;
ip daddr 192.168.0.102 counter name "mycounterd102"
ip saddr 192.168.0.100 counter name "mycounters100"
}
}
带有手册不育系命令命名计数器的创建方式如下,可选择设置非零值:
nft add counter ip filter mycounterd102 packets 697173 bytes 850761603
现在,可以列出或重置这些命名计数器:
# nft list counter ip filter mycounterd102
table ip filter {
counter mycounterd102 {
packets 697173 bytes 850761603
}
}
# nft reset counter ip filter mycounterd102
table ip filter {
counter mycounterd102 {
packets 697173 bytes 850761603
}
}
# nft list counter ip filter mycounterd102
table ip filter {
counter mycounterd102 {
packets 0 bytes 0
}
}
正如预期的那样,重置命令将原子地列出并重置给定的计数器。
还可以重置表中的所有计数器(如果没有给出表,则重置所有表中的所有计数器):
# nft reset counters table ip filter
table ip filter {
counter mycounters100 {
packets 38 bytes 4096
}
counter mycounterd102 {
packets 0 bytes 0
}
}
其中讨论了计数器和配额。有一个链接错误,即使重置所有配额也无法重置匿名配额。可以假设这与计数器的问题完全相同:截至 2019 年 1 月(以及本回答日期)不可用: