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的区域配置。services
请protocols
参考传入如何允许某些传出连接(但不是全部)?