Proxmox VE 全盘加密

这篇文章记录如何给Proxmox VE加密部署

在安装PVE之前要先去安装一下Debian,在此基础之上去安装PVE。

此次安装的思路是,使用debian的livecd去分区,分区好了之后通过debootstrap去安装系统以及对应的配置。完成之后验证加密和远程解锁没有问题之后再去进行安装PVE。

使用debian 12 livecd standard iso进行引导,引导完成之后启动ssh:

apt install -y ssh
systemctl start ssh
passwd user

之后我们就可以使用ssh进行链接了

ssh user@ip
sudo -i

安装必要的软件,这里需要有加密的和fat32系统以及引导支持:

apt install dosfstools cryptsetup efibootmgr

此次的分区方案如下:

磁盘分区文件系统挂载点
/dev/sdc1fat32/boot
/dev/sdc2luksnone
/dev/mapper/cryptlvmpvnone
/dev/pve/rootext4/
/dev/pve/swapswapnone

初始化引导分区:

mkfs.fat -F32 /dev/sdc1

LUKS初始化

cryptsetup luksFormat /dev/sdc2

打开luks分区:

cryptsetup luksOpen /dev/sdc2 cryptlvm

创建对应的pv和vg:

pvcreate /dev/mapper/cryptlvm
vgcreate pve /dev/mapper/cryptlvm

创建lv:

lvcreate -L 60G pve -n root
lvcreate -L 8G pve -n swap

初始化文件系统:

# Format swap
mkswap /dev/pve/swap
# Format root drive
mkfs.ext4 /dev/pve/root

创建挂载点:

mkdir -pv  /mnt/debinst

挂载:

mount /dev/pve/root /mnt/debinst

创建boot的分区:

mkdir -pv /mnt/debinst/boot

挂载:

mount /dev/sdc1 /mnt/debinst/boot

安装debootstrap

apt-get install debootstrap

运行 debootstrap

debootstrap --arch amd64 bookworm \
     /mnt/debinst https://mirrors.tuna.tsinghua.edu.cn/debian/

进入chroot:

LANG=C.UTF-8 chroot /mnt/debinst /bin/bash

创建块设备:

apt install makedev
mount none /proc -t proc
cd /dev
MAKEDEV generic

安装必要的软件

apt install apt-transport-https ca-certificates aptitude vim dosfstools cryptsetup efibootmgr lvm2  -y

修改/etc/fstab,内容如下,当前阶段可以只写一个 / 的挂载信息:

UUID=e355fefa-2699-42a4-af4d-0f6edb04f854       /               ext4            rw,relatime     0 1

重新配置tzdata的包根据提示进行选择:

dpkg-reconfigure tzdata

修改/etc/network/interfaces文件,内容如下:

auto enp5s4f0
iface enp5s4f0 inet static
    address 192.168.100.254
    network 192.168.100.0
    netmask 255.255.255.0
    broadcast 192.168.100.255
    gateway 192.168.100.1

对应的dns配置如下:

echo nameserver 192.168.100.1 > /etc/resolv.conf

主机名配置:

echo pve.plz.ac > /etc/hostname

hosts配置 /etc/hosts

127.0.0.1 localhost
192.168.100.254 pve pve.plz.ac

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

这里要注意的是要有这一条 192.168.100.254 pve pve.plz.ac

ip pve pve的主机名这么个格式不然后续安装pve-manager会出问题。

修改为国内的清华源:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

根据配置来即可:

aptitude install locales
dpkg-reconfigure locales

直接安装stable的内核即可:

apt-get install linux-image-amd64

安装Grub:

aptitude install grub-efi

安装Grub到引导分区:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Proxmox

修改grub的默认配置:

GRUB_CMDLINE_LINUX="crypt_root=UUID=ba8ae089-3095-44d6-bf09-c8f1bc3946de  root=/dev/pve/root root_trim=yes rhgb  alpha_support=1 loglevel=7"

生成配置:

grub-mkconfig -o /boot/grub/grub.cfg

安装ssh:

apt install ssh -y

设置root密码:

passwd

设置允许root登录/etc/ssh/sshd_config

PermitRootLogin yes

安装对应的包:

apt install cryptsetup-initramfs dropbear-initramfs

配置加密的设备:

vi /etc/crypttab

内容如下:

cryptlvm UUID=ba8ae089-3095-44d6-bf09-c8f1bc3946de none luks,discard

这里的cryptlvm就是标识要去解锁的名称,后续这个就是luks分区的uuid。

配置对应的ssh key /etc/dropbear/initramfs/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCdN7vodQHSRillTyvO7pZbGCVv2QOxBmbfuFSL7G/AXeRO36vKKGIE8KX+kxTGoOOUeNVF2oGaWacAc4Ma/0G2LKGO7qEQNasR9+urCqEV0su6r235BCZ1Omo3I025Sa52gq7Wuq6PDSs4m+8Q1pfeutWwXnk5E+tNFgyvMG1i4luCugPh2Zf2oQRg/z+XjK3H/0hHNqe1UB4jVnkEvplvbAT45JUKRwTKQuIM5QdHjHZqASu6qFNaDJAXh2qyMTGO96Ss5aj+mJOiSjsDyMiVZlGZr8JECduVfjmvv9Iicp7MXpIPYK0yySOZPJB7grDLkolT+ccwrQMkEs//oFkA7koIMvcOzhsCBiAL2AQ5qNAi4oaBexnW482muNhs/XXnG09mFy9Q66LWguS2MC5UWGoG1G67S3Pd2YcEiJrVO+WsjnR6tsuqFmd58D0UmvrgrtwEi3a+S9HXUYYjFfB+LJdzzRs4GDGAu5ZKfQqt/sbMH+F6wY4t08HdoOEmqtU= [email protected]

修改dropbear的配置 /etc/dropbear/initramfs/dropbear.conf,添加内容如下:

DROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -s -c cryptroot-unlock"

配置静态ip修改/etc/initramfs-tools/initramfs.conf文件,内容如下:

IP=192.168.100.254::192.168.100.1:255.255.255.0:pve.plz.ac

更新initramfs:

update-initramfs -u -v

更新grub:

grub-mkconfig -o /boot/grub/grub.cfg

清理掉apt的缓存和下载的包:

apt clean

退出livecd

exit
umount -R /mnt/debinst

重启:

reboot -f 

重启之后就可以测试使用ssh进行解锁了。

添加源:

echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg 
apt update && apt full-upgrade

安装pve的包内核,安装完成之后重启:

apt install proxmox-default-kernel
systemctl reboot

安装pve:

apt install proxmox-ve postfix open-iscsi chrony -y

安装完成之后可以选择直接重启机器然后打开浏览器:

https://ip:8006 输入你设置的root密码就可以看到pve的登录界面了。

在之前创建卷的时候是没有配置把剩余的空间给到lvm thin data的,这里配置一下。

创建lvm thin:

lvcreate -T -l +100%FREE pve -n data
lvconvert --type thin-pool pve/data

修改/etc/pve/storage.cfg配置,添加内容如下:

lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

在页面上刷新就可以看到了。

如果说遇到有问题的情况需要进入到livecd进行修复可以通过下面的操作进行:

进入livecd之后

apt install dosfstools cryptsetup efibootmgr lvm2

打开硬盘

crpytsetup luksOpen /dev/sda2 cryptlvm

挂载:

mount /dev/pve/root /mnt
mount /dev/sda1 /mnt/boot

挂载其他必要的文件系统:

mount -v -t proc none /mnt/proc
mount -v --rbind /sys /mnt/sys
mount -v --rbind /dev /mnt/dev
mount -v --make-rslave /mnt/sys
mount -v --make-rslave /mnt/dev

进入chroot:

chroot /mnt

维护结束之后:

exit 
umount -R /mnt
reboot
  • PVE也要整合到当前的备份方案中
  • 手动输入密码的方式还是有点不太安全,后续考虑使用单独的服务来去做这个加密和解密