说说ESXi虚拟交换机和端口组的“MAC地址更改”和“伪传输”

https://virtualtips.info/?p=316文章中提到过“MAC地址更改”和“伪传输”安全策略。作用范围和“混杂模式”是一样的。

这两个策略分别是做什么的呢?

先了解一些基本概念。

一个物理网卡的ROM中存储着它的MAC地址,不可更改,叫做“初始MAC地址”。

而在操作系统中,比如Windows,该网卡也有个MAC地址,叫做“有效MAC地址”,它是可以通过网卡属性或者注册表修改的。

在默认情况下,初始MAC地址和有效MAC地址是相同的,除非用户修改,修改后,通过物理网卡发送到网络上的帧,源MAC地址就是修改后的“有效MAC地址”,不同于固化的“初始MAC地址”。

虚拟网卡也有类似概念,固化的“初始MAC地址”就是在虚拟机VMX文件中的MAC地址,(ESXi管理员可以修改它,但对虚拟机系统来说,它是固化不可修改的)。而虚拟机系统中的网卡MAC地址,就是“有效MAC地址”,同样可以修改。这些MAC地址,vSphere/ESXi自然都是知道的。

MAC地址更改

ESXi知晓虚拟机的“初始MAC地址”和“有效MAC地址”,当两者不同时,需要执行相应的安全策略:

拒绝:此VM修改了MAC地址,它是想冒充别的VM吗?我把它的端口禁用掉。

允许:我知道VM修改了MAC地址,并启用它的端口。

此时,执行策略的是虚拟交换机,虽然我们说禁用了端口,但其实虚拟机OS本身是不知道的,因为并非在物理层或链路层断开网卡,而是丢弃了发给这个虚拟机OS的帧。

伪传输

MAC地址更改是修改“有效MAC地址”,此时通过此网卡向外传输的帧的源MAC地址也随着“有效MAC地址”修改了。还有些恶意软件,它不修改“有效MAC地址”,直接修改向外传输的帧的源MAC地址。伪传输这个策略检查的就是源MAC是否和“有效MAC地址”一致。

拒绝:当恶意软件修改了源MAC地址(伪造传输),该虚拟机的虚拟网卡就会删除该帧。但会允许没伪造的帧传输出去。

允许:随便什么源MAC,随便发。

此时,执行策略的是虚拟网卡。

两个策略的区别:

MAC地址更改比较的是“有效MAC地址”和“初始MAC地址”,方向是入站(从外界向虚拟机网卡传输的帧),而伪传输比较的是“源MAC”和“有效MAC地址”,方向是出站(从虚拟机网卡向外界发送的帧)。前者是断开入站的端口,后者是过滤出站的伪传输帧。

这两个安全策略可以通过类似“网络执法官”之类的应用配合ARP和PING命令来验证。

参考文档:

MAC 地址更改 (vmware.com)

伪传输 (vmware.com)

说说ESXi虚拟交换机和端口组的“混杂模式”

很多Up主在ESXi虚拟机软路由教程里都提到了ESXi虚拟交换机的安全里要设置“混杂模式”,但基本没有太详细说明什么是”混杂模式”,什么情况要开启“混杂模式”的,先给自己挖个坑,明天出玩回来写一下。

游玩归来填坑~(时隔快一年,再次填坑。)

vSphere虚拟网络02 – 虚拟交换机中,我介绍过vSphere的两种虚拟交换机。标准和分布式。关于“混杂模式”的生效范围,两种虚拟交换机也是有所区别的。以标准虚拟交换机为例,虚拟交换机级别的安全下有“混杂模式”,虚拟交换机的端口组可以继承虚拟交换机的安全属性,也可以覆盖该安全属性。而分布式交换机的”混杂模式“则是作用在端口组和端口级别。PS: 另外的两种安全策略“MAC地址更改”和“伪传输”和“混杂模式”是同理的。可参照官方文档 安全策略,在《关于vSphere网络连接》这个文档中。

关于混杂模式的解释:

混杂模式会清除虚拟机适配器执行的任何接收筛选,以便客户机操作系统接收在网络上观察到的所有流量。默认情况下,虚拟机适配器不能在混杂模式中运行。

尽管混杂模式对于跟踪网络活动很有用,但它是一种不安全的运行模式,因为混杂模式中的任何适配器均可访问数据包,即使某些数据包是否仅由特定的网络适配器接收也是如此。这意味着虚拟机中的管理员或根用户可以查看发往其他客户机或主机操作系统的流量。

注:有时您可能确实需要将标准虚拟交换机或分布式虚拟交换机配置为在混杂模式中运行(例如运行网络入侵检测软件或数据包嗅探器时)。

物理交换机是一个点对点的设备,它维护一个连接到到它上面的设备的MAC地址表。所以它可以实现只把数据送达到指定MAC地址的设备所连接的端口。

虚拟交换机在这方面也是同理。

在虚拟交换机默认不开启混杂模式时,举个例子,假设vSwitch0交换机下有两个端口组,端口组1下有若干Windows虚拟机用于员工办公使用,端口组2下一台Linux虚拟机,管理员用来进行一些网络分析。当我们在端口组2的Linux虚拟机上安装Wireshark之类的抓包工具时,只能抓取到发送到此台Linux虚拟机的数据包(上面提到的点对点),而抓取不到端口组1中的Windows虚拟机之间的数据包或者外界发到Windows虚拟机的数据包,也就是说Wireshark此时是不能远程抓包的。

我们可以对vSwitch0开启混杂模式,或者对端口组2开启混杂模式。推荐对端口组开启,授予权限或安全策略时,一般建议遵守最小化原则。

当端口组2开启混杂模式时,Linux虚拟机就可以抓取vSwitch0上所有数据包了。

这意味着虚拟机中的管理员或根用户可以查看发往其他客户机或主机操作系统的流量。

一个相对易懂的描述就是,混杂模式所做的就是将通过此虚拟交换机的数据流量开放给开启了混杂模式的端口组下面所连接的虚拟机可见。(所以如果是整个虚拟交换机开启混杂模式,就是此虚拟交换机所有流量开放给虚拟交换机下的所有虚拟机都可见。)

如果想尝试上述实验,可以照此创建实验环境,使用Wireshark或者tcpdump在Linux虚拟机上尝试抓取Windows虚拟机的数据包。记得修改混杂模式后重启下虚拟机。

ESXi社区版NVMe驱动更新v1.1

Community NVMe Driver for ESXi | VMware Flings 最近更新,支持到了ESXi 7.0,支持了三款NVMe设备:

VendorVendorIDProductID
ADATA0x1cc18201
Micro/Crucial0xc0a90x2263
Silicon Motion0x126f0x2262

也就是说能匹配以上vid,pid的NVMe设备就可以通过此驱动在ESXi上识别并使用。(在6.7U2更新时,由于ESXi遵照了NVMe 1.3 规范去识别和支持设备,某些消费级别的NVMe因为不支持该规范而无法被ESXi识别并使用,虽说也有用ESXi6.5的某些文件进行替换的变通办法,但还是很麻烦。)

可以下载此驱动,封装到ESXi安装镜像,也可以在已安装好的ESXi系统中离线安装此驱动。

esxcli software vib install -d /xxxxxx/nvme-community-driver_1.0.1.0-2vmw.700.1.0.15843807-component-18290856.zip