テスト

テスト

iptables未知の構成状態のホストがある場合は、既存のファイアウォールルールセットが管理されているかどうかを非対話式に解決する効率的な方法があるかどうかを知りたいですnftables

とても簡単に聞こえますね。私はたくさん考えましたが、まだスクリプトを書くための意味のある答えを得ていません...

答え1

この質問の変形最近Kubernetesで修正されましたしたがって、そこで行われた作業を見る価値があります。 (バリアントは、ホストルールを駆動するために使用するか、対応するiptables-legacyIPv6バリアントを使用するかどうかです。)iptables-nft

Kubernetesが取るアプローチは次のとおりです。各「save」コマンドで出力された行数を見るiptables-legacy-saveおよびiptables-nft-save(および対応するIPv6バリアント)。前者が10本以上の出力線を生成する場合、または後者よりも多くの出力を生成する場合は、それを使用する必要があるとしiptables-legacyますiptables-nft

あなたの場合、意思決定ツリーは次のようになります。

  • iptablesインストールされていない場合nft
  • nftインストールされていない場合iptables
  • iptables-saveルール定義出力が生成されない場合nft
  • nft list tablesnft list ruleset出力が生成されない場合は、を使用してくださいiptables

iptables-saveどちらnft list ...も出力を生成し、iptablesそうでない場合はiptables-nft自動化されたプロセスが決定できるかどうかわかりません。

答え2

出力を見ると、iptables使用中かどうかをすばやく知ることができます。それでもいくつかの出力解析が必要なので、100%最適ではありませんが、非常に簡単です。nftablesiptables -V

Red Hatには1つあります。ブログ投稿2020年8月以降、このガイドラインはUbuntuにも適用されます。

このコマンドの2つのバリエーションは次iptablesのとおりです。

  • legacy:よく言われますiptables-legacy
  • nf_tables:よく言われますiptables-nft

最新のiptables-nftコマンドは、nftablesカーネルAPIとインフラストラクチャのブリッジを提供します。

iptablesのバージョンを検索すると、どのバリアントが使用されているかを確認できます。

Ubuntu 22.04(nftables)

の場合、iptables-nftnf_tables で示されるバージョン番号の後の括弧内にバリアントが表示されます。

# iptables -V
iptables v1.8.7 (nf_tables)

Ubuntu 20.04(iptables)

の場合、iptables-legacyバリアントが存在しないか、前のバージョンを括弧内に表示します。

# iptables -V
iptables v1.8.4 (legacy)

テスト

したがって、nftableであることを確認するためにgrepを使用した簡単なテストは次のとおりです。

iptables -V | grep -E ' \(nf_tables\) *$'

...iptables今後はもはやデフォルトで配布されなくなる可能性があるため、より将来のテストは次のようになります。

if command -v iptables; then
    if iptables -V | grep -E ' \(nf_tables\) *$'; then
        echo "nft"
    else
        echo "iptables"
    fi
elif command -v nft; then
    echo "nft";
fi

関連情報