iptables
未知の構成状態のホストがある場合は、既存のファイアウォールルールセットが管理されているかどうかを非対話式に解決する効率的な方法があるかどうかを知りたいですnftables
。
とても簡単に聞こえますね。私はたくさん考えましたが、まだスクリプトを書くための意味のある答えを得ていません...
答え1
この質問の変形最近Kubernetesで修正されましたしたがって、そこで行われた作業を見る価値があります。 (バリアントは、ホストルールを駆動するために使用するか、対応するiptables-legacy
IPv6バリアントを使用するかどうかです。)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 tables
とnft list ruleset
出力が生成されない場合は、を使用してくださいiptables
。
iptables-save
どちらnft list ...
も出力を生成し、iptables
そうでない場合はiptables-nft
自動化されたプロセスが決定できるかどうかわかりません。
答え2
出力を見ると、iptables
使用中かどうかをすばやく知ることができます。それでもいくつかの出力解析が必要なので、100%最適ではありませんが、非常に簡単です。nftables
iptables -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-nft
nf_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