在多个地方定义 nft 规则时出错

在多个地方定义 nft 规则时出错

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

相关内容