nftablesルールを自動的に置き換える方法は?

nftablesルールを自動的に置き換える方法は?

nftablesルールを自動的に置き換えようとしています。 Nftables公式wiki状態-fはこれを達成するために推奨される方法です。ただし、nft -f /path/to/new/rulesDebian Busterを実行すると、新しいルールが現在のルールに代わる代わりに追加され、2つのルールセットを同時に実行するシステムになります。

systemd'を介して設定を再ロードしようとすると同じことが起こりますnftables.service

nft単一のアトミック操作で新しいルールセットを追加しながら、現在のルールセットをどのように削除できますか?

ベストアンサー1

作業完了nft -f /path/to/new/rules はいアトミック:これは完全に完了したりまったく完了しない(再開など)ことを意味し、送信直後に一致する次のパケットにのみ影響します。 (エラーのため)終わらず半分だけ完了しました。したがって、以前のルールセットを削除しなかった場合は、期待どおりに機能します。自動的にルールを追加します。再び、コメントで述べたように原子ルールの置き換えウィキペディアから:

繰り返し規則: 行flush table filterの先頭に行を追加する場合フィルタテーブルファイルを使用すると、iptables-restore が提供するのと同じアトミックルールセット置換を実装できます。カーネルはトランザクション内のファイルのルールコマンドを処理するため、デフォルトでは新しいルールのフラッシュとロードが同時に発生します。テーブルを更新しないように選択すると、構成を再ロードするたびに冗長ルールが表示されます。

これを行うには、同じ取引に参加する必要があります。削除以前のルールをルールセットに追加する前に削除してください。最も簡単ですが(すべてに影響を与えます)nftables、含むiptables-nftまた、使用される場合)上記のものと同様に、ルールセットの前に以下を追加するだけです/path/to/new/rules

flush ruleset

論理機能を分離したままにするために、異なる時間に異なるテーブルをロードする場合(nftables、テーブルには(特定のファミリ用)すべての種類の基本チェーンを含めることができますが、次のテーブルと直接同じではありません。iptablesflush ruleset固定可能なチェーンセットがあります。ルールファイルから他のテーブル(インクルード)が削除されるため、少し複雑になります。iptables-nft併用する場合のルールnftables)。その後、これはたとえばテーブルレベルで実行する必要があります(ただし、これを行う前に詳細をお読みください)。

delete table inet foo

以下はオーバーライド(table inet foo {...)です。現状のまま、これは別の鶏と卵の問題を引き起こします。ファイルを最初に読み取ると(開始時に)、削除操作が失敗するため、テーブルが存在しないため、すべてが自動的に失敗します。すでに宣言されているテーブルの名前を宣言することはno-opと見なされ、失敗しないため、最終的には次のことができます。

table inet foo
delete table inet foo

table inet foo {
[...]
  • 注1:すべての状況で正しく機能するにはカーネル >= 3.18 必要、そうでない場合は、使い続けるのが最善ですflush ruleset

  • 注2:上記のWikiコメントではこの場合に使用することをお勧めしますflush table inet fooが、コレクションが存在する場合はこの場合は使用しないことをお勧めします。コレクションから要素を削除しません。、ルールセット内で要素が追加され、変更された場合、要素は再び置換されずに追加されます。また、基本チェーンのタイプ/フックをオーバーライドすることもできません。table inet foo+を使用すると、delete table inet fooこれらの欠点はありません。もちろん、ルールを再ロードするときにコレクションの要素を維持する必要がある場合は、それを使用してflush table inet fooこのアプローチの制限に適応することを検討できます。


すべての場合において、現在のルールをルールファイルにダンプするときは注意が必要ですnft list {ruleset, table inet foo, ...} > /path/to/new/rules。これには更新または削除コマンドは含まれておらず、手動で再追加する必要があります。あなたは使用することができますinclude実際のルールの外側に「配管工」ステートメントを配置して、この問題を克服してください。

おすすめ記事