複数の場所でnftルールを定義中にエラーが発生しました。

複数の場所でnftルールを定義中にエラーが発生しました。

私のnftableファイルが大きすぎます。小さなファイルに分割して試してみましたincludeが、エラーが発生しました。複数の部分がどのように結合されるのか理解できない場合があります。

nftablesは含まれているすべての構成ファイルを読み取り、既存の構成と一緒にメモリーに構成オブジェクトを作成し、1回のアトミック操作で古い構成を新しい構成に置き換えます。

これは動作する小さな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
    }   
}

ただし、2つのファイルに分割するとロードされません。ファイルに保存して「論理的に」分割しても機能しません。

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

2番目のファイルでは、次のエラーが発生します。

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

あなたが言ったように、いくつかのファイルのためではありません。同じテーブルを2回定義するからだと思います。私が正しく覚えているなら、この機能のようなものを使うことができます。

マニュアルにはインクルードの使用例があります。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
}

関連情報