如何重置 nftable 计数器?

如何重置 nftable 计数器?

使用 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
    }
}

参考:有状态对象 - nftables 维基

其中讨论了计数器和配额。有一个链接错误,即使重置所有配额也无法重置匿名配额。可以假设这与计数器的问题完全相同:截至 2019 年 1 月(以及本回答日期)不可用:

Bug 1314 - nft 重置配额不会重置匿名配额

相关内容