# Installation d'un serveur Debian/Stretch sécurisé

Schéma de notre installation "at home"

Notre installation se compose donc d'une box, Freebox dans mon cas qui sera notre passerelle vers Internet. Free permet d'avoir une adresse IPV6 dans l'abonnement de base. IL suffit de l'activer dans la configuration de votre box.

A compléter pour d'autres FAIs et boxes.

J'ai la chance de bénéficier d'une connexion fibre, adaptée à l'installation d'un serveur à la maison. (Débit d'upload suffisant).

Notre serveur sera connecté à la box (au routeur) dans la zone DMZ. C'est une zone qui sera accessible de l'extérieur, de tout l'internet donc. C'est pourquoi nous aurons à prendre des mesures de sécurité adéquates.

Notre réseau local sera également connecté à la box, soit par câble (filaire) soit par wifi.

Shéma de mon réseau

Prérequis

  1. Un serveur

Il vous faut un serveur, accessible chez vous (je décris ici l'installation d'un "home" serveur, même si la plupart des explications seront également valables pour un serveur hébergé ou dédié.

Mon petit Serveur

Mon serveur est motorisé par un vieux microprocesseur Atom à 1,6Ghz, appuyé par 2 Go de RAM et un disque SSD de 240 Go. Il sera relié à un clavier et un écran pendant la phase d'installation.

Ce serveur est assez ancien (2007) et l'amorçage n'est pas basé sur UEFI, mais un bios standard. Je rajouterai une partie dédiée à l'amorçage UEFI dès que j'aurai un serveur/machine de bureau supportant ce mécanisme. (oui, mon matériel est ancien ....)

  1. Un nom de domaine

Un nom de domaine est indispensable si vous voulez que votre serveur soit accessible de l'extérieur. Il vous faudra choisir un nom, enregistré chez un “registrar” comme OVH, Gandi ou autre. Mon domaine réservé est yojik.net.

example.com est un nom de domaine couramment utilisé dans les tutoriels.

  1. Un nom de machine

Déterminez le nom de votre machine: le mien sera atom.

Le nom complet de ma machine serait donc: atom.yojik.net

  1. Une adresse IP fixe

Une adresse IP fixe est nécessaire même s'il est possible de travailler avec des adresses dynamiques. Des FAIs comme Free, OVH proposent des IPs fixes (IPV4) et un pool d'adresses IPV6. D'autres fournisseurs d'accès proposent ces adresses fixes / IPV6 avec un supplément d'abonnement.

  1. Un compte utilisateur

L'installateur Debian vous demandera un mot de passe pour le compte root (super-utilisteur): notez le bien. Nous le changerons ensuite, après l'installation de base. Nous utiliserons un générateur de mots de passe; il y en a pléthore.

Ensuite, il vous demandera de définir un compte utilisateur, ici, un compte d'administration. Nous ne nous connecterons qu'avec ce compte (SSH) et interdirons l'accès au compte super-utilisateur (root) par SSH.

Définissez votre nom d'administrateur ainsi que son mot de passe. Il ne sera utile que dans les premières étapes. Nous sécuriserons l'accès SSH en n'utilisant que des connexions par clef, et uniquement pour le compte administrateur. L'accès SSH pour le compte super-utilisateur sera bloqué.

Nous modifierons également les mots de passe administrateur et super-utilisateur par la suite.

Récapitulatif

Nom de la machine Domaine Adresse IPV4 Comptes Mot de passe
atom yojik.net 192.168.111.160 ericadmin ***
root ***

Préparation de l'installation

Téléchargement de l'image ISO netinstall

(ISO de taille minimale, récupération des éléments suivants sur Debian.org par le réseau)

Rendez-vous à l'adresse suivante Debian.org et choisissez l'image amd64 ou I386 ou autre suivant l'architecture de votre serveur. Mon serveur utilisera l'image i386. Il existe des images “non-officielles” comprenant les firmwares de périphériques. (partie software des périphériques). L'adresse est la suivante: Debian.org + firmwares

Copie de l'image sur une clef USB

Il vous faut déterminer le périphérique utilisé par votre clef. Insérez la dans votre ordinateur Linux et dans un terminal root, lancez la commande : dmesg. Cherchez les lignes qui correspondent à votre clef USB. Voici un extrait sur ma machine:

usb 4-7: new high-speed USB device number 2 using ehci-pci
[ 9381.149286] usb 4-7: New USB device found, idVendor=1b1c, idProduct=1ab1
[ 9381.149291] usb 4-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 9381.149293] usb 4-7: Product: Voyager
[ 9381.149295] usb 4-7: Manufacturer: Corsair
[ 9381.149298] usb 4-7: SerialNumber: AA00000000000108
[ 9381.198595] usb-storage 4-7:1.0: USB Mass Storage device detected
[ 9381.198931] scsi host8: usb-storage 4-7:1.0
[ 9381.199458] usbcore: registered new interface driver usb-storage
[ 9381.200839] usbcore: registered new interface driver uas
[ 9382.519813] scsi 8:0:0:0: Direct-Access     Corsair  Voyager          1100 PQ: 0 ANSI: 0 CCS
[ 9382.520679] sd 8:0:0:0: Attached scsi generic sg4 type 0
[ 9383.462615] sd 8:0:0:0: [sdd] 31326208 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 9383.463760] sd 8:0:0:0: [sdd] Write Protect is off
[ 9383.463762] sd 8:0:0:0: [sdd] Mode Sense: 43 00 00 00
[ 9383.464786] sd 8:0:0:0: [sdd] No Caching mode page found
[ 9383.464792] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[ 9383.470824] sdd: sdd1 sdd2
[ 9383.474661] sd 8:0:0:0: [sdd] Attached SCSI removable disk
[ 9384.564005] ISO 9660 Extensions: Microsoft Joliet Level 3
[ 9384.566879] ISO 9660 Extensions: Microsoft Joliet Level 3
[ 9384.571964] ISO 9660 Extensions: RRIP_1991A

Le périphérique utilisé sera donc (dans mon cas): /dev/sdd. Procédons maintenant à la copie de notre fichier ISO sur la clef. Il y a plusieurs possibilités, suivant votre OS (Linux, Mac, Windows) ou votre distribution (Fedora, Debian, etc.)

  • Copie avec un logiciel “spécialisé” comme unetbootin
  • Copie avec la commande dd

C'est la dernière solution que j'utiliserai. L'image ISO est dans mon répertoire Téléchargements.

dd if=./Téléchargements/debian-9.2.1-i386-netinst.iso of=/dev/sdd bs=4096

Le paramètre “bs=4096” est nécessaire pour certaines clef USB.

Modification du BIOS

Il vous faudra certainement aller dans le BIOS de votre serveur, touche DEL, F12, ESC, F10 ou autre (voyez l'écran d'accueil au démarrage qui indique habituellement la touche à utiliser) pour entrer dans le paramétrage du BIOS et indiquer sur quel périphérique le serveur va démarrer.

Insérez votre clef et modifiez l'ordre de Boot (quel périphérique sera utilisé pour amorcer la machine). L'opération inverse sera souvent nécessaire pour rétablir l'ordre initial de démarrage. (démarrage sur le disque dur)

Lancement de l'installation

Éteignez votre serveur, insérez la clef USB si elle n'y est pas déjà et rallumez votre serveur. Il faudra taper sur une touche "DEL" ou "F12" ou autre pour accéder au menu de démarrage de votre serveur et choisir de démarrer (amorçage, booter) sur votre clef.

Installation du serveur sans chiffrage des partitions

Nous utiliserons le mode texte, mais vous pouvez utiliser le mode graphique si vous voulez. Les écrans sont identiques.

  1. Démarrage

    Démarrage

  2. Choix du mode d'installation

    Texte pour moi.

  3. Choix de la langue (clavier, interface)

    Langue d'installation: Français

    Démarrage

    Situation géographique: France

    Démarrage

    Configuration du clavier: français

    Démarrage

  4. Choix du nom de la machine

    Sans le nom de domaine: ici, atom

    Le nom complet de la machine Debian est défini dans 2 fichiers:

    • /etc/hostname: ce fichier contient le nom du serveur, SANS le nom de domaine. Ce fichier ne contient qu'une seule ligne (un mot): le nom de votre machine.
    • /etc/hosts: ce fichier contient le nom complet de la machine. Il se présente ainsi:
127.0.0.1       localhost

# serveurs

192.168.111.160         atom.yojik.net             atom

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Vous voyez ici la correspondance entre le nom complet du serveur, son nom comme il est écrit dans /etc/hostname ainsi que son adresse IP (ici, IPV4). Nous rajouterons l'adresse IPV6 ensuite, après l'installation.

Démarrage

  1. Choix du nom de domaine

yojik.net (mettez le votre!)

Démarrage

  1. Saisie du mot de passe root (super-utilisateur)

Démarrage

Confirmation du mot de passe super-utilisateur.

Démarrage

  1. Saisie du compte utilisateur

Ici, notre compte d'administrateur (admin ou celui de votre choix); en effet, nous ne nous connecterons jamais avec le compte root, uniquement avec le compte d'administration. L'accès root sera bloqué dans le fichier de configuration de ssh.

Démarrage

  1. Saisie du mot de passe utilisateur.

    1. Mot de passe

      Démarrage

    2. Confirmation de ce mot de passe.

      Démarrage

  2. Partitionnement du disque

Ici, nous avons 2 solutions principalement:

  • 1 partitionnement avec chiffrage du disque (manuel ou automatique)
  • 2 partitionnement sans chiffrage

Nous verrons ici un partitionnement sans chiffrage. Le chiffrage sera vu dans une partie séparée car elle pose le problème de la saisie de la phrase de passe pour un serveur “distant”.

Ici, nous utiliserons un disque entier, avec tout dans une seule partition. Il est parfaitement possible de choisir un autre schéma de partitionnement, avec /home, /var, /tmp dans des partitions séparées.

Démarrage

Choix d'une installation simplifiée:

Démarrage

Choix du disque à partitionner:

Démarrage

Schéma de partitionnement: (simplifié également ...)

![Démarrage](Images/Debian-Stretch-18.png)

Confirmation du partitionnement choisi:

![Démarrage](Images/Debian-Stretch-19.png)

![Démarrage](Images/Debian-Stretch-20.png)
  1. Progression de l'installation

    Démarrage

  2. Configuration de l'outil de gestion des paquets

    Nous n'avons pas d'autres sources de paquets pour l'instant:

    Démarrage

  3. Choix du miroir

    France mais choisissez celui qui est le plus proche de votre localisation géographique.

    Démarrage

    Choix du miroir de l'archive Debian: j'ai choisi deb.debian.org. Ce miroir renvoie vers le miroir le plus approprié et le plus rapide.

    Démarrage

  4. Choix du proxy

    Choix du proxy: pas de proxy pour moi. Le proxy permet de passer par un serveur intermédiaire, par exemple, situé dans un autre pays.

    Démarrage

    Progression de l'installation ...

    Démarrage

  5. Configuration de “popularity contest”

    J'ai répondu: oui. Choisissez si vous voulez participer aux statistiques des paquets les plus employés.

    Démarrage

  6. Sélection des logiciels

    Désélectionnez “environnement de bureau” et sélectionnez: “serveur ssh” et “utilitaires usuels du système”. Validez.

    Démarrage

  7. Installation de grub (gestionnaire d'amorçage) sur le disque.

    Démarrage

  8. Sélection du disque sur lequel installer le programme de démarrage grub.

    J'ai choisi le disque installé dans mon serveur. On aurait aussi pu choisir un média amovible comme une clef USB.

    Démarrage

  9. Redémarrage

    Enlevez la clef USB qui a permis de lancer l'installation et tapez ENTER.

    Démarrage

  10. S'identifier (se loguer).

    Démarrage

    Ici, utilisateur root, puis saisie du mot de passe super-utilisateur.

    Nous ferons notre première configuration à partir du clavier et de l'écran connectés à notre serveur. Cela n'est valable évidemment que si nous avons un accès physique à notre machine.

    Pour une machine distante, la procédure est différente et nous nous connecterons avec ssh.

    Démarrage

Et voilà, l'installation première est terminée.

Il reste “quelques” étapes comme la configuration du réseau (nous avons utilisé la configuration automatique pendant l'installation), la sécurisation du serveur ssh, ainsi que l'installation de programmes de surveillance (monitoring), le pare-feu.

Installation de serveur avec chiffrage des partitions (méthode manuelle)

Pour cela, il faut que le serveur soit accessible ... au démarrage, il vous sera demandé la clef de chiffrage. Nous verrons ensuite une méthode avec clef de chiffrage installée sur une clef USB ou carte mémoire, ce qui permettra un redémarrage automatique du serveur sans avoir à saisir la clef. (mais même avec ce système, il faut un accès physique au serveur.)

Les première étapes sont identiques à la version non-chiffrée. Le chiffrement sera configuré lors du partitionnement du disque.

  1. Choix du mode d'Installation

    Démarrage-chiffré

  2. Choix de la Langue

    Démarrage-chiffré

  3. Choix de la situation géographique

    Démarrage-chiffré

  4. Configuration du clavier

    Démarrage-chiffré

  5. Installation: début

    Démarrage-chiffré

  6. Installation: Suite

    Démarrage-chiffré

  7. Configuration du réseau: nom de machine

    Démarrage-chiffré

  8. Configuration du réseau: nom de Domaine

    Démarrage-chiffré

  9. Configuration du réseau: nom de Domaine (suite)

    Démarrage-chiffré

  10. Configuration du mot de passe super-utilisateur

    Démarrage-chiffré

  11. Confirmation du mot de passe

    Démarrage-chiffré

  12. Configuration d'un premier utilisateur (Nom/prénom)

    Démarrage-chiffré

  13. Configuration d'un premier utilisateur (suite)

    Démarrage-chiffré

  14. Identifiant (login) de cet utilisateur

    Démarrage-chiffré

  15. Mot de passe de cet utilisateur

    Démarrage-chiffré

  16. Confirmation

    Démarrage-chiffré

  17. C'est ici que commencent les changements de configuration. Nous allons partitionner la disque en 3:

    • la première partition est la partition /boot, non chiffrée
    • la partition suivante est la partition swap, chiffrée
    • la dernière est la partition root "/" chiffrée.

    Démarrage-chiffré

  18. Nous allons utiliser la méthode manuelle pour pouvoir fixer nous-mêmes la taille de nos partitions:

    Démarrage-chiffré

  19. Choix du disque à partitionner

    Démarrage-chiffré

  20. Création de la table de partition

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  21. Choix du système de fichiers et du point de montage de la première partition (/boot).

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  22. Création des partitions suivantes (swap et "/")

    Démarrage-chiffré

  23. Partition swap

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  24. Création de la partition root "/"

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  25. Configuration des volumes chiffrés

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  26. Choix des partitions à chiffrer (swap et root)

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Vous noterez que j'ai choisi de ne PAS effacer les données du disque. En production, il faudra choisir OUI. Cette procédure permet de remplir les partitions avec des données aléatoires et donne une meilleure sécurité. Cette procédure est longue ...

    Démarrage-chiffré

    Démarrage-chiffré

  27. Choix de la clef de chiffrage

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  28. Fin du partitionnement

    Démarrage-chiffré

  29. Oups! oubli ... il nous faut configurer le point de montage "/"

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

    Démarrage-chiffré

  30. Affichage de notre table de partitions

    Démarrage-chiffré

  31. Fin du partitionnement

    Démarrage-chiffré

    Démarrage-chiffré

    La fin de l'installation est identique à la version non-chiffrée.

Installation de serveur avec chiffrage des partitions (mode assisté LVM)

Le début de l'installation est identique. Nous allons passer directement à la partie partitionnement. (section 12)

  1. Étape 1

    Debian-chiffrée-lvm

  2. Étape 2

    Debian-chiffrée-lvm

  3. Étape 3

    Debian-chiffrée-lvm

  4. Étape 4

    Debian-chiffrée-lvm

  5. Étape 5

    Debian-chiffrée-lvm

  6. Étape 6

    Debian-chiffrée-lvm

  7. Étape 7

    Debian-chiffrée-lvm

  8. Étape 8

    Debian-chiffrée-lvm

  9. Étape 9

    Debian-chiffrée-lvm

  10. Étape 10

    Debian-chiffrée-lvm

  11. Étape 11

    Debian-chiffrée-lvm

  12. Partitionnement en mode lvm chiffré

    On suit ce qui est indiqué sur les captures d'écran.

    Debian-chiffrée-lvm

  13. Choix du disque à partitionner

    Debian-chiffrée-lvm

  14. Choisissez le mode que vous voulez: tout dans une partition ou des partitions séparées.

    Debian-chiffrée-lvm

  15. On modifie les partitions

    Debian-chiffrée-lvm

  16. Partitionnement en cours

    Debian-chiffrée-lvm

  17. Effacement des données (écriture de données aléatoires sur le disque)

    Debian-chiffrée-lvm

  18. Saisie de la phrase de passe

    Debian-chiffrée-lvm

  19. Suite

    Debian-chiffrée-lvm

  20. Affichage de vos choix

    Debian-chiffrée-lvm

  21. Confirmation de vos choix

    Debian-chiffrée-lvm

  22. Installation du système (comme précédemment)

    Debian-chiffrée-lvm

  23. Étape 23

    Debian-chiffrée-lvm

  24. Étape 24

    Debian-chiffrée-lvm

  25. Étape 25

    Debian-chiffrée-lvm

  26. Étape 26

    Debian-chiffrée-lvm

  27. Étape 27

    Debian-chiffrée-lvm

  28. Étape 28

    Debian-chiffrée-lvm

  29. Étape 29

    Debian-chiffrée-lvm

  30. Étape 30

    Debian-chiffrée-lvm

  31. Étape 31

    Debian-chiffrée-lvm

  32. Étape 32

    Debian-chiffrée-lvm

  33. Étape 33

    Debian-chiffrée-lvm

  34. Re-démarrage

    Debian-chiffrée-lvm

  35. Saisie de la phrase de passe pour débloquer l'accès au disque

    Debian-chiffrée-lvm

  36. Et voilà :)

    Debian-chiffrée-lvm

Installation de serveur avec chiffrage des partitions et clef de chiffrage sur support amovible

WORK IN PROGRESS !!!

Nous allons voir ici une méthode pour éviter d'avoir à saisir la phrase de passe à chaque redémarrage. Nous allons ajouter une clef (en plus de celle que vous avez déjà). Cette clef sera composée par des données aléatoires d'un support amovible (clef usb, carte sdx, etc ... )

Nous allons remplir le contenu de ce support avec des données aléatoires, et définir une portion de celle-ci comme clef. Il reste évident qu'il faut avoir un accès physique àa la machine ...

Écriture de données aléatoires sur le support amovible.

Vérifiez avec la commande dmesg quel est le périphérique amovible utilisé. Pour moi, c'est sdb.

dd if=/dev/urandom of=/dev/sdb bs=4096

Nous avons utilisé la totalité de la clef. Il est possible aussi de formater la clef d'une façon habituelle en réservant un espace non-formaté et non alloué pour installer notre clef secrète. Pour cela, vous pouvez utiliser gparted par exemple.

Extraction de la clef à partir d'un secteur donné de la clef

dd if=/dev/sdb of=/root/secret.key bs=512 skip=8 count=16

Ajout de cette clef à cryptsetup

On liste les partitions:

blkid

On ajoute la clef dans le slot 1 (le slot 0 contient la phrase de passe entrée lors de l'installation.)

cryptsetup luksAddKey /dev/sda3 /root/secret.key --key-slot 1

Ajout d'une règle udev

On crée le fichier: /etc/udev/rules.d/99-custom-usb.rules avec le contenu suivant:

SUBSYSTEMS=="usb", DRIVERS=="usb",SYMLINK+="usbdevice%n"

Onb relance le serveur et on vérifie que la règle a bien été prise en compte:

ls -l /dev/usbdevices

C'est bon.

Test

pas fini :( ou mieux, "work in progress" !