Hyper-V + Ubuntu 18.04 环境下尽最大可能阻止虚拟机被克隆
在 Hyper-V + Ubuntu 18.04 环境下,你可以采取多层手段来尽最大可能阻止虚拟机被克隆或被克隆后继续正常使用。
要说明的是:完全 100% 防止克隆是不可能的(因为管理员永远可以复制 VHDX)。
但我们可以做到:
✔ 克隆后自动失效
✔ 克隆后业务无法运行
✔ 让克隆无意义
以下给你最有效、最实用的方案组合。
✅ 方案一:使用系统级唯一 ID 校验(最通用、最有效)
思路:
每次开机时脚本检查系统硬件 ID 是否与预设一致。
如果被克隆到其他机器(UUID/MAC 变化),则自动停机或锁定系统。
1)生成当前系统的 UUID、MAC
cat /sys/class/dmi/id/product_uuid
ip link show | grep ether
2)把这些值保存到一个文件,比如:
/etc/vm_protect.conf:
UUID=4C4C4544-0056-3110-804B-B6C04F39324A
MAC=00:15:5D:22:33:44
3)创建校验脚本
/usr/local/bin/check_clone.sh:
#!/bin/bash
CONF="/etc/vm_protect.conf"
UUID_NOW=$(cat /sys/class/dmi/id/product_uuid)
MAC_NOW=$(ip link show eth0 | grep ether | awk '{print $2}')
UUID_OK=$(grep UUID $CONF | cut -d= -f2)
MAC_OK=$(grep MAC $CONF | cut -d= -f2)
if [[ "$UUID_NOW" != "$UUID_OK" ]] || [[ "$MAC_NOW" != "$MAC_OK" ]]; then
echo "Cloned or moved VM detected!" >> /var/log/clone_detect.log
shutdown -h now
fi
4)加入 systemd 开机检查
/etc/systemd/system/checkclone.service:
[Unit]
Description=Clone Detection Service
Before=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/check_clone.sh
[Install]
WantedBy=multi-user.target
启用:
chmod +x /usr/local/bin/check_clone.sh
systemctl enable checkclone.service
📌 效果
✔ 虚拟机克隆后 UUID / MAC 不一致
✔ 会在启动阶段自动 shutdown
✔ 克隆的副本永远无法正常运行
这类方法是企业私有云最常用的反克隆策略。
✅ 方案二:使用 TPM + Secure Boot + BitLocker / LUKS
如果你使用 第二代 Hyper-V 虚拟机(Generation 2)
你可以:
-
启用 虚拟 TPM(vTPM)
-
启用 Secure Boot
-
使用 Ubuntu 的 LUKS 全盘加密
原理:
虚拟机克隆后:
-
vTPM 状态不完整
-
BitLocker/LUKS 解密失败
-
系统无法正常启动
✔ 是最难绕过的方式之一。
✅ 方案三:在业务层做反克隆(尤其适用于服务器)
例如:
1)程序启动时校验机器指纹
✔ hostname
✔ UUID
✔ 虚拟网卡 MAC
✔ 公钥指纹
✔ CPU 序列号(虚拟 CPU 也能读到虚拟序列)
并生成一个 授权文件
授权文件与硬件绑定,被克隆后:
❌ 没有授权
❌ 无法运行业务
✔ 比系统层更灵活
❌ 方案四:禁用“复制 VHDX” —— 不可行
Hyper-V 本身不提供禁止管理员复制 VHDX 的功能,因此底层无法阻止克隆。
🔥 最推荐方案(最佳组合)
如果你希望 极难被克隆、克隆后一定无法用,用下面组合:
✔(1)系统 UUID + MAC 开机校验
✔(2)Hyper-V Generation 2 + vTPM + Secure Boot
✔(3)LUKS 加密并绑定 vTPM
✔(4)业务启动授权校验(最高级别)
这样克隆出来的虚拟机基本上:
-
无法解密磁盘
-
无法通过授权
-
无法开机/无法运行业务
-
克隆者无意义
如果你愿意,我可以为你的 Ubuntu 18.04 Hyper-V 虚拟机
✦ 自动生成完整反克隆脚本
✦ 自动绑定你的当前 UUID/MAC
✦ 给你 systemd 单元文件
✦ 给你 TPM + LUKS 加密方案
✦ 或者实现业务级别授权机制
告诉我你目前使用 Generation 1 还是 2?
我可以给你最合适的方案。
No Comments