事前設定されたnftableに入力ルールを等しく追加する方法

事前設定されたnftableに入力ルールを等しく追加する方法

無料のTCPポートを必要とするユーティリティがあります。既存の構成ファイルを変更したくないため、nftablesにルールを動的に追加できる必要があります。

入力ルールを含む filter という inet テーブルがあります。

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        # existing rules
    }
}

ルールを追加するのは簡単です。たとえば、次のようになります。

nft add rule inet filter input tcp dport { 4848 } ct state new,established counter accept

ここでの質問は、これをすばらしい方法で行う方法です。

  • 同じコマンドを2回、2回実行するとまったく同じルールが作成されました。
  • nft delete rule inet filter input handle ##変更されるハンドル番号が必要で、それを使用してnft -n -a list ruleset | grep ...ハンドル番号を解決するのは正しいとは思いません。
  • 新しいチェーンを追加しnft -fて毎回更新することも、上記のように機能しません。ここ:

これはいいえチェーンは、拒否(または削除)ルールを持つチェーンよりも(許可ルールの形で)より広範なアクセスを提供できます。

答え1

コレクションを使用すると、管理が簡単になります。

table inet filter {
    set myport_tcp {
        type inet_service
        elements = { 4848 }
    }   

    chain input {
        type filter hook input priority 0; policy drop;
        # existing rules
        tcp dport @myport_tcp ct state new,established counter accept
        # more existing rules
    }
}

次の方法でコレクションを消去できます。

nft flush set inet filter myport_tcp 

次の方法でコレクションに新しいポートを追加できます。

nft add element inet filter myport_tcp elements = { 4949 }

または、次の方法でコレクションに複数のポートを追加します。

nft add element inet filter myport_tcp elements = { 14949, 9494 }

関連情報