如何在 CentOS 8 上使用 firewalld/libvirt 允许传出流量?

如何在 CentOS 8 上使用 firewalld/libvirt 允许传出流量?

target=ACCEPT我使用 libvirt 在 CentOS 8 主机上安装了 CentOS 8 客户机。但是,除非我使用libvirt 区域,否则防火墙会阻止从客户机到互联网的所有传出流量。

数据中心为服务器提供了两个独立的 IPv4 地址,我想将其中一个 IP 地址用于客户虚拟机。

# virsh net-dumpxml public
<network connections='1'>
  <name>public</name>
  <uuid>…</uuid>
  <forward mode='route'/>
  <bridge name='br-public' zone='libvirt-public' stp='on' delay='0'/>
  <mac address='…'/>
  <ip address='(HOST IP)' netmask='255.255.255.255' />
  <ip family='ipv6' address='…' prefix='128' />
</network>

# firewall-cmd --list-all --zone=libvirt-public
libvirt-public (active)
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: br-public
  sources: 
  services: dhcp dhcpv6 dns ssh
  ports: 
  protocols: icmp ipv6-icmp
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

我认为 ICMP、SSH 和 DNS 应该可以正常工作,因为它们在防火墙区域中列出。

然而,主机上的防火墙不知为何阻止了所有传出的流量:

(guest) # ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From (HOST IP) icmp_seq=1 Packet filtered

当我在主机上记录所有被拒绝的软件包时,我可以看到firewalld 正在拒绝这些网络连接:

"filter_FWDI_libvirt-public_REJECT: "IN=br-public OUT=enp3s0 MAC=… SRC=(GUEST IP) DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=40405 DF PROTO=ICMP TYPE=8 CODE=0 ID=1594 SEQ=3 

当我将区域目标设置为时,一切都开始按预期工作ACCEPT(尽管我更喜欢使用 REJECT):

# firewall-cmd --zone=libvirt-public --permanent --set-target=ACCEPT
# firewall-cmd --reload

显然我不理解firewalld的区域配置。servicesprotocols参考传入如何允许某些传出连接(但不是全部)?

相关内容