Desencriptar LUKS durante el inicio remotamente con Dropbear (ssh)

Como configurar `dropbear` (ssh) para desbloquear nuestro equipo cifrado con LUKS de manera remota.

Wallpaper de pureOS

Wallpaper de pureOS

Introducción: LUKS, Initramfs, cryptsetup y dropbear

LUKS es el software que solemos utilizar en los procesos de instalación de Linux para cifrar nuestros Discos. Si bien sirve para cifrar cualquier tipo de contenido, por lo general, al momento de instalar una distro podemos usar la opción de cifrar completamente el disco que suele utilizar LUKS sobre un LVM. El proceso que desencriptar nuestra partición, no es un servicio de systemd (este corre luego de desencriptar la partición), sino que es parte de initramfs y se llamacryptsetup. De esta manera al momento de iniciar nuestro equipo, para montar las particiones cifradas, cryptsetup nos pide escribir (presencialmente) la contraseña correspondiente (la configuración se encuentra en /etc/crypttab).

El problema de esto esta en la misma explicación, si nuestro equipo se reinicia, y queremos acceder remotamente, tenemos que estar físicamente en frente al equipo, ya que como en el proceso de inicio, sobre initramfs aun no tenemos procesos como openssh para acceder remotamente.

Ahi entra el trabajo de Dropbear, un cliente ssh pequeño que cuenta con el paquete dropbear-initramfs, el cual puede ejecutarse durante el proceso de inicio y permitirnos acceder remotamente a esa etapa para que podamos desencriptar nuestro equipo remotamente con el comando cryptroot-unlock.

Nota: Este tutorial esta hecho sobre Debian 13 pero debería ser util para cualquier otra distro moderna.

1. Instalación y configuración de dropbear

instalamos:

sudo apt update
sudo apt install dropbear-initramfs

modificamos la configuración desde el archivo /etc/dropbear/initramfs/dropbear.conf:

DROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -s -c cryptroot-unlock"
  • -I 180: Establece un timeout de 180 para cerrar la conexión automáticamente en caso de inactividad
  • -j y -k: Desactivan el port-forwarding
  • -p 2222: Puerto ssh (recomiendo cambiarlo para no tener conflicto de ssh fingerprints con la ip de nuestra maquina)
  • -s: Desactiva el login por user/password (vamos a usar una llave ssh 😉)
  • -c cryptroot-unlock (opcional): ejecutamos el comando cryptroot-unlock directamente al hacer login ssh para desbloquear el equipo.

Nota: man de dropbearhttps

2. Creamos llave ssh para dropbear

Nota: Recomiendo hacer una llave ssh separa y exclusiva para este proceso.

ssh-keygen -t rsa -f ~/.ssh/<hostname>_dropbear

(<hostname> es un ejemplo, puede ser cualquier nombre.)

Esto nos genera la llave privada ~/.ssh/<hostname>_dropbear (nunca hay que pasársela a nadie, es la que permite el acceso) y la publica ~/.ssh/host_dropbear.pub (la que autoriza el acceso de la privada).

Copiamos esta llave publica a la configuración de dropbear:

cat ~/.ssh/host08_dropbear.pub | sudo tee -a /etc/dropbear/initramfs/authorized_keys

Nota: Lo ideal, si podemos, es agregar una llave ssh por equipo desde el cual vamos a acceder.

Nota: Luego de esto deberíamos ejecutar sudo update-initramfs -u pero aprovechamos y lo hacemos en el paso siguiente que tenemos que seguir modificando el initramfs.

3. Configuración de Initramfs

Necesitamos primero establecer una ip fija para nuestro equipo al momento de ejecutar el initramfs agregando la siguiente linea al archivo: /etc/initramfs-tools/initramfs.conf:

IP=<ip_red_local>::<ip_gateway>:<netmask>:<hostname>

Ejemplo: IP=192.168.10.48::192.168.10.254:255.255.255.0:pc-escritorio

  • IP=<ip_red_local>: IP estática.
  • ::: separador
  • IP=<ip_red_local>: IP de nuestro gateway (router)
  • <netmask>: subnet en formato netmask (xxx.xxx.xxx.xxx)
  • 255.255.255.0 – Netmask
  • hostname: Hostname del equipo (recomiendo usar uno distinto para distinguirlo en un futuro)

como siempre que se modifican configuraciones del initramfs es necesario actualizar su imagen para que sea cargada por el sistema en el proximo inicio:

sudo update-initramfs -u -v

Contarse a dropbear (ssh).

Listo! ahora cuando nuestro equipo inicie y este esperando que ingresemos la password para descifrar nuestra partición, vamos a poder conectarnos por ssh y hacerlo remotamente con el siguiente comando de conexión ssh:

ssh -i ~/.ssh/j/<hostname>_dropbear -p2222 -o "HostKeyAlgorithms rsa-sha2-256" root@<ip>

Nota: En este comando de conexión usamos la llave privada.