변경 가능한 소스가 있는 방화벽

변경 가능한 소스가 있는 방화벽

스크립트를 작성 중인데 막혔어요.

나는 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

관련 정보