我遇到了 Nftables 的奇怪问题,我不明白。
这是导致我的状态的命令序列:
~# nft add table inet firewall
~# nft add set inet firewall blacklist4 \{ typeof ip saddr \; flags interval \; auto-merge \; \}
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/25 \}
~# nft add element inet firewall blacklist4 \{ 192.0.2.128/25 \}
~# nft -a list ruleset
table inet firewall { # handle 0
set blacklist4 { # handle 0
typeof ip saddr
flags interval
auto-merge
elements = { 192.0.2.0/25, 192.0.2.128/25 }
}
}
到目前为止,一切都很好。请注意,它没有自动将/24
网络的两半合并为一条记录,这是我所期望的,并且我发现我不是第一个注意到这一点的人:https://www.spinics.net/lists/netfilter/msg58958.html
现在,在这种状态下,它不会让我添加“组合”或“部分”范围元素:
~# nft add element inet firewall blacklist4 \{ 192.0.2.128/26 \}
Error: interval overlaps with an existing one
add element inet firewall blacklist4 { 192.0.2.128/26 }
^^^^^^^^^^^^^^
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.128/26 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/24 \}
Error: interval overlaps with an existing one
add element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此删除这两个元素并检查:
~# nft delete element inet firewall blacklist4 \{ 192.0.2.0/24 \}
Error: interval not found in set
delete element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^
Error: Could not process rule: No such file or directory
delete element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft delete element inet firewall blacklist4 \{ 192.0.2.0/25 \}
~# nft delete element inet firewall blacklist4 \{ 192.0.2.128/25 \}
~# nft -a list ruleset
table inet firewall { # handle 0
set blacklist4 { # handle 0
typeof ip saddr
flags interval
auto-merge
}
}
我故意先尝试删除合并的,因为前面说过“文件存在”。但事实证明它只在添加时存在,而在删除时不存在。最后一条命令显示集合为空;现在让我们添加一些东西:
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/24 \}
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/25 \}
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/25 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/26 \}
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/26 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft -a list ruleset
table inet firewall { # handle 0
set blacklist4 { # handle 0
typeof ip saddr
flags interval
auto-merge
}
}
我无法添加相同的超级块或部分块,它说“文件存在”。为什么?在哪里? list 命令一直说集合是空的。
现在如何添加回来?
可以通过冲洗装置来重置此设置。然而,这个测试集是空的,但在现实生活中它会有其他数据。如果创建的集没有auto-merge
.如果我删除flags interval
,它会按预期工作,但仅限于单个 IP 地址。
这是OpenVZ系统,3.10.0-1160.42.2.vz7.184.10 #1 SMP Fri Dec 31 04:05:16 MSK 2021 x86_64 GNU/Linux
.能和那个联系起来吗?
nft版本是nftables v0.9.8 (E.D.S.)
,系统是新更新的Debian Bullseye。