﻿# 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.

## 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 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 ....)

2. 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.

3. 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

4. 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.

5. 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

2. Choix du mode d'installation

   Texte pour moi.

3. Choix de la langue (clavier, interface)

   Langue d'installation: Français

   Situation géographique: France

   Configuration du clavier: français

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.

5. Choix du nom de domaine

   yojik.net (mettez le votre!)

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

   Confirmation du mot de passe super-utilisateur.

7. 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.

8. Saisie du mot de passe utilisateur.

   1. Mot de passe

   2. Confirmation de ce mot de passe.

9. 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.

   Choix d'une installation simplifiée:

   Choix du disque à partitionner:

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

   Confirmation du partitionnement choisi:

10. Progression de l'installation

11. Configuration de l'outil de gestion des paquets

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

12. Choix du miroir

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

    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.

13. 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.

    Progression de l'installation ...

14. Configuration de “popularity contest”

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

15. Sélection des logiciels

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

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

17. 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.

18. Redémarrage

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

19. S'identifier (se loguer).

    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.

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

2. Choix de la Langue

3. Choix de la situation géographique

4. Configuration du clavier

5. Installation: début

6. Installation: Suite

7. Configuration du réseau: nom de machine

8. Configuration du réseau: nom de Domaine

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

10. Configuration du mot de passe super-utilisateur

11. Confirmation du mot de passe

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

13. Configuration d'un premier utilisateur (suite)

14. Identifiant (login) de cet utilisateur

15. Mot de passe de cet utilisateur

16. Confirmation

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.

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

19. Choix du disque à partitionner

20. Création de la table de partition

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

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

23. Partition swap

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

25. Configuration des volumes chiffrés

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

    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 ...

27. Choix de la clef de chiffrage

28. Fin du partitionnement

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

30. Affichage de notre table de partitions

31. Fin du partitionnement

    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

2. Étape 2

3. Étape 3

4. Étape 4

5. Étape 5

6. Étape 6

7. Étape 7

8. Étape 8

9. Étape 9

10. Étape 10

11. Étape 11

12. Partitionnement en mode lvm chiffré

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

13. Choix du disque à partitionner

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

15. On modifie les partitions

16. Partitionnement en cours

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

18. Saisie de la phrase de passe

19. Suite

20. Affichage de vos choix

21. Confirmation de vos choix

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

23. Étape 23

24. Étape 24

25. Étape 25

26. Étape 26

27. Étape 27

28. Étape 28

29. Étape 29

30. Étape 30

31. Étape 31

32. Étape 32

33. Étape 33

34. Re-démarrage

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

36. Et voilà :)

## 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" !