Installation d'un serveur Debian/Buster 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 HP Proliant MicroServer, AMD Turion(tm) II Neo N54L Dual-Core Processor, 8Go de RAM, et 2 disques de 1 To classiques et 2 SSDs de 250Go). Il sera relié à un clavier et un écran pendant la phase d'installation.

    Les captures d'écran seront faites avec l'installation d'une configuration semblable simulée dans une machine virtuelle (virt-manager.)

    Ce serveur est assez ancien et l'amorçage n'est pas basé sur UEFI, mais un bios standard.

    Le serveur est équipé de 2 disques non-SSD en mode RAID 1 , configurés comme /home et 2 disques SSDs en mode RAID 1 pour /.

**Note:**

J'ai fait une installation de Debian/Buster sur du matériel plus récent, avec UEFI disponible. J'avoue que j'ai galéré un peu. Voilà la procédure utilisée pour pouvoir procéder à l'installation:

-   Allez dans le bios du serveur et vérifiez que le mode UEFI est activé.
-   J'ai téléchargé une ISO de **gparted**, logiciel de partionnement, je l'ai installée sur une clef USB. J'ai ensuite démarré sur cette clef.
-   Ensuite, j'ai effacé toutes les partitions du disque et créé une table de partition GPT.
-   Création de la première partition de 500 Mo, avec étiquette "boot", formatage en FAT32, et définition du type à **esp**. Il faut monter cette partition sur **/boot/efi** pendant le partitionnement des disques lors de l'installation.
-   le reste du formatage du disque sera identique à une installation normale.

Voilà par exemple le schéma de partitionnement de ma machine de bureau avec UEFI (partie **sdb**):

```shell
root@aldebaran:~# lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
....
sdb         8:16   0 223,6G  0 disk
├─sdb1      8:17   0   500M  0 part /boot/efi
├─sdb2      8:18   0  1000M  0 part /boot
├─sdb3      8:19   0  97,7G  0 part /
├─sdb4      8:20   0  48,8G  0 part
└─sdb5      8:21   0  23,3G  0 part [SWAP]
root@aldebaran:~#
```
  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.

  2. Un nom de machine

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

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

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

  4. Un compte utilisateur

    L'installateur Debian vous demandera un mot de passe pour le compte root (super-utilisateur): laissez-le vide. nous utiliserons sudo

    • Note: si vous laissez le mot de passe du super-utilisateur (root) vide pendant l'installation, l'utilitaire sudo sera installé et le premier utilisateur (que vous définissez à l'étape suivante) aura les droits d'administration. Les commandes seront donc à préfixer par sudo: ex:

    sudo ip a

    J'ai une préférence pour l'utilisation du compte root ... à chacun de choisir suivant ses préférences. Mais j'ai décidé d'utiliser sudo dans ce tutoriel.

    Ensuite, si vous n'avez pas activé le compte sudo, qui est le compte administrateur, il vous demandera de définir un compte utilisateur, ici, notre 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. 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é.

    Si vous avez opté pour l'utilisation du compte root, pour obtenir les droits super utilisateur (root) , il faudra taper su suivi du mot de passe super utilisateur.

    Dans un deuxième temps, nous installerons aussi un mode d'accès encore plus sécurisé 2FA. (2FA – Two-factor authentication)

    Si j'ai le temps, j'essayerai aussi de sécuriser l'accès au serveur avec une carte à puce.

    Nous modifierons également les mots de passe administrateur (et super-utilisateur) par la suite, en utilisant un générateur de mots de passe.

Récapitulatif

Nom de la machine Domaine Adresse IPV4 Comptes Mot de passe
aijan yojik.net 192.168.111.240 ericadmin *

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

Copie de l'image sur une clef USB

Il vous faut déterminer le périphérique utilisé par votre clef. Lancez la commande :

tail -f /var/log/messages

dans un terminal root et insérez la clef dans votre ordinateur Linux.

Voici un extrait du résultat sur ma machine:

Apr 15 14:02:46 aldebaran kernel: [24895.010625] usb 2-5: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
Apr 15 14:02:48 aldebaran kernel: [24896.188120] usb 2-5: New USB device found, idVendor=1f75, idProduct=0917, bcdDevice= 0.01
Apr 15 14:02:48 aldebaran kernel: [24896.188126] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 15 14:02:48 aldebaran kernel: [24896.188129] usb 2-5: Product: PenDrive
Apr 15 14:02:48 aldebaran kernel: [24896.188131] usb 2-5: Manufacturer: Innostor
Apr 15 14:02:48 aldebaran kernel: [24896.188134] usb 2-5: SerialNumber: 000000000000000020
Apr 15 14:02:48 aldebaran mtp-probe: checking bus 2, device 2: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-5"
Apr 15 14:02:48 aldebaran mtp-probe: bus: 2, device: 2 was not an MTP device
Apr 15 14:02:48 aldebaran kernel: [24896.210264] usb-storage 2-5:1.0: USB Mass Storage device detected
Apr 15 14:02:48 aldebaran kernel: [24896.210468] scsi host6: usb-storage 2-5:1.0
Apr 15 14:02:48 aldebaran kernel: [24896.210530] usbcore: registered new interface driver usb-storage
Apr 15 14:02:48 aldebaran kernel: [24896.212430] usbcore: registered new interface driver uas
Apr 15 14:02:48 aldebaran mtp-probe: checking bus 2, device 2: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-5"
Apr 15 14:02:48 aldebaran mtp-probe: bus: 2, device: 2 was not an MTP device
Apr 15 14:02:49 aldebaran kernel: [24897.233847] scsi 6:0:0:0: Direct-Access     Innostor Innostor         1.00 PQ: 0 ANSI: 6
Apr 15 14:02:49 aldebaran kernel: [24897.234481] sd 6:0:0:0: Attached scsi generic sg2 type 0
Apr 15 14:02:49 aldebaran kernel: [24897.234855] sd 6:0:0:0: [sdc] 61440000 512-byte logical blocks: (31.5 GB/29.3 GiB)
Apr 15 14:02:49 aldebaran kernel: [24897.235055] sd 6:0:0:0: [sdc] Write Protect is off
Apr 15 14:02:49 aldebaran kernel: [24897.235247] sd 6:0:0:0: [sdc] Write cache: disabled, read cache: disabled, doesn\'t support DPO or FUA
Apr 15 14:02:49 aldebaran kernel: [24897.237088]  sdc: sdc1 sdc2
Apr 15 14:02:49 aldebaran kernel: [24897.238655] sd 6:0:0:0: [sdc] Attached SCSI removable disk
Apr 15 14:02:49 aldebaran udisksd[710]: Mounted /dev/sdc1 at /media/eric/Debian 10.3.0 amd64 1 on behalf of uid 1001

Le périphérique utilisé sera donc (dans mon cas): /dev/sdc. 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.). Mon ordinateur fixe est sous Linux Debian/Buster.

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-10.4.0-amd64-netinst.iso of=/dev/sdc bs=4096

Le paramètre bs=4096 est nécessaire pour certaines clefs 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 démarrage (booting sequence) (quel périphérique sera utilisé pour amorcer la machine). Après l'installation, l'opération inverse sera souvent nécessaire pour rétablir l'ordre initial de démarrage. (démarrage sur le disque dur principal)

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 le périphérique sur lequel démarrer (amorçage, booter): choisissez votre clef.

Installation du serveur sans chiffrement des partitions

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

Ici, vous voyez la création d'une machine virtuelle dans laquelle j'installe Debian 10, ceci pour pouvoir prendre des copies d'écran de l'installation.

  1. Démarrage

    Démarrage

  2. Choix du mode d'installation

    Graphique pour moi.

  3. Choix de la langue (clavier, interface)

    Langue d'installation: Français

    Langue

    Situation géographique: France

    Lieu

    Configuration du clavier: français

    Clavier

  4. Choix du nom de la machine

    Sans le nom de domaine: ici, aijan

    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 une fois configuré pour l'IPV4 (la section IPV6 sera vue plus loin):

      127.0.0.1       localhost
      
      # serveur aijan
      192.168.111.240         aijan.yojik.net             aijan
      
      # 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 une adresse IPV6 fixe ensuite.


    A l'installation, le système installe automatiquement des adresses obtenues par **dhcp**, en IPV4 et IPV6, attribuées dans un pool (gérées souvent par la box internet). Ces adresses sont à modifier pour l'utilisation de notre serveur avec accès de l'extérieur (internet). Il est possible de gérer des adresses qui changent avec une redirection, mais l'utilisation d'adresses fixes est préférable.

    Sur l'image suivante, vous voyez le chargement des composants de base de l'installation.

    ![Chargement](Images/Debian10-Installation-05.png)

    Configuration automatique du réseau (que nous reconfigurerons plus tard)

    ![Démarrage](Images/Debian10-Installation-06.png)

    Le choix du nom du serveur.

    ![Démarrage](Images/Debian10-Installation-08.png)
  1. Choix du nom de domaine

    yojik.net (mettez le votre!)

    Démarrage

  2. Saisie du mot de passe root (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. Il vous sera également demandé votre nom réel.

    Démarrage Démarrage

  2. Saisie du mot de passe utilisateur avec confirmation.

    Démarrage

  3. Configuration de l'horloge.

    Pas de capture d'écran .... elle a défilé trop rapidement.

  4. Partitionnement du disque

    Ici, nous avons 2 solutions principalement:

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

    Nous verrons ici un partitionnement sans chiffrement. Le chiffrement 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 nos 4 disques en 2 systèmes RAID 1. Le répertoire /home tiendra entièrement sur les disques classiques montés en RAID 1.

    Voilà ce à quoi le partitionnement va aboutir:

    ericadmin@aijan:~$ lsblk
    NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda       8:0    0 931,5G  0 disk  
    └─sda1    8:1    0 931,5G  0 part  
    └─md0   9:0    0 931,4G  0 raid1 /home
    sdb       8:16   0 931,5G  0 disk  
    └─sdb1    8:17   0 931,5G  0 part  
    └─md0   9:0    0 931,4G  0 raid1 /home
    sdc       8:32   0 223,6G  0 disk  
    ├─sdc1    8:33   0   9,3G  0 part  [SWAP]
    └─sdc2    8:34   0 214,3G  0 part  
      └─md1   9:1    0 214,1G  0 raid1 /
    sdd       8:48   0 223,6G  0 disk  
    ├─sdd1    8:49   0   9,3G  0 part  [SWAP]
    └─sdd2    8:50   0 214,3G  0 part  
      └─md1   9:1    0 214,1G  0 raid1 /
    ericadmin@aijan:~$

    Notez que vous voyez dans les captures d'écran la simulation dans la machien virtuelle: le principe est exactement identique, mais avec des vrais disques durs.

    Démarrage

    Choix du disque à partitionner:

    Démarrage

    Confirmation:

    Démarrage

    Dans notre cas, nous allons partitionner notre disque virtuel pour simuler les 4 disques durs.

    Partitionner les disques:

    Démarrage Démarrage

    Créer une nouvelle partition:

    Démarrage Démarrage Démarrage Démarrage Démarrage

    Ne pas mettre encore de point de montage: c'est le système RAID qui aura un point de montage.

    Démarrage

    J'ai créé également des partitions swap. Voici les partitions une fois crées:

    Démarrage

    Création des systèmes RAID 1:

    Démarrage Démarrage Démarrage Démarrage Démarrage Démarrage

    Confirmation du partitionnement:

    Démarrage

    Création des points de montage:

    Démarrage

    Démarrage

    Démarrage

    Démarrage

    Démarrage

    Démarrage

    Faites de même avec l'autre système RAID monté sur /home.

    Démarrage

    Terminer le partitionnement:

    Démarrage

    Démarrage

  5. Progression de l'installation

    Installation du système de base.

    Démarrage

  6. Configuration de l'outil de gestion des paquets

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

    Démarrage

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

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

    Démarrage

  9. Configuration de "popularity contest"

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

    Démarrage

  10. Sélection des logiciels

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

    Démarrage

    Démarrage

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

    Démarrage

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

    L'installation se finalise:

    Démarrage

    Démarrage

  13. Redémarrage

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

    Démarrage Démarrage

    1. S'identifier (se loguer).

    Démarrage Démarrage Démarrage Démarrage Démarrage

    Ici, utilisateur ericadmin, puis saisie du mot de passe.

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