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 comandocryptroot-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.::
: separadorIP=<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.