我使用 Centos 8 Stream,这是一个滚动发布版本4.18.0-301.1.el8.x86_64
,我发现奇怪且不一致的行为。
根据firewalld 的启动方式,它有不同的行为。
当firewalld在启动时启动时,它会添加LIBVIRT_*链。
当使用systemctl重新启动firewalld时,所有这些链都会消失。
为什么?
# 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
不--disable
带选项的版本,然后重新启动libvirtd
服务或重新启动。