如何使用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

假设您在使用该ip命令(但不是它的变体)的 Linux 系统上busybox,我们可能会使用.addrip -j addr

根据该结果,我们可以使用 JSON 处理器jq提取接口名称并创建可以评估的 shell 代码:

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'

或者,我们可以创建一个更传统的 shell 循环,仅迭代接口名称:

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

相关内容