具有可变源的 Firewalld

具有可变源的 Firewalld

我正在写剧本,但我被困住了。

我有一个网址(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

相关内容