我所遇到的大部分信息都倾向于使用桥接连接来build立KVM防火墙。
根据我的理解,如果networkingstream量能够到达主机,而不必先通过防火墙,则存在安全风险。
我已经看到主网卡(例如eth0 )被设置为虚拟机网卡,但是这是否排除主机访问eth0 ?
另一个想到的选项是网卡的PCI直通,但是我遇到了这个方法的问题。
有没有其他方法需要主机stream量先通过防火墙? 你推荐使用什么方法?
第一个想法是分离哪些接口用于添加networking访问到虚拟机,哪些是用来控制主机。 通常使用第三组接口来访问某种networking共享存储上的虚拟机映像。 所以你最好有6个接口:4个千兆以太网和2个10兆以太网。
第二个想法是,您可以为主机和虚拟机使用不同的802.1q VLAN。 我build立了一个networking,在三个不同的VLAN中拥有虚拟机,有时一个虚拟机可以参与多个VLAN(通过创build多个虚拟网卡并在主机上使用多个不同的VLAN进行桥接)
注意服务器有一个BMC,用于主机的带外控制。 本质上,这是一个小型计算机,可以访问主机的传感器,它可以看到值(温度,风扇RPM),开机/关机/重置主机,就像你按下button,甚至具有IP KVMfunction等,networking地址。 它通常也实现IPMI协议。 它经常与LAN1共享(即像一个小型交换机,不完全交换机主机和BMC不能通信,但它们都与外部设备通信)或独立的以太网接口(独立的路由到BMC)。 刀片系统每个机箱可以有一个或两个(冗余)BMC,而不是每个刀片服务器。
安全设置看起来像这样:
bond0是(eth0,eth1)由LACP合并,它在主机中有一个IP地址,用于控制主机。
bond1是(乙2,乙3)由LACP合并。 它与vlans分离,即主机有bond1.10,bond1.552虚拟子接口等。有创build的网桥:br10网桥bond1.10和所有VM主机端接口,用于参与vlan 10的虚拟机,br552网桥bond1.552和所有VM主机端的vlan 522等。 这些接口都没有IP地址,所以虚拟机无法与主机通信。
bond2是(eth4,eth5)的组合,用于通过iSCSI,CEPH访问VM磁盘映像来同步DRBD等。 它在主机上有一个IP,但是连接到完全独立的存储networking,具有特殊的要求。
build议bond0和bond1物理分离,使虚拟机不能仅与主机通信,甚至不能使主机的控制networking饱和。 例如,该networking用于在实时迁移的情况下将虚拟机的内存内容传输到其他主机,并且没有虚拟机可以使该过程的性能饱和。
即使你只用一个物理接口构build一个小型系统来托pipe五个虚拟机,并且必须结合bond0和bond1的function,你也可以只在物理接口(可以访问默认/ native vlan)和子接口上使用IP地址与VM主机端适配器,所有标记。 仍然是虚拟机无法直接访问主机,只有智能二层交换机和单独的防火墙设备或三层交换机才能进行跨VLAN路由和stream量过滤。
由于Linux桥接器在主机上创build了一个相应的networking接口(例如br0 ),我不认为有办法让主机操作系统完全无法访问网桥。 在防火墙虚拟机运行的情况下, brctl show会告诉你, eth0和vnet0接口连接到它,但实际上它是一个三端口交换机:一个端口转到eth0 ,一个转到vnet0 (虚拟机)去主机上的br0接口。
你可能可以设置一些ebtables规则来阻止去往或来自主机的br0接口的所有帧。 这可能是最好的方法,但是我不太了解ebtables提供任何细节。
另一个select是在桥接接口上不configuration任何IP地址,这将阻止正常的应用程序通过它进行通信。 Wireshark等应用程序仍然可以访问root权限(这可能会派上用场)。
在基于Debian的系统(如Ubuntu)中,可以将以下内容放在/etc/network/interfaces :
auto br0 iface br0 inet manual bridge_ports eth0 bridge_stp off
“手动”的意思是“在接口启动时不要分配任何地址”; 它意味着其他的东西会在稍后分配一个地址的设置,但是当你根本不需要地址的时候它也可以工作。
唯一的例外是IPv6链接本地地址,它由内核自动分配,而不是分配的networking设置脚本,所以即使使用“手动”设置,也可以获得一个地址。 您可以通过在接口上完全禁用IPv6来避免这种情况。 在/etc/sysctl.d创build一个文件,并把它放在里面:
net.ipv6.conf.br0.disable_ipv6=1
(如果你完全可以在接口上禁用IPv4,那也不错,但是没有相应的选项。)