Firewalldコマンドを使用して信頼できるゾーンに複数のインターフェイスを追加する方法は?

Firewalldコマンドを使用して信頼できるゾーンに複数のインターフェイスを追加する方法は?

次のコマンドを使用して、特定のインターフェイスを信頼できるゾーンとして追加しました。

firewall-cmd --zone=trusted --change-interface=eth0

ここでは、複数のインターフェイス(例:eth0、eth1、bond0、bond1)があり、bashスクリプトで書かれた上記のコマンドを実行して、すべてのインターフェイスを一度追加したいとします。

上記のコマンドを一度実行してすべてのインターフェイスを追加する構文とコマンドは何ですか?

答え1

これにより、すべてのデバイス名が取得され、各インターフェイスのコマンド実行が続行されます。

for i in $( ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d' ); do
    firewall-cmd --zone=trusted --change-interface=$i
    echo "Added $i to trusted\n"
done

答え2

このコマンドを使用するLinuxシステムip(しかしバリアントではありません)を使用すると仮定するbusyboxと、おそらく 。addrip -j addr

この結果に基づいて、JSONプロセッサを使用してjqインターフェイス名を抽出して評価できるシェルコードを生成できます。

eval "$(
    ip -j addr |
    jq -r 'map(
        ["firewall-cmd", "--zone=trusted", "--change-interface=" + .ifname],
        ["printf", "added %s to trusted\\n", .ifname] | @sh )[]'
)"

私が持っているUbuntu仮想マシンで次のコマンドを評価します。

'firewall-cmd' '--zone=trusted' '--change-interface=lo'
'printf' 'added %s to trusted\n' 'lo'
'firewall-cmd' '--zone=trusted' '--change-interface=enp0s3'
'printf' 'added %s to trusted\n' 'enp0s3'
'firewall-cmd' '--zone=trusted' '--change-interface=enp0s8'
'printf' 'added %s to trusted\n' 'enp0s8'
'firewall-cmd' '--zone=trusted' '--change-interface=docker0'
'printf' 'added %s to trusted\n' 'docker0'

あるいは、インターフェイス名だけを繰り返すより伝統的なシェルループを作成することもできます。

ip -j addr | jq -r 'map(.ifname)[]' |
while IFS= read -r ifn; do
    firewall-cmd --zone=trusted --change-interface="$ifn"
    printf 'added %s to trusted\n' "$ifn"
done

答え3

これにより、以前の回答で複雑で説明されていない sed 構文を回避できます。

devlist=`netstat -i |cut -f1 -d' '`
for dev in ${devlist}; do
  echo "Adding $dev to trusted"
  firewall-cmd --zone=trusted --change-interface=$dev
done

関連情報