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

관련 정보