nftables:新しいテーブルを変更または作成するときの更新/削除

nftables:新しいテーブルを変更または作成するときの更新/削除

Webフィルタリングテーブルを作成しました。台本に書きました。このスクリプトを常にロードすることはできません。テーブルを更新または削除すると、テーブルが存在しない場合は機能しません。更新または削除しないと、古いルールと新しいルールがマージされます。

テーブルがある場合は、どのように更新または削除できますか?

#!/usr/sbin/nft -f

flush table my_table

table ip my_table {
    chain output {
        type filter hook output priority 0; policy accept;
        ip daddr 8.8.8.8 counter 
        ip daddr 1.1.1.1 counter
        skuid "other" jump restrict_chain
        skuid "d" jump d_chain
    }

    chain accept_chain {
        nftrace set 1 counter accept
    }

    chain reject_chain {
        nftrace set 1 counter reject
    }

    chain restrict_chain {
        #type filter priority 0; policy drop;
        counter
        ip daddr 1.1.1.1 counter
        oifname "lo" jump accept_chain
        oifname != "lo" jump reject_chain
    }

    chain d_chain {
        counter
    }
}

ベストアンサー1

まず、空のテーブルを宣言します。テーブルがすでに存在する場合、エラーは発生せず、内容も変更されません。何も起こりません。存在しない場合は、空のテーブルが作成されました。すべての場合に存在するため、除去が可能です。これはすべて次のように実行できます。同じルールセット。

したがって、チェーンやルールなしでテーブルを宣言してから削除します(マニュアルページリフレッシュすると、チェーンとルールが更新されますが、チェーン自体は削除されずに空になり、名前が変更された古いチェーンまたはセットが保持されているか属性が変更された場合にクラッシュします。これnftables Wikiには削除とフラッシュに関する詳細情報があります。アクション。 )。これで実際に作成できます。同じでユニークルールセットファイル。これで、同じルールセットを最初にエラーを発生させることなく、複数回等しくロードできます。

#!/usr/sbin/nft -f

table ip my_table
delete table ip my_table

table ip my_table {
    chain output {
        type filter hook output priority 0; policy accept;
        ip daddr 8.8.8.8 counter 
# [...]
    }
}

アップデート:十分に新しいカーネルとnftablesdestroyまた、同じべき等化効果を得るために最初の2つのコマンド([ add] +)を置き換えることができる「存在する場合は削除」を意味するキーワードを受け入れます。delete

選択して使用してくださいinclude準備ラインが多く、ルールセットを汚染したくない場合は、これらの準備ラインをすべて別々のファイルに保存するステートメントです。

チェーンレベルで同じことができます。つまり、同じテーブル内の他のチェーンを変更せずに、テーブルとそのチェーンが以前にここにあったと仮定したり要求したりすることなく実行できます。reject_chain活性化の例ですNTRACE、他のテーブルやチェーンは削除されませんmy_table。この例は実用的な用途ではなく、単なる例です。

#!/usr/sbin/nft -f

table ip my_table {
    chain reject_chain {
    }
}
delete chain ip my_table reject_chain

table ip my_table {
    chain reject_chain {
        nftrace set 1 counter reject
    }
}

互換性注:以下のように正しく機能するには、カーネル<3.18を更新して削除する必要があります。説明したウィキペディアで。これ(およびそれに対応するチェーン)は、すべてのカーネルバージョンでも機能します。

table ip my_table
flush table ip my_table
delete table ip my_table

おすすめ記事