我的 nftable 文件变得太大了。我尝试将其拆分为较小的文件并使用include
,但出现错误。我可能不明白多个部分是如何合并在一起的。
nftables 将读取所有包含的配置文件,在内存中与现有配置一起创建配置对象,然后在一个原子操作中将旧配置交换为新配置
这是一个可以工作的小nft文件(即可以成功加载)
# OK
table inet filter {
set deny_ipv4_ipset {
type ipv4_addr
flags interval
}
chain geoip {
type filter hook prerouting priority mangle
policy accept
meta iiftype loopback accept
ct state {related, established} accept
ip saddr @deny_ipv4_ipset drop
}
}
但是当我把它分成两个文件时,它无法加载。即使我将其保存在一个文件中并仅“逻辑上”拆分它,它也不起作用。
# not OK
table inet filter {
set deny_ipv4_ipset {
type ipv4_addr
flags interval
}
}
table inet filter {
chain geoip {
type filter hook prerouting priority mangle
policy accept
meta iiftype loopback accept
ct state {related, established} accept
ip saddr @deny_ipv4_ipset drop
}
}
第二个文件产生此错误:
Error: No such file or directory; did you mean set ‘deny_ipv4_ipset’ in table inet ‘filter’?
ip saddr @deny_ipv4_ipset drop
^^^^^^^^^^^^^^^^
是的,我的意思是表 inet 'filter' 中的 'deny_ipv4_ipset',那么为什么会发生这个错误呢?
答案1
正如你所说,这不是因为多个文件。我认为这是因为你定义了同一个表两次。如果我没记错的话,您可以使用类似功能的东西。
该手册有一个使用 include 的示例https://wiki.nftables.org/wiki-nftables/index.php/Classic_perimetral_firewall_example
table inet filter {
…
include "./inet-filter-sets.nft"
include "./inet-filter-preroute-chains.nft"
}
inet-filter-sets.nft
set deny_ipv4_ipset {
type ipv4_addr
flags interval
}