Configuration d'un accès SSH à l'init du système pour pouvoir déchiffrer les partitions à distance

Installation de dropbear

sudo apt install dropbear

Ajout au fichier config de dropbear:

sudo nano /etc/dropbear-initramfs/config 
DROPBEAR_OPTIONS="-j -k -p <PORT_A_CHOISIR> -s -c cryptroot-unlock"

<PORT_A_CHOISIR> est à remplacer par numéro de port ssh DIFFÉRENT du port ssh défini pour se connecter ensuite au système

Créer une clé SSH SUR VOTRE ORDI PERSO :

ssh-keygen -t ed25519 -C "your_email@example.com"

METTRE UNE PASSPHRASE ROBUSTE

Envoi de la clé sur le serveur :

ssh-copy-id -i /home/<USER>/.ssh/id_ed25519.pub {-p <PORT_PERSONNALISE>} <USER_SUR_SERVEUR>@<IP> 

Copie de la clé SSH de l'utilisateur vers dropbear :

sudo cp /home/<USER>/.ssh/authorized_keys /etc/dropbear-initramfs/

Ajouter “wireguard” dans /etc/initramfs-tools/modules :

 sudo nano /etc/initramfs-tools/modules 
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax:  module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
wireguard

Créer les fichiers suivants :

 sudo nano /etc/initramfs-tools/scripts/init-bottom/wg-down 
#!/bin/sh

# /etc/initramfs-tools/scripts/init-bottom/wg-down

PREREQ=""
prereqs()
{
	echo "$PREREQ"
}

case $1 in
prereqs)
	prereqs
	exit 0
	;;
esac

ip link delete wg0
 sudo nano /etc/initramfs-tools/scripts/init-premount/wg-up 
#!/bin/sh

# /etc/initramfs-tools/scripts/init-premount/wg-up

PREREQ="udev"

prereqs() {
	echo "$PREREQ"
}

case "$1" in
    prereqs)
	prereqs
	exit 0
        ;;
esac

. /scripts/functions

log_begin_msg "Configuring wg"

setup_wg() {
	configure_networking

	CONFIG="/etc/wireguard/wg0.conf"

	echo "Create interface"
	ip link add dev wg0 type wireguard

	echo "Stripping config"
        grep -v "^\s*#\?\s*Address\s*=.*" $CONFIG > $CONFIG.strip

	echo "Configure interface"
	wg setconf wg0 $CONFIG.strip

	echo "Upping interface"
	ip link set dev wg0 up

	for I in $(grep "^.*#\?\s*Address\s*=\s*..*" $CONFIG | cut -d "=" -f2 | tr -d ',')
	do
		echo "Add address $I to interface wg0"
		ip address add $I dev wg0
	done

	host="$(wg show wg0 endpoints | sed -n 's/.*\t\(.*\):.*/\1/p')"
	ip route add $(ip route get $host | sed '/ via [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/{s/^\(.* via [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/}' | head -n 1) 2>/dev/null || true
	ip route add 0/1 dev wg0
	ip route add 128/1 dev wg0
}

setup_wg

sleep 10 && ping -c 1 1.1.1.1
 sudo nano /etc/initramfs-tools/hooks/wg 
#!/bin/bash
# /etc/initramfs-tools/hooks/wg

set -e
PREREQ=""
prereqs()
{
    echo "${PREREQ}"
}
case "${1}" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /usr/bin/wg
copy_file config /etc/initramfs-tools/wg0.conf /etc/wireguard/wg0.conf
 sudo nano /etc/initramfs-tools/wg0.conf 
# /etc/initramfs-tools/wg0.conf&
[Interface]
#Address = 80.67.xxx.xxx/32
PrivateKey = …

[Peer]
PublicKey = …
AllowedIPs = 0.0.0.0/0
Endpoint = 80.67.xxx.xxx:xxxxx
PersistentKeepalive = 25

Rendre les fichiers exécutables :

 
sudo chmod +x /etc/initramfs-tools/scripts/init-bottom/wg-down
sudo chmod +x /etc/initramfs-tools/scripts/init-premount/wg-up 
sudo chmod +x /etc/initramfs-tools/hooks/wg

Recharger initramfs et grub :

sudo update-initramfs -u -v
sudo update-grub

Pour se connecter après redémarrage :

 ssh -i <FICHIER id_ed25519> -p <PORT_CHOISI> root@<IP_VPN>