Etape 1b – Installation Proxmox sur disque crypté (en datacenter)

Etape 1b – Installation Proxmox sur disque crypté (en datacenter)

Vous êtes ici :

Article 3/11 de la série suivante :

1. Introduction

Dans le cas où vous avez un serveur distant (chez online ou OVH par exemple) (si possible avec un raid hardware), je vous recommande de faire une installation sur un disque crypté avec LUKS & LVM.

Si vous n’avez pas de raid vous pouvez utiliser un raid logiciel, il faudra juste un peu adapté la création des partitions plus bas.

Pour un serveur maison, l’intérêt de l’usage de VM peut se poser. En ligne, je pense que c’est évident : il est bon de cloisonner chaque serveur (mail / web / nextcloud…) pour des raisons de modularité et de sécurité.

Pour cela j’ai choisi d’utiliser Proxmox, qui est une solution basée sur une Debian et qui est open-source.

Ici je n’ai volontairement pas utilisé le bios EFI car sur les serveurs online que je loue cela sous-entends de modifier le bios pour l’activé. Ce qui n’est pas permis dans les CGV

2. Lancer l’installation depuis la rescue

Il est tout à fait possible d’installer depuis l’iso par le biais d’une session KVM mais bon c’est un peu se prendre la tête pour rien. Le mieux est d’utiliser le mode rescue (prenez une debian la plus recente possible sinon une ubuntu)

3. Préparation de l’environnement d’installation

  • On se logue en SSH (cf le site d’online/ovh pour les infos), puis une fois logué on se met en root :
sudo su -
  • On installe les logiciels dont on va avoir besoin :
apt install cryptsetup lvm2 debian-archive-keyring debootstrap
  • Dans les lignes qui suivent il faut remplacer scsi-SATA_disk par le disque adapté (faire un ls -l /dev/disk/by-id/) pour identifier le disque.

3.1 En RAID Hardware (1 seul disque visible)

  • Si le disque était déjà utilisé, on efface la table des partitions :
sgdisk --zap-all /dev/disk/by-id/scsi-SATA_disk
  • Puis on partitionne :
sgdisk -n1:0:+32M -t1:EF02 -c1:"boot_bios" -n2:0:+512M -t2:8300 -c2:"linux_boot" -n3:0:0 -t3:8300 -c3:"linux_crypt" -p /dev/disk/by-id/scsi-SATA_disk
Explications des paramètres :
-n1:0:+32M : nouvelle partition « boot_bios » (1) de 32
-t1:EF02 : Le type de la partition 1 est BIOS boot
-n2:0:+512M : nouvelle partition « linux_boot » (2) de 500M
-t2:8300 : Le type de la partition 2 est Linux
-n3:0:0 : nouvelle partition « linux_crypt » (3) de la taille restante du disque
-t3:8300 : Le type de la partition 3 est Linux également
-p : Afficher
Parfois il est nécessaire d’effacer les partitions et de redémarrer pour que la nouvelle table de partition soit prise en compte par le kernel.

3.2 En RAID Logiciel

  • Si votre serveur ne gère par le RAID hardware, vous pouvez utiliser le RAID logiciel, en initialisant les 2 disques :
sgdisk --zap-all /dev/disk/by-id/scsi-SATA_disk1
sgdisk --zap-all /dev/disk/by-id/scsi-SATA_disk2
  • Puis on partitionne CHAQUE disque :
sgdisk -n1:0:+32M -t1:EF02 -c1:"boot_bios_1" -n2:0:+512M -t2:fd00 -c2:"linux_boot_1" -n3:0:0 -t3:fd00 -c3:"linux_crypt_1" -p /dev/disk/by-id/scsi-SATA_disk1
sgdisk -n1:0:+32M -t1:EF02 -c1:"boot_bios_2" -n2:0:+512M -t2:fd00 -c2:"linux_boot_2" -n3:0:0 -t3:fd00 -c3:"linux_crypt_2" -p /dev/disk/by-id/scsi-SATA_disk2
Explications des paramètres :
-n1:0:+32M : nouvelle partition « boot_bios » (1) de 32
-t1:EF02 : Le type de la partition 1 est BIOS boot
-n2:0:+512M : nouvelle partition « linux_boot » (2) de 500M
-t2:fd00 : Le type de la partition 2 est RAID LINUX
-n3:0:0 : nouvelle partition « linux_crypt » (3) de la taille restante du disque
-t3:fd00 : Le type de la partition 3 est RAID LINUX également
-p : Afficher

Puis en utilisant MDRAID :

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/disk/by-id/scsi-SATA_disk1-part2 /dev/disk/by-id/scsi-SATA_disk2-part2
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/disk/by-id/scsi-SATA_disk1-part3 /dev/disk/by-id/scsi-SATA_disk2-part3

3.3 Poursuite de l’installation

Si vous êtes en RAID logiciel, il faut remplacer dans les lignes qui suivent scsi-SATA_disk-part2 par /dev/md0 et scsi-SATA_disk-part3 par /dev/md1.
  • Et on formate :
mkfs.ext4 -L boot /dev/disk/by-id/scsi-SATA_disk-part2
cryptsetup -v -s 256 -c aes-xts-plain64 -h sha256 luksFormat /dev/disk/by-id/scsi-SATA_disk-part3

– Pour le mot de passe, il vaut mieux faire long que compliqué (cf l’article sur le choix du mot de passe)
– Vous pouvez déterminer les réglages du cryptage de partition par un benchmark :

cryptsetup benchmark
Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      1497965 iterations per second for 256-bit key
PBKDF2-sha256    1672370 iterations per second for 256-bit key
PBKDF2-sha512    1310720 iterations per second for 256-bit key
PBKDF2-ripemd160 1092266 iterations per second for 256-bit key
PBKDF2-whirlpool  769879 iterations per second for 256-bit key
argon2i       6 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      6 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm | Key |  Encryption |  Decryption
        aes-cbc   128b   704,5 MiB/s  2932,7 MiB/s
    serpent-cbc   128b    90,6 MiB/s   599,2 MiB/s
    twofish-cbc   128b   186,5 MiB/s   376,0 MiB/s
        aes-cbc   256b   525,4 MiB/s  2280,9 MiB/s
    serpent-cbc   256b    92,1 MiB/s   599,2 MiB/s
    twofish-cbc   256b   189,7 MiB/s   375,8 MiB/s
        aes-xts   256b  1933,2 MiB/s  1945,1 MiB/s
    serpent-xts   256b   594,5 MiB/s   577,8 MiB/s
    twofish-xts   256b   370,4 MiB/s   371,8 MiB/s
        aes-xts   512b  1328,4 MiB/s  1573,9 MiB/s
    serpent-xts   512b   596,7 MiB/s   577,8 MiB/s
    twofish-xts   512b   371,1 MiB/s   371,5 MiB/s

Notez quelque part l’UUID de la partition cryptée :

cryptsetup luksDump /dev/disk/by-id/scsi-SATA_disk-part3 | grep UUID
UUID:          	88a7ccfc-e3fe-40e5-b50d-5c6b449d9274

  • On ouvre la partition cryptée (on vous demander d’entrer votre passphrase) :
cryptsetup luksOpen /dev/disk/by-id/scsi-SATA_disk-part3 part_crypt
Enter passphrase for /dev/disk/by-id/dev/disk/by-id/scsi-SATA_disk-part3 :
  • On initiale la partition pour être utilisée avec LVM :
pvcreate /dev/mapper/part_crypt
  • On crée un groupe de volume LVM :
vgcreate vgcrypt /dev/mapper/part_crypt
  • On créé les partitions (dans le groupe de volume LVM) :
lvcreate -L 100g -n root vgcrypt
lvcreate -L 8g -n swap vgcrypt
lvcreate -l100%FREE -n proxdata vgcrypt
  • On formate ces partitions (dans le groupe de volume LVM) :
mkfs.ext4 -L root /dev/mapper/vgcrypt-root 
mkfs.ext4 -L proxdata /dev/mapper/vgcrypt-proxdata
mkswap -L swap /dev/mapper/vgcrypt-swap 

4. Installation du système de base

  • On prépare le repertoire où l’on va chrooter :
mkdir /newdebian
mount /dev/mapper/vgcrypt-root /newdebian
mkdir -p /newdebian/boot /newdebian/proxdata /newdebian/var/tmp
mount /dev/disk/by-id/scsi-SATA_disk1-part2 /newdebian/boot
mount /dev/mapper/vgcrypt-proxdata /newdebian/proxdata
chmod 1777 /newdebian/var/tmp/
  • On installe une debian de base dans ce répertoire (la commande peut mettre plusieurs minutes à s’exécuter):
debootstrap --arch amd64 stretch /newdebian http://ftp.fr.debian.org/debian
...
I: Configuring tasksel-data...
I: Configuring libc-bin...
I: Configuring systemd...
I: Base system installed successfully.

5. Configuration du système de base

5.1 Nom de la machine

echo MonServeur > /newdebian/etc/hostname

5.2 Interface réseau

  • On recherche le nom de l’interface réseau (ici pour l’exemple eno1):
ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:1a:1b:1c:1d:1e brd ff:ff:ff:ff:ff:ff
    inet 123.123.123.123/24 brd 123.123.123.255 scope global dynamic eno1
       valid_lft 1569sec preferred_lft 1569sec
    inet6 fe80::abcd/64 scope link 
       valid_lft forever preferred_lft forever
  • On crée les fichiers de configuration réseau (utilisé la commande nano), à adapter selon votre environnement réseau :
auto eno1
iface eno1 inet dhcp

5.3 Chrooter dans le nouveau système

mount --rbind /dev  /newdebian/dev
mount --rbind /proc /newdebian/proc
mount --rbind /sys  /newdebian/sys
chroot /newdebian /bin/bash --login
  • On crée le fichier mtab (alter-ego de fstab mais des disques montés) :
ln -s /proc/self/mounts /etc/mtab

5.4 Apt

  • On modifie les sources :
# Depot officiel
deb http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch main contrib non-free

# Debian Stretch - Security
deb http://security.debian.org/ stretch/updates main contrib non-free
#deb-src http://security.debian.org/ stretch/updates main contrib non-free

# Debian Stable Update
deb http://ftp.fr.debian.org/debian/ stretch-updates main
#deb-src http://ftp.fr.debian.org/debian/ stretch-updates main
  • On actualise les sources et on met à jour :
apt update
apt upgrade
  • On installe aptitude (optionnel mais bien pratique) :
apt install --yes aptitude

5.5 Locales

  • On installe Locales :
apt install --yes locales
dpkg-reconfigure locales
  • On sélectionne en_US.UTF-8 & fr_FR.UTF-8 avec fr_FR.UTF-8 par défaut :

5.6 Tzdata

  • On lance la reconfiguration du paquet :
dpkg-reconfigure tzdata
  • Puis on sélectionne Europe, puis Paris :

apt install screen
screen
Il suffit de faire un screen -r depuis une nouvelle session SSH en cas de deconnexion pour revenir au même endroit !

5.7 SSH

  • On installe le serveur SSH :
apt install --yes openssh-server
  • Temporairement on autorise le root à s’authentifier (nous modifierons la configuration SSH dans l’étape suivante) :
sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config

5.8 Configurations des partitions

  • On met à jour le fichier /etc/fstab avec les partitions créées précédemment :
  • Si vous êtes en RAID hardware :
echo PARTUUID=$(blkid -s PARTUUID -o value /dev/disk/by-id/scsi-SATA_disk-part2) /boot ext4 defaults 0 1 > /etc/fstab
  • Si vous êtes en RAID logiciel :
echo UUID=$(blkid -s UUID -o value /dev/md0) /boot ext4 defaults 0 1 > /etc/fstab
  • Puis :
echo UUID=$(blkid -s UUID -o value /dev/mapper/vgcrypt-root) / ext4 defaults 0 1 >> /etc/fstab
echo UUID=$(blkid -s UUID -o value /dev/mapper/vgcrypt-proxdata) /proxdata ext4 defaults 0 2 >> /etc/fstab
echo UUID=$(blkid -s UUID -o value /dev/mapper/vgcrypt-swap) none swap defaults 0 0 >> /etc/fstab
  • Petite particularité de Luks, on créé le fichier /etc/crypttab (en remplaçant 88a7ccfc-e3fe-40e5-b50d-5c6b449d9274 par l’UUID noté plus haut) :
echo part_crypt UUID=88a7ccfc-e3fe-40e5-b50d-5c6b449d9274 none luks,retry=1,lvm=vgcrypt > /etc/crypttab

5.9 Installation des logiciels nécessaires au boot

  • Si vous êtes en RAID logiciel :
apt install --yes --no-install-recommends mdadm
  • Dans tous les cas :
apt install --yes linux-image-amd64 cryptsetup lvm2 dropbear-initramfs grub-pc
Vous pouvez avoir des erreurs notamment pour dropbear, veuillez ne pas en tenir compte
  • Si vous avez des erreurs du type W: Possible missing firmware [...] for module bnx2 :
apt install --yes firmware-bnx2
  • Si vous aviez aussi des erreurs du type W: Possible missing firmware [...] for module tg3 :
apt install --yes firmware-linux-nonfree

5.10 Paramétrage du boot (et mise en place d’un unlock en SSH

On va installer Dropbear, qui est un client léger SSH qui va permettre d’ouvrir une session SSH alors que votre serveur est bloqué au démarrage dans l’attente de la passphrase de luks (et ainsi permettre d’entrer cette clé à distance).

  • Tout d’abord, on créé le fichier /etc/initramfs-tools/conf.d/cryptroot (en remplaçant également 88a7ccfc-e3fe-40e5-b50d-5c6b449d9274 par l’UUID noté plus haut) :
echo target=part_crypt,source=UUID=88a7ccfc-e3fe-40e5-b50d-5c6b449d9274,lvm=vgcrypt > /etc/initramfs-tools/conf.d/cryptroot
  • On édite le fichier le fichier /etc/dropbear-initramfs/config pour ouvrir le client sur le port 2244 :
#
# Configuration options for the dropbear-initramfs boot scripts.

#
# Command line options to pass to dropbear(8)
#
DROPBEAR_OPTIONS="-p 2244"

#
# On local (non-NFS) mounts, interfaces matching this pattern are
# brought down before exiting the ramdisk to avoid dirty network
# configuration in the normal kernel.
# The special value 'none' keeps all interfaces up and preserves routing
# tables and addresses.
#
#IFDOWN=*
  • Sur votre ordinateur, il faut générer une clé publique. Sur Mac OS il suffit de taper :
>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): ENTRÉE
Enter passphrase (empty for no passphrase): ENTRÉE
Enter same passphrase again: ENTRÉE
Your identification has been saved in ~/.ssh/id_rsa.
Your public key has been saved in ~/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:inhsPRNYmHlK+uciJXlV7UpNQFelvGqYq/Px+k8JT5s moi@monmac.local
The key's randomart image is:
+---[RSA 2048]----+
|       .oo.....  |
|     +  ..o. .   |
|    = o. +  o    |
|   o =. . o  .   |
|  ..o...S.. o    |
|  o+oo o.o = +   |
|  .+* * + o E    |
|  .o.o.o = .     |
|   . .o++oo..    |
+----[SHA256]-----+
  • Copier coller le contenu du fichier ~/.ssh/id_rsa.pub vers le nouveau fichier /etc/dropbear-initramfs/authorized_keys sur le serveur :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6178cqH3MCUIoeXXlIoKx4rjFcjYDCt2RwsMsrRzFErLtOn5TBILqJCl3Y+efPtamxPtTU1JiWE6IogzVGem1s49gRFP+bAlwWi5bPjHqc+J2gXPzjrkUdv0HvtxKo6187FSnT03e7BVIeysA5XyJ1CVxNISiBDzziRYbpUArcthZnHbDffdYUNCN1DVORD2Tk9daEOvceyyezENqyEkBJ0IBxNzZQ8ym6Wof2Ss0Hq3jBuCXPE26zS1bgBGae1ND6lJiwGG/A3ejh+1T2LrYusQG6ouf4g1xNBbdSEXkiZGF6unisy1RK6Rf0K3mpiZAiOPD5x0PUq+hvEr+lE65 moi@monmac.local
  • On regénère l’initramfs :
update-initramfs -u
  • On configure GRUB en éditant le fichier /etc/default/grub :
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="ip=:::::eno1:dhcp"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
  • On prends en compte les modifications :
update-grub2
Si vous avez des avertissements WARNING: Failed to connect to lvmetad. Falling back to device scanning. c’est tout à fait normal, il ne faut pas en tenir compte.

6. Mot de passe root

  • Ne pas oublier cette étape sinon vous allez vous retrouver dehors :
passwd

7. Premier redémarrage

  • Si screen lancé :
exit
  • Puis, on quitte tout :
exit
umount /newdebian/*
umount -l /newdebian
swapoff -a
lvchange -an /dev/mapper/vgcrypt-*
cryptsetup luksClose part_crypt
reboot -f
  • N’oubliez pas de quitter le mode secours d’online (ou autre)
  • Après un certain temps ou un temps certain en fonction du processus de démarrage du serveur, ouvrez la session SSH suivante :
ssh -p 2244 root@IP.DU.SERVEUR
To unlock root partition, and maybe others like swap, run `cryptroot-unlock`	 
BusyBox v1.22.1 (Debian 1:1.22.0-19+b3) built-in shell (ash)	 	 
Enter 'help' for a list of built-in commands.	 	 
~ # cryptroot-unlock 	 	 
Please unlock disk part_crypt:	 	 
cryptsetup: part_crypt set up successfully	 	 
~ #
Connection to monseveur.mondomaine.com closed.
  • La session précédent se ferme tout seul, attendez une minute et relancez une nouvelle session :
ssh root@IP.DU.SERVEUR

8. Paquets utiles

Voici quelques paquets bien pratique :

  • apt-transport-https :
apt install --yes apt-transport-https

Permet de se connecter en HTTPS aux miroirs APT.

  • ntp :
apt install --yes ntp
  • man :
apt install --yes man-db
  • command-not-found :
apt install --yes command-not-found
apt update
update-command-not-found
  • bash-completion :
apt install --yes bash-completion
  • Emacs :
apt install --yes emacs25-nox

Paramètres d’Emacs (à copier-coller directement dans un terminal) :

echo ";;Pour empecher de faire des backups ~
(setq make-backup-files nil)

;; utf-8 grace a LOCALES
;;(set-selection-coding-system locale-coding-system)
;;(set-keyboard-coding-system locale-coding-system)
;;(set-terminal-coding-system locale-coding-system)

;; forcer utf-8
(setq locale-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

;; Pb de copier-coller avec accent
(setq selection-coding-system 'compound-text-with-extensions)" > ~/.emacs.el

9. Personnalisation du root

  • Bash (à copier-coller directement dans un terminal) :
echo "# If not running interactively, don't do anything
[ -z \"\$PS1\" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval \"\$(SHELL=/bin/sh lesspipe)\"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z \"\$debian_chroot\" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=\$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we \"want\" color)
case \"\$TERM\" in
    xterm-color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n \"\$force_color_prompt\" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ \"\$color_prompt\" = yes ]; then
    PS1='\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '
else
    PS1='\${debian_chroot:+(\$debian_chroot)}\u@\h:\w\\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case \"\$TERM\" in
xterm*|rxvt*)
    PS1=\"\[\e]0;\${debian_chroot:+(\$debian_chroot)}\u@\h: \w\a\]\$PS1\"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval \"\$(dircolors -b ~/.dircolors)\" || eval \"\$(dircolors -b)\"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi

PATH=\$PATH:/root/binperso
" > ~/.bashrc

Assurez vous d’avoir un ficher /root/.profile :

# if running bash                                                               
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists                                              
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists                       
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

10. Fichier /etc/ssh/sshd_config

Si vous souhaitez par la suite vous pouvez sécuriser votre installation SSH en mettant un port non standard (ça ne permettra pas d’éviter un hacking ciblé mais au moins d’avoir la paix dans les logs avec les scripts auto qui cherchent à entrer sur le port 22). Ce fichier spécifie également un utilisateur unique autorisé :

# What ports, IPs and protocols we listen for
Port 1022

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

X11Forwarding no
PrintMotd no
PrintLastLog yes

# KeepConnexion alive
TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 6

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem	sftp	/usr/lib/openssh/sftp-server

AllowUsers monuser
  • On oublie pas de créer l’utilisateur monuser :
adduser monuser

11. Installation de Promox

Vous avez désormais un debian de base prêt à recevoir la surcouche Proxmox.

  • On modifie le fichier /etc/apt/sources.list :
# Depot officiel
deb http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch main contrib non-free

# Debian Stretch - Security
deb http://security.debian.org/ stretch/updates main contrib non-free
#deb-src http://security.debian.org/ stretch/updates main contrib non-free

# Debian Stable Update
deb http://ftp.fr.debian.org/debian/ stretch-updates main
#deb-src http://ftp.fr.debian.org/debian/ stretch-updates main

# Proxmox
deb [arch=amd64] http://download.proxmox.com/debian/pve stretch pve-no-subscription
  • On met à jour le fichier /etc/hosts :
# IPv4
127.0.0.1 localhost
SERVEUR.MON.IP monserveur monserveur.mondomaine.com

# IPv6
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • On authentifie le serveur Proxmox et on met à jours les dépôts :
wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
apt update
apt upgrade

  • Désinstaller l’OS PROBER :
apt remove --purge os-prober
  • Redémarrez ! :
reboot
  • Une fois le redémarrage terminé et que vous vous êtes identifiés de nouveau, lancez l’installation
apt install --yes proxmox-ve postfix open-iscsi

ECRAN QUESTION : mettre pas de configuration.

  • Redémarrez ! (oui encore) :
reboot
  • Retirer le kernel inutile (adapter la version au cas où) :
apt remove --purge linux-image-amd64 linux-image-4.9.0-8-amd64
update-grub

12. Ajustement de la configuration de Proxmox

Je ne présente pas le fonctionnement de proxmox, il existe de nombreux tutoriels sur le sujet. Ici il s’agit juste des petites modifications à faire pour revenir une installation de base
  • Entrez dans l’interface proxmox de votre serveur : https://IP.DU.SERVEUR:8006
  • Commencez par créer une interface réseau « Linux Bridge » que vous appellerez vmbr0 et vous remplacez par les informations de l’interface principale actuellement connectée à internet (dans notre exemple eno1) :

  • Effacez le fichier /etc/network/interfaces.d/eno1
  • Allez dans le menu de gauche dans « Datacenter« , puis dans la section « Storage« 
  • Désactivez « local » et créez « proxdata« . Vous devez avoir ceci :

  • Redémarrez ! (c’est fini)
reboot

13. Sécurisation de Luks

  • Pour voir le dump :
cryptsetup luksDump /dev/disk/by-id/scsi-SATA_disk-part3
  • Enregistrez une clé secondaire :
cryptsetup luksAddKey --key-slot 1 /dev/disk/by-id/scsi-SATA_disk-part3
Enter any passphrase:
Enter new passphrase for key slot:
Verify passphrase:
  • Enregistrez les nouvelles headers :
cryptsetup luksHeaderBackup /dev/disk/by-id/scsi-SATA_disk-part3 --header-backup-file /root/monserveurheader.backup

14. En cas de besoin de maintenance

  • Connectez-vous à la connexion rescue et installez ces paquets :
apt-get install lvm2 cryptsetup
  • Déchiffrez la partition :
cryptsetup luksOpen /dev/disk/by-id/scsi-SATA_disk-part3 part-crypt

14.1 Pour modifier les données

  • Si vous souhaitez modifier les données, on monte les différentes partitions :
vgchange -aay
mkdir /monsysteme
mount /dev/mapper/vgcrypt-root /monsysteme
mount -o bind /dev /monsysteme/dev
mount -t proc proc /monsysteme/proc
mount -t sysfs sys /monsysteme/sys
  • Et on se chroot :
chroot /monsysteme mount -a

14.2 Pour formater à nouveau sans perdre les VM

  • Si vous voulez formater, vous ne formatez (si c’est votre souhait) que la partition système, sans perdre vos VM & vos backups qui sont stockés sur l’autre partition :
mkfs.ext4 -L root /dev/mapper/vgcrypt-root

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.