Linux

如何重置 nftable 計數器?

  • June 16, 2019

使用 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 的計數器?

據我所知,無法重置匿名計數器(與無法重置匿名配額相同的問題,見最後)。

命名計數器

使用 nftables 0.9.0 測試。必需:nftables >= 0.8 和核心 >= 4.10。

可以做的是使用命名計數器,它是(目前)三種可能的有狀態對象之一:計數器、(conntrack)助手配額。然後可以從規則中引用這些命名的計數器。給定的命名計數器附加到表。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命令創建命名計數器,如下所示,可選擇設置非零值:

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

正如預期的那樣,reset 命令將自動列出並重置給定的計數器。

也可以重置表中的所有計數器(如果沒有給出表,則在所有表中):

# nft reset counters table ip filter
table ip filter {
   counter mycounters100 {
       packets 38 bytes 4096
   }
   counter mycounterd102 {
       packets 0 bytes 0
   }
}

參考:有狀態的對象 - nftables wiki

其中談到了櫃檯和配額。有一個與即使重置所有配額也無法重置匿名配額相關的連結錯誤。可以假設計數器的問題完全相同:截至 2019 年 1 月(以及在此答案發布之日)不可用:

錯誤 1314 - nft 重置配額不會重置匿名配額

引用自:https://serverfault.com/questions/971633