Esta es la Part 1 de la serie AD DFIR Lab. Partimos de un servidor dedicado Hetzner recién contratado y terminamos con Proxmox VE instalado y listo para crear máquinas virtuales.

El servidor

Para este laboratorio usamos un Hetzner AX41-NVMe del Server Auction (servidores de segunda mano):

Componente Especificación
CPU AMD Ryzen 5 3600 (6 cores, 12 threads)
RAM 64 GB DDR4 (Non-ECC)
Disco 2x 512 GB NVMe
Red 1 Gbps, 20 TB/mes incluidos
Ubicación Helsinki, Finlandia
Coste 38.40 EUR/mes (IVA incluido)

64 GB de RAM son suficientes para correr las 9 VMs del laboratorio (35 GB asignados a VMs + 4 GB para Proxmox/ZFS), y los dos NVMe nos permiten configurar RAID1 para redundancia.

Paso 1: Rescue System

Cuando Hetzner te entrega el servidor, lo primero es arrancar en el Rescue System — un Linux minimal que se carga en RAM y te permite instalar el sistema operativo en los discos.

Desde el panel de Hetzner Robot:

  1. Rescue → Activar Linux 64-bit → Anotar la contraseña root
  2. Reset → Hardware Reset

En 2-3 minutos el servidor arranca en rescue y puedes conectar por SSH:

ssh root@95.217.226.229

Lo primero que vemos al conectar:

CPU1: AMD Ryzen 5 3600 6-Core Processor (Cores 12)
Memory:  64244 MB (Non-ECC)
Disk /dev/nvme0n1: 512 GB (=> 476 GiB)
Disk /dev/nvme1n1: 512 GB (=> 476 GiB)

Dos discos NVMe vírgenes, sin tabla de particiones.

Paso 2: Instalar Debian con installimage

Hetzner proporciona installimage, una herramienta propia que instala el sistema operativo de forma desatendida. Nuestro script 01-install-proxmox.sh automatiza todo el proceso.

Detección de discos

Lo primero es detectar los discos NVMe correctamente. En el rescue system hay un loop device que puede confundir la detección:

DISKS=($(lsblk -dnpo NAME,TYPE | grep disk | grep -E "nvme|sd" | cut -d" " -f1 | head -2))
# Resultado: /dev/nvme0n1 /dev/nvme1n1

Configuración de installimage

Generamos la configuración para installimage:

DRIVE1 /dev/nvme0n1
DRIVE2 /dev/nvme1n1
SWRAID 1
SWRAIDLEVEL 1
BOOTLOADER grub
HOSTNAME proxmox-lab
PART /boot ext3 1024M
PART lvm vg0 all

LV vg0 root / ext4 50G
LV vg0 swap swap swap 8G

IMAGE /root/.oldroot/nfs/images/Debian-1213-bookworm-amd64-base.tar.gz

Puntos clave:

  • RAID1 por software entre los dos NVMe — si falla un disco, no pierdes el lab
  • LVM con un volumen de 50 GB para root y 8 GB de swap
  • El resto del espacio en vg0 queda libre para ZFS (lo usaremos después)
  • Debian 12 Bookworm como base — es lo que Proxmox 8 requiere
/root/.oldroot/nfs/install/installimage -a -c /tmp/installimage-config

La instalación tarda unos 70 segundos. Después, reboot.

Paso 3: Instalar Proxmox VE

Tras reiniciar, estamos en Debian 12 limpio. El script 02-configure-proxmox.sh instala Proxmox y configura todo lo necesario.

Repositorio y paquetes

# Añadir repo de Proxmox (community, sin suscripción)
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" \
    > /etc/apt/sources.list.d/pve.list

# Instalar Proxmox VE
apt-get install -y proxmox-ve postfix open-iscsi chrony

La instalación de Proxmox tarda unos 3 minutos e incluye el kernel propio de Proxmox (6.8.12-20-pve), la interfaz web, y todas las herramientas de virtualización.

Bridge VLAN-aware

Para que las VMs tengan red, necesitamos un bridge. Proxmox usa vmbr0 como bridge principal. Lo configuramos como VLAN-aware para poder asignar VLANs diferentes a cada VM:

auto vmbr0
iface vmbr0 inet static
    address 95.217.226.229/26
    gateway 95.217.226.193
    bridge-ports enp35s0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

Con bridge-vlan-aware yes, cada VM puede tener su propio tag VLAN. Las VMs del dominio irán en VLAN 10, y Kali en VLAN 20.

ZFS para almacenamiento de VMs

ZFS nos da snapshots instantáneos, compresión, y la capacidad de revertir todo el laboratorio a un estado limpio en segundos. Usamos el espacio libre de LVM:

# Crear volumen lógico con el 90% del espacio libre
lvcreate -l 90%FREE -n zfsdata vg0

# Crear pool ZFS con compresión
zpool create -f vmstore /dev/vg0/zfsdata
zfs set compression=lz4 vmstore

# Crear datasets
zfs create -p vmstore/images
zfs create -p vmstore/templates

Después registramos el pool en Proxmox:

pvesm add zfspool local-zfs -pool vmstore/images -content images,rootdir

Herramientas adicionales

apt-get install -y vim htop tmux wget curl git unzip \
    wireguard-tools qemu-guest-agent libguestfs-tools \
    python3 python3-pip python3-venv jq

Tras un reboot final al kernel de Proxmox, tenemos:

pve-manager/8.4.18 (running kernel: 6.8.12-20-pve)

Storage:
  local        dir       51 GB (ISOs, snippets)
  local-zfs    zfspool  364 GB (VM disks)

Paso 4: Descargar las ISOs

El script 03-download-isos.sh descarga todas las ISOs necesarias. Las de Linux se descargan directamente, y para las de Windows descubrimos que existen URLs directas del CDN de Microsoft que funcionan con wget:

ISO Tamaño Descarga
Windows Server 2019 Eval 5.0 GB CDN directo de Microsoft
Windows Server 2016 Eval 6.5 GB CDN directo de Microsoft
Windows 10 Enterprise Eval 4.5 GB CDN directo de Microsoft
Kali Linux 2026.1 4.5 GB cdimage.kali.org
Ubuntu 22.04 Server 2.0 GB releases.ubuntu.com
pfSense CE 835 MB atxfiles.netgate.com
VirtIO drivers 754 MB fedorapeople.org
# Las ISOs de Windows se descargan con user-agent de navegador
wget --user-agent="Mozilla/5.0" -O windows-server-2019.iso \
    "https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso"

Total: 24 GB de ISOs, descargadas en unos 10 minutos gracias al ancho de banda de Hetzner.

Scripts resumibles

Un detalle importante de la automatización: todos los scripts usan un sistema de checkpoints (lib-state.sh) que permite:

  • Reanudar desde el último paso completado si algo falla
  • Saltarse pasos ya completados al re-ejecutar
  • Inspeccionar el estado de cada fase
$ bash 02-configure-proxmox.sh

=== 02-configure-proxmox ===

  [SKIP] Setting hostname to proxmox-lab (already done)
  [SKIP] Adding Proxmox VE repository (already done)
  [SKIP] Installing Proxmox VE (already done)
  [10]   Creating ZFS pool for VM storage...
  [OK]   Creating ZFS pool for VM storage (0s)
  ...

Si la conexión SSH se cae o hay un error temporal, simplemente vuelves a ejecutar el script y continúa donde lo dejó.

Resultado

Al final de esta fase tenemos:

  • Proxmox VE 8.4 corriendo en Debian 12
  • ZFS con 364 GB disponibles para VMs (compresión lz4)
  • Bridge vmbr0 VLAN-aware, listo para segregar redes
  • 7 ISOs descargadas y listas para crear VMs
  • Interfaz web accesible en https://IP:8006
  • Todo automatizado y documentado en 3 scripts resumibles

Tiempo total: unos 20 minutos desde el servidor en blanco.


Siguiente: Part 2 — The Seven Kingdoms: Deploying Windows VMs with Unattended Install

Anterior: Introducción — The Iron Throne of DFIR