Proxmox: Encriptação completa de Disco

Se desejar encriptar os seus dados, é geralmente recomendável começar pelo nível mais fundamental para assegurar a máxima proteção dos dados. Caso todas as suas máquinas virtuais estejam a correr no Proxmox, adicionar encriptação a todos os discos no Proxmox pode ser a solução mais adequada, embora não haja uma forma oficialmente suportada de o fazer. Adicionalmente, apesar de não ter encontrado um guia completo, muitas pessoas têm o desejo de implementar esta medida de segurança sem saber como proceder. Este tutorial destina-se precisamente a essas pessoas: se pretende adicionar encriptação de disco completo ao Proxmox, prossiga com as instruções.

Aviso: Este procedimento não é oficialmente suportado e poderá resultar em problemas durante atualizações futuras (apesar dos esforços para mitigar esta possibilidade). Certifique-se de ter cópias de segurança atualizadas dos seus dados. Serão fornecidos links adicionais caso encontre dificuldades, sendo possível que tenha que resolver alguns problemas por conta própria. Se é iniciante em Linux, esteja ciente de que enfrentará uma curva de aprendizagem íngreme. Não me responsabilizo por perda de dados ou por danos ao sistema. Farei o possível para auxiliar, mas a responsabilidade final é sua.

Se já possui um profundo conhecimento de Linux e Debian e está familiarizado com a técnica de criptografia de disco completo, pode optar por omitir esta secção introdutória. Caso venha a encontrar dificuldades posteriormente, poderá sempre regressar a esta secção para revisão.

TL;DR (Resumo Conciso):
Sim. Para instalar os pacotes necessários, execute o comando apt install cryptsetup-initramfs dropbear-initramfs. Caso necessite de instruções mais detalhadas, recomenda-se a consulta deste guia completo, devido à complexidade dos passos envolvidos. Contudo, esses dois pacotes são fundamentais para habilitar a capacidade de desencriptar remotamente a partição raiz.

O que é a criptografia de disco completo?

A criptografia de disco completo refere-se à prática de proteger integralmente todo o conteúdo do disco (com algumas exceções específicas), assegurando que, quando o sistema está desligado, ninguém possa aceder facilmente aos dados apenas recuperando o disco. Um dos principais benefícios desta prática é a possibilidade de vender ou descartar discos antigos sem a necessidade de apagar os dados, desde que estes estejam encriptados.

Espera-se que esta explicação clarifique o conceito e forneça um ponto de partida claro para a implementação da criptografia de disco completo no Proxmox ou em outros sistemas Linux baseados em Debian.

O meu CPU é suficientemente rápido para o meu disco NVMe? E quanto aos discos autoencriptantes?

Se o resultado do comando cryptsetup benchmark indicar que o algoritmo mais rápido não consegue acompanhar a velocidade do seu disco (ou se estiver preocupado com a carga da CPU devido à encriptação), poderá considerar discos autoencriptantes. Esta opção está fora do âmbito deste tutorial e pode apresentar desafios no desbloqueio remoto, mas se adequar ao seu caso de uso, provavelmente será mais simples do que seguir este tutorial.

Como realizar backups?

Esta é uma questão complexa. Vou apresentar uma solução bastante ineficiente. Aviso! Não testei este método; eu tinha um disco sobressalente, então o meu “backup” foi não modificar a instalação anterior. Todos os dados importantes estavam também copiados para outro dispositivo, permitindo-me reconstruir tudo a partir dos backups em caso de necessidade. A solução mais simples e menos eficiente é usar o comando dd if=/dev/sda of=/mnt/backup/proxmox.img. Isto criará uma imagem bit-a-bit do seu disco (e naturalmente ocupará o espaço equivalente ao tamanho total do disco). Para restaurar, execute o comando inverso: dd if=/mnt/backup/proxmox.img of=/dev/sda (isto irá sobrescrever todos os dados em /dev/sda).

Como adicionar encriptação durante a instalação do Proxmox?

Este tutorial foca na encriptação de uma instalação existente. Se estiver a começar do zero, recomendo instalar o Debian com encriptação de disco completo e posteriormente adicionar o Proxmox. Este é um método avançado, mas está documentado oficialmente. Alternativamente, pode instalar o Proxmox sem encriptação e seguir este guia posteriormente. É um processo complicado, mas deve funcionar.

Por que não usar reencrypt?

Porque não estava ciente dessa opção quando comecei. Se tiver backups, pode considerar esta abordagem, pois pode ser muito mais rápida, especialmente para instalações grandes. Contudo, faça isso por sua própria conta e risco.

Posso testar isto de alguma forma?

Sim, na verdade. O Proxmox pode ser executado dentro do Proxmox, então antes de fazer tudo no sistema ao vivo, instalei o Proxmox dentro de uma VM, dei-lhe dois discos, instalei num e depois segui os passos no outro. Certifique-se de que o processo de arranque reflete o sistema host: escolha UEFI se o seu host também estiver a usar UEFI (OVMF), BIOS caso contrário. Se não tiver a certeza, verifique no console do host: ls /sys/firmware/efi/efivars/. Se isso devolver uma lista de valores, está a executar um sistema UEFI. Outra nota: Mesmo com um disco EFI anexado, não consegui fazer com que ele lembrasse as entradas de arranque, por isso, se reiniciar e notar que a etapa de arranque não foi guardada corretamente, pressione “Esc” durante o arranque da VM, vá para o Gestor de Manutenção de Arranque e escolha Inicializar a partir do Ficheiro, encontre o disco certo e depois EFI/proxmox/grubx64.efi ou qualquer outro ficheiro presente e inicie. Este problema ocorre apenas na VM e não deve afetar nada quando estiver a fazer isto no seu host real.

Para onde vou se ficar preso?

Pessoalmente, recomendo vivamente a Wiki do Arch Linux. É um recurso fenomenal cheio de documentação de alta qualidade. No entanto, tenha cuidado, porque é uma distribuição diferente e, às vezes, isso é relevante (especialmente nos processos de arranque). Infelizmente, a documentação do Debian não é de longe da mesma qualidade, mas existem muitos recursos disponíveis se procurar. Usar “Ubuntu” como termo de pesquisa pode ajudar, pois o Ubuntu é baseado no Debian e existem muitas semelhanças. Vou tentar fornecer links para recursos em cada secção que ofereçam explicações mais detalhadas e uma referência completa no final, também.

Objetivo

O nosso objetivo após este tutorial é o seguinte:

  • A nossa partição raiz (/) é um volume LVM criptografado.
  • O resto do nosso armazenamento LVM está disponível para VMs (dados).
  • As nossas partições de arranque (/boot) e EFI (/boot/efi) não são criptografadas.
  • Podemos descriptografar remotamente o nosso sistema usando SSH.
  • Quaisquer discos físicos adicionais também estão criptografados e, durante o arranque, são descriptografados automaticamente.

Premissas

  • Está a usar o Grub. Vou fornecer algumas explicações adicionais para aqueles que não estão a usar o Grub, mas isso é apenas teórico, porque a minha instalação usou o Grub.
  • Está a inicializar através de UEFI. As instruções abaixo são escritas com isso em mente. Se iniciar através de BIOS, várias coisas serão diferentes.
  • A sua partição raiz está em LVM. Não é um problema se não estiver, mas poderá precisar de ajustar algumas instruções. Se estiver a usar ZFS, terá de lidar com isso por conta própria, pois não estou familiarizado com o seu funcionamento.
  • Tem acesso a um ecrã e teclado ligados ao seu servidor Proxmox. Vai precisar deles.
  • Tem armazenamento suficiente para criar pelo menos um backup completo da sua instalação do Proxmox. Idealmente, tem um disco sobressalente que seja pelo menos tão grande quanto o disco do Proxmox, mas pelo menos faça um backup primeiro.
  • O seu Proxmox está a correr no Debian bookworm. Se não estiver, tudo bem, mas alguns passos podem ser diferentes.
  • Tem uma pen drive disponível com espaço suficiente para um ISO do Debian Live (ou outra forma de arrancar com uma distribuição ao vivo).
  • Tem acesso à internet a partir do seu servidor Proxmox, preferencialmente via DHCP, ou sabe como instalar pacotes adicionais tanto para o ISO do Debian Live quanto para a instalação do Proxmox.
  • Está a usar um sistema de 64 bits. Se estiver a usar um sistema de 32 bits, preste atenção durante a instalação do Grub. Caso contrário, não posso garantir que algo aqui funcione.

Vamos Lá!

Leu o contexto e está pronto para assumir o risco? Então, vamos avançar. Seguiremos estes passos (esperançosamente) para terminar com um sistema criptografado.

  1. Inicializar o ISO do Debian Live
  2. Criar o layout correto das partições
  3. Criptografar a futura partição raiz e configurar o LVM
  4. Copiar a instalação antiga para a nova partição criptografada
  5. Tornar a nova instalação inicializável
  6. Descriptografar outros discos
  7. Adicionar desbloqueio SSH
  8. Inicializar
  9. Solucionar problemas
  10. Referências

Inicializar o ISO do Debian Live

Para começar, precisamos de uma distribuição Linux ao vivo para realizar todas as tarefas. Tecnicamente, é possível fazer muitas dessas operações no servidor Proxmox em execução, se tiver um disco separado que deseja criptografar, mas isso implica alguns riscos. Se chegar ao ponto de copiar dados da instalação antiga para a nova, é mais seguro usar um disco ao vivo em vez do sistema em execução.

Como o Proxmox é baseado no Debian, é recomendável escolher o Debian como sistema ao vivo, apenas para garantir compatibilidade. Pode funcionar com outras distribuições, mas por que arriscar? Descubra qual versão do Debian está a usar:

Bash
cat /etc/os-release | grep VERSION=<br>VERSION="12 (bookworm)"

No meu caso, precisamos de uma imagem do Debian bookworm a partir daqui. Optei pelo sufixo -standard, que não inclui uma interface gráfica. Pode escolher outra opção, mas tudo será feito através do terminal e passaremos muito pouco tempo na interface do servidor, se possível.

Copie esta imagem para uma pen drive usando dd ou uma ferramenta como Rufus ou Balena Etcher (esta última é a minha favorita para Windows). No Linux, o bom e velho dd funciona muito bem. Para outras opções, consulte aqui.

Antes de desligar o sistema, é uma boa prática atualizá-lo. Recomenda-se fazer isso apenas nas versões atualmente suportadas do Debian e Proxmox. Se estiver usando versões mais antigas, atualize-as e verifique se tudo está funcionando corretamente. O objetivo é garantir que quaisquer problemas encontrados mais tarde estejam relacionados apenas com o processo descrito aqui, não com outros componentes.

Depois de confirmar que tudo está atualizado, funcional e a sua pen drive está pronta, reinicie o sistema com o Debian Live. Certifique-se de desligá-lo corretamente para evitar qualquer corrupção de dados que possa interferir nos passos seguintes.

Uma vez no Debian Live, estará pronto para começar a fazer alterações. Dependendo da localização do seu servidor, pode não ser o ambiente mais confortável para trabalhar. Por isso, recomendo configurar o SSH e voltar ao seu computador principal para realizar o resto das operações. Além de facilitar a cópia e colagem de comandos conforme este guia. Para configurar o SSH:

Bash
# Torne-se root
sudo -i
# Atualizar apt é importante, pois ISOs ao vivo estão desatualizadas
apt update
# Instalar SSH
apt install -y ssh
# Iniciar daemon SSH
systemctl start ssh
# Definir uma senha para o usuário regular (usamos isso para conectar no próximo passo)
passwd user
# Descobrir o endereço IP
ip addr

Configurar o SSH:

Lembre-se da senha que definiu e anote o endereço IP atribuído ao Debian via DHCP. Se não estiver conectado automaticamente à internet, pode precisar configurar isso manualmente. Volte para o seu computador principal e use SSH para se conectar:

Bash
# Insira a senha do utilizador
ssh [email protected]
sudo -i

Se precisar reiniciar mais tarde e voltar ao disco live para resolução de problemas, siga estes passos novamente. O disco ao vivo não mantém as suas alterações.

Nota: Durante a depuração, se encontrar avisos repetidos do SSH após cada reinicialização, é porque a chave do host muda a cada vez. O SSH emite um aviso importante, que geralmente é crucial, mas neste caso pode não ser tão útil. Se confiar na sua rede, pode adicionar -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" ao comando SSH para desativar os avisos. No entanto, faça isso por sua conta e risco e consulte man 5 ssh_config para entender o que essas opções fazem. Se não tiver certeza, siga as instruções do aviso do SSH e remova a chave antiga para depois se conectar e confiar na nova impressão digital. Os mais cautelosos podem até comparar a impressão digital diretamente da tela conectada ao servidor, mas isso está além do escopo aqui.

Agora que estamos conectados, vamos instalar os três pacotes necessários durante a instalação. Lembre-se, estes serão instalados no disco ao vivo; portanto, se reiniciar, precisará instalá-los novamente:

Bash
apt install dosfstools cryptsetup efibootmgr

Criar o layout de partição correto:

Finalmente, vamos fazer algumas alterações. Certifique-se de ter backups, pois algumas dessas operações são destrutivas e apagarão dados. Primeiro, examine o layout de partições da sua instalação existente. Por exemplo, se a sua instalação atual estiver em /dev/sda, execute fdisk -l /dev/sda. O meu parecia algo assim:

Bash
Device           Start        End    Sectors   Size Type
/dev/sda1           34       2047       2014  1007K BIOS boot
/dev/sda2         2048    2099199    2097152     1G EFI System
/dev/sda3      2099200 1953525134 1951425935 930.5G Linux LVM

Como queremos criptografar nossa partição raiz (que está em algum lugar em /dev/sda3), mas não nosso drive /boot, precisamos criar uma partição separada para /boot. Vamos ter uma partição EFI e uma partição de boot. Existem maneiras mais avançadas de fazer isso, mas mantive-me próximo da configuração esperada do Proxmox para minimizar problemas futuros.

Se notar que a sua instalação original possui mais partições (por exemplo, raiz e dados de VM separados e sem uso de LVM), pode ser necessário ajustar os próximos passos. Tente replicar o que está lá o mais próximo possível e adicione apenas uma partição separada para /boot conforme descrito abaixo.

Vamos realizar isso num novo disco /dev/sdX (substitua sempre pelo nome correto). Se estiver redimensionando um disco com dados existentes, encolha a partição primeiro. Isso está fora do escopo deste guia, mas consulte as instruções se precisar fazer isso.

Prefiro usar cfdisk, então abra o seu novo disco com cfdisk /dev/sdX e crie a seguinte configuração (certifique-se de definir o tipo de disco para gpt!):

Bash
Device           Start        End    Sectors   Size Type
/dev/sdX1           34       2047       2014  1007K BIOS boot
/dev/sdX2         2048    1050623    1048576   512M EFI System
/dev/sdX3      1050624    2074624    1024001   500M Sistema de ficheiros Linux
/dev/sdX4      2074625 1953523711 1951449087 930.5G Sistema de ficheiros Linux

Nota: Quando fiz isso, a primeira partição começava no setor 2048. Se ocorrer o mesmo, pode ignorar o que está marcado como /dev/sdX1 acima e começar diretamente com o EFI System.

Embora o Linux não se importe muito com os tipos de partição definidos acima, é crucial que a partição EFI seja definida como EFI System (C12A7328-F81F-11D2-BA4B-00A0C93EC93B) para que o carregador de inicialização UEFI possa encontrá-lo.

Se tudo parecer correto, selecione “Write”, digite “yes” e depois saia. Verifique se está tudo bem com fdisk -l /dev/sdX. Os pontos mais importantes são:

  • Há 2048 setores livres no início para o carregador de inicialização.
  • Há uma partição EFI com o tipo correto. 512M é uma dimensão generosa; a minha usa atualmente cerca de 500K (menos de 1%). Apenas segui o que o Proxmox fez; pode reduzir ainda mais.
  • Há uma partição de boot separada. Sugiro pelo menos 500M; a minha atualmente usa 103M, então qualquer valor menor pode ficar apertado.

Se o layout de partição estiver diferente do mostrado acima, ajuste os próximos passos conforme necessário. Sempre verifique duas vezes.

Agora, vamos preparar as duas partições não criptografadas. Primeiro, o EFI deve ser formatado como FAT, por exemplo, FAT32 através de:

Bash
mkfs.fat -F 32 /dev/sdX2

Se este comando falhar porque mkfs.fat não está instalado, pode ter esquecido de instalar o dosfstools.

Em seguida, criaremos a partição /boot:

Bash
mkfs.ext4 /dev/sdX3

Estamos prontos para configurar nossa partição raiz criptografada. (Continuação)

Deixe um comentário