재부팅 후 활성화된 방화벽이 재부팅 후 활성화된 방화벽과 다르게 동작하는 이유는 무엇입니까?

재부팅 후 활성화된 방화벽이 재부팅 후 활성화된 방화벽과 다르게 동작하는 이유는 무엇입니까?

롤링 릴리스 버전인 Centos 8 Stream을 사용하고 있는데 4.18.0-301.1.el8.x86_64이상하고 일관되지 않은 동작이 나타납니다.

방화벽이 시작되는 방법에 따라 다르게 동작합니다.

  • 부팅 시 방화벽이 시작되면 LIBVIRT_* 체인이 추가됩니다.

  • systemctl을 사용하여 방화벽을 다시 시작하면 이러한 체인이 모두 사라집니다.

  • 왜?

# nftables after the reboot
$ nft list tables
table ip filter
table ip nat
table ip mangle
table ip6 filter
table ip6 nat
table ip6 mangle

# nftables after the systemctl restart
$ nft list tables
table ip filter
table ip nat
table ip mangle
table ip6 filter
table ip6 nat
table ip6 mangle
table bridge filter
table ip security
table ip raw
table ip6 security
table ip6 raw
table bridge nat
table inet firewalld
table ip firewalld
table ip6 firewalld
$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
LIBVIRT_INP  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
LIBVIRT_FWX  all  --  0.0.0.0/0            0.0.0.0/0           
LIBVIRT_FWI  all  --  0.0.0.0/0            0.0.0.0/0           
LIBVIRT_FWO  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
LIBVIRT_OUT  all  --  0.0.0.0/0            0.0.0.0/0           

Chain LIBVIRT_INP (1 references)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain LIBVIRT_OUT (1 references)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:68
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:68

Chain LIBVIRT_FWO (1 references)
target     prot opt source               destination         
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain LIBVIRT_FWI (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain LIBVIRT_FWX (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0    

$ sudo systemctl restart firewalld

$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination       

이는 매우 혼란스럽고 디버그하기 어렵습니다. 특히 openvpn-as 서비스를 시작한 후 iptables 체인이 추가되었습니다.

답변1

firewalld이러한 체인을 추가하는 것은 사실이 아닙니다. 체인 이름에서 알 수 있듯이 체인은 구성 위에 추가됩니다 libvirt.firewalld

CentOS 8 Stream의 공장 기본 구성에는 가상 머신(또는 CentOS 8 시스템 자체가 가상 머신인 경우 중첩된 가상화)을 실행하기 위한 일부 준비가 포함되어 있습니다. CentOS에서 가상 머신을 실행할 필요가 없다면 이를 비활성화해야 할 수도 있습니다.

현재 CentOS 8 Stream 테스트 시스템이 없지만 이것이 도움이 될 것이라고 생각합니다.

virsh net-destroy default              # unconfigure what libvirtd has done for now
systemctl stop libvirtd.service        # stop the service
systemctl disable libvirtd.service     # persistently disable it

어떤 목적으로 계속 실행 하고 싶지만 libvirtd기본 네트워크 설정을 비활성화하려는 경우 다음과 같이 할 수 있습니다(그러나 이것이 iptables 추가를 지울지는 확실하지 않습니다).

virsh net-destroy default           # unconfigure what libvirtd has done for now
virsh net-undefine default          # persistently remove libvirtd network config

아니면 그냥: (libvirtd를 다시 설치하거나 기본 구성을 복원하지 않고는 실행 취소할 수 없습니다.)

virsh net-destroy default               # unconfigure what libvirtd has done for now
virsh net-autostart default --disable   # tell libvirt to not autostart default config

버전 3을 실행 취소하려면 옵션 virsh net-autostart default없이 버전을 사용하고 서비스를 다시 시작하거나 재부팅하면 됩니다.--disablelibvirtd

관련 정보