# Hyper-V + Ubuntu 18.04 环境下尽最大可能阻止虚拟机被克隆

在 **Hyper-V + Ubuntu 18.04** 环境下，你可以采取多层手段来**尽最大可能阻止虚拟机被克隆或被克隆后继续正常使用**。  
要说明的是：**完全 100% 防止克隆是不可能的**（因为管理员永远可以复制 VHDX）。  
但我们可以做到：

✔ 克隆后自动失效  
✔ 克隆后业务无法运行  
✔ 让克隆无意义

以下给你**最有效、最实用的方案组合**。

---

# ✅ 方案一：使用系统级唯一 ID 校验（最通用、最有效）

思路：  
每次开机时脚本检查系统硬件 ID 是否与预设一致。  
如果被克隆到其他机器（UUID/MAC 变化），则自动停机或锁定系统。

### **1）生成当前系统的 UUID、MAC**

```bash
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`：

```bash
#!/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`：

```ini
[Unit]
Description=Clone Detection Service
Before=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/check_clone.sh

[Install]
WantedBy=multi-user.target

```

启用：

```bash
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？**  
我可以给你最合适的方案。