我遇到的大部分信息都倾向于使用桥接连接来设置 KVM 防火墙。
据我了解,如果网络流量无需先通过防火墙即可到达主机,这是一种安全风险。
我已经看到主网卡(例如eth0
)被设置为虚拟机网卡,但这是否排除了主机访问eth0
?
想到的另一个选项是 NIC 的 PCI 直通,但是我遇到了该方法的问题。
是否有任何其他方法要求主机流量首先通过防火墙?你推荐使用什么方法?
我遇到的大部分信息都倾向于使用桥接连接来设置 KVM 防火墙。
据我了解,如果网络流量无需先通过防火墙即可到达主机,这是一种安全风险。
我已经看到主网卡(例如eth0
)被设置为虚拟机网卡,但这是否排除了主机访问eth0
?
想到的另一个选项是 NIC 的 PCI 直通,但是我遇到了该方法的问题。
是否有任何其他方法要求主机流量首先通过防火墙?你推荐使用什么方法?
第一个想法是分离哪些接口用于添加对 VM 的网络访问,哪些接口用于控制主机。第三组接口通常用于访问某种网络共享存储上的 VM 映像。因此,理想情况下您有 6 个接口:4 个千兆以太网和 2 个十千兆以太网。
第二个想法是您可以为主机和虚拟机使用不同的 802.1q VLAN。我已经建立了一个网络,其中我们在三个不同的 VLAN 中有 VM,有时一个 VM 可以参与多个 VLAN(通过创建多个虚拟 NIC 并将它们与主机上的多个不同 VLAN 桥接)
注意服务器硬件通常有一个BMC,用于对主机进行带外控制。本质上,这是一台可以访问主机传感器的小型计算机,它可以看到值(温度、风扇转速)、电源开/关/重置主机,就像你按下按钮一样,甚至具有 IP KVM 功能等等,它有自己的网络地址。它通常还实现 IPMI 协议。它经常被暴露为与 LAN1 共享(即像一个小型交换机,而不是完全交换机 - 主机和 BMC 无法通信,但它们都与外部设备通信)或单独路由到 BMC 的独立以太网插孔。刀片系统每个机箱可能有一个或两个(冗余)BMC,而不是在每个刀片服务器中。
安全设置如下所示:
bond0 是由 LACP 组合而成的 (eth0, eth1),它在主机中有一个 IP 地址,用于控制主机。
bond1 是 (eth2, eth3) 由 LACP 组合而成。它与vlans分开,即主机具有bond1.10,bond1.552虚拟子接口等。创建了桥接:br10桥接bond1.10和参与vlan 10的VM的所有VM主机端接口,br552桥接bond1.552以及 vlan 522 的所有 VM 主机端等。这些接口都没有 IP 地址,因此 VM 无法与主机通信。
bond2 是(eth4,eth5)组合,用于通过 iSCSI,CEPH 访问 VM 磁盘镜像,同步 DRBD 等。它在主机上有一个IP,但由于它的特殊要求连接到完全独立的存储网络。
建议bond0和bond1在物理上是分开的,因为虚拟机不仅不能与主机通信,甚至不能饱和主机的控制网络。例如,该网络用于在实时迁移到其他主机时传输虚拟机的内存内容,并且没有 VM 可以使此过程的性能饱和。
即使您正在构建具有一个物理接口的小型系统来托管五个虚拟机并且必须结合bond0和bond1的功能,您也可以仅在物理接口(可作为默认/本机vlan访问)和参与网桥的子接口上拥有IP地址带有 VM 主机端适配器,均已标记。仍然VM不能直接访问主机,智能L2交换机和单独的防火墙设备或L3交换机单独可以做VLAN间路由和流量过滤。
由于 Linux 网桥
br0
在主机上创建了相应的网络接口(例如),我认为没有办法让主机操作系统完全无法访问网桥。当你的防火墙虚拟机运行时,brctl show
它会告诉你接口eth0
和vnet0
连接到它,但它实际上就像一个三端口开关:一个端口去eth0
,一个去vnet0
(VM),一个去br0
接口上的主持人。您可能可以设置一些ebtables规则来阻止所有进出主机
br0
接口的帧。这可能是最好的方法,但我对 ebtables 的了解还不够,无法提供有关如何做到这一点的任何细节。另一种选择是不在网桥接口上配置任何 IP 地址,这应该会阻止正常应用程序通过它进行通信。像 Wireshark 这样具有 root 权限的应用程序仍然可以访问它(这可能会派上用场)。
在基于 Debian 的系统(例如 Ubuntu)中,您可以将以下内容放入
/etc/network/interfaces
:“手动”的意思是“在启动接口时不要分配任何地址”;它适用于其他东西稍后会分配地址的设置,但它也适用于您根本不想要地址的情况。
一个例外是 IPv6 链接本地地址,它是由内核自动分配的,而不是由发行版的网络设置脚本分配的,因此即使使用“手动”设置,您也可以获得一个。您可以通过在接口上完全禁用 IPv6 来避免这种情况。在其中创建一个文件
/etc/sysctl.d
并将其放入其中:(如果您也可以在接口上完全禁用 IPv4,那就太好了,但没有相应的选项。)