変更可能なソースを持つファイアウォール

変更可能なソースを持つファイアウォール

スクリプトを書いていますが、詰まっています。

私はURLを持っています(https://file.test.com/tips)には、ネットワークサブネットのリストを含むファイルが含まれています。

文書の内容:

{192.168.1.0/24,10.0.0.0/24,2001:aaaa:bbbb:cccc::/64}

私が走ろうとしたとき

# firewall-cmd --permanent --zone=trusted --add-source="$(curl https://file.test.com/tips)"

わかりました。

Error: INVALID_ADDR: Zone 'trusted': invalid source '{192.168.1.0/24,10.0.0.0/24,2001:aaaa:bbbb:cccc::/64}'

走るとうまくいきます。

# firewall-cmd --permanent --zone=trusted --add-source={192.168.1.0/24,10.0.0.0/24,2001:aaaa:bbbb:cccc::/64}

私が間違っていることを知っている人はいますか?

ベストアンサー1

以前はコメントしましたが、これはbash拡張の問題に近いです。したがって、正しい方法はループを使用し、サブネットを次のように分割することです。,

#!/usr/bin/env bash

read_file=$(curl -s https://file.test.com/tips | sed 's/[{}]//g')

saveIFS=$IFS

IFS=',' read -ra subnets <<< "$read_file"

for subnet in "${subnets[@]}"
  do
    firewall-cmd --zone=trusted --add-source="$subnet" --permanent
  done 

firewall-cmd --reload

IFS=$saveIFS

evalまたは別のオプションはprintf '%q' "${subnet}"

evalお勧めできませんが、欲しいものにはかなり安全です。

eval firewall-cmd --permanent --zone=trusted --add-source="$(curl -s https://file.test.com/tips)" && firewall-cmd --reload

おすすめ記事