# 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](Images/reseau.png) ## 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](Images/mon-serveur.png) 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**): 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:~# 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 **aijan**. > Le nom complet de ma machine serait donc: **aijan.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. Les adresses fixes que je vais attribuer à mon serveur sont les suivantes: - IPV4: 192.168.111.240 - IPV6: 2a01:e0a:d0:3c20::240 5. 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 Voici les données que nous voulons pour notre serveur. L'adresse **ip** actuelle est une adresse **dhcp**, attribuée automatiquement par la **box** internet (freebox dans mon cas). Nous changerons ça pour une adresse IP fixe en ipv4 et ipv6. | Nom de la machine | Domaine | Adresse IPV4 IPV6 | |:-----------------:|:---------:|:---------------:| | aijan | yojik.net | 192.168.111.240 | | | | 2a01:e0a:d0:3c20::240 | Nom d'utilisateur: **ericadmin** Mot de passe: **celui** que vous avez saisi lors de l'installation et que nous changerons ensuite. ## 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](https://www.debian.org/CD/netinst/) et choisissez l'image **amd64** ou **I386** ou autre suivant l'architecture de votre serveur. Mon serveur utilisera l'image **amd64**. - Note: Il existe des images "non-officielles" comprenant les firmwares de périphériques. (partie software des périphériques). Il n'est pas recommandé de les utiliser sur des serveurs. (Iiiak). L'adresse est la suivante: [Debian.org + firmwares](https://cdimage.debian.org/cdimage/unofficial/non-free/firmware/) - Si vous avez besoin de firmwares particuliers (à utiliser avec l'ISO officielle), ils sont disponibles ici: [firmwares](http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/stable/current/) Installez-les suivant les instructions données sur cette page. ### 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. - 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-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](Images/Debian10-Installation-01.png) 2. Choix du mode d'installation **Graphique** pour moi. 3. Choix de la langue (clavier, interface) Langue d'installation: **Français** ![Langue](Images/Debian10-Installation-02.png) Situation géographique: **France** ![Lieu](Images/Debian10-Installation-03.png) Configuration du clavier: **français** ![Clavier](Images/Debian10-Installation-04.png) 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) 5. Choix du nom de domaine **yojik.net** (mettez le votre!) ![Démarrage](Images/Debian10-Installation-09.png) 6. Saisie du mot de passe root (super-utilisateur) Nous laisserons ces champs vides pour que Debian nous configure automatiquement un compte utilisateur avec les droits **sudo**. ![Démarrage](Images/Debian10-Installation-10.png) 7. Saisie des données du compte utilisateur Ici, saisissez votre compte administrateur (admin ou celui de votre choix) qui aura les droits **sudo** car nous avons laissé les champs de saisie **super-utilisateur** vides; 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 (ou le nom de votre choix!). ![Démarrage](Images/Debian10-Installation-12.png) ![Démarrage](Images/Debian10-Installation-13.png) 8. Saisie du mot de passe utilisateur avec confirmation. ![Démarrage](Images/Debian10-Installation-15.png) 9. Configuration de l'horloge. Pas de capture d'écran .... elle a défilé trop rapidement. 10. 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". Il existe des solutions de chiffrement avec récupération automatique de la clef sur un serveur. Article sur [opensource](https://opensource.com/article/19/8/how-encrypt-files-gocryptfs) qui détaille 2 solutions quand il n'y a pas d'accès physique au serveur. 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](Images/Debian10-Installation-16.png) Choix du disque à partitionner: ![Démarrage](Images/Debian10-Installation-17.png) Confirmation: ![Démarrage](Images/Debian10-Installation-18.png) Dans notre cas, nous allons partitionner notre disque virtuel pour simuler les 4 disques durs. Partitionner les disques: ![Démarrage](Images/Debian10-Installation-19.png) ![Démarrage](Images/Debian10-Installation-20.png) Créer une nouvelle partition: ![Démarrage](Images/Debian10-Installation-21.png) ![Démarrage](Images/Debian10-Installation-22.png) ![Démarrage](Images/Debian10-Installation-23.png) ![Démarrage](Images/Debian10-Installation-24.png) ![Démarrage](Images/Debian10-Installation-25.png) Ne pas mettre encore de point de montage: c'est le système RAID qui aura un point de montage. ![Démarrage](Images/Debian10-Installation-26.png) J'ai créé également des partitions **swap**. Voici les partitions une fois crées: ![Démarrage](Images/Debian10-Installation-27.png) Création des systèmes RAID 1: ![Démarrage](Images/Debian10-Installation-28.png) ![Démarrage](Images/Debian10-Installation-29.png) ![Démarrage](Images/Debian10-Installation-30.png) ![Démarrage](Images/Debian10-Installation-31.png) ![Démarrage](Images/Debian10-Installation-32.png) ![Démarrage](Images/Debian10-Installation-33.png) Confirmation du partitionnement: ![Démarrage](Images/Debian10-Installation-34.png) Création des points de montage: ![Démarrage](Images/Debian10-Installation-42.png) ![Démarrage](Images/Debian10-Installation-43.png) ![Démarrage](Images/Debian10-Installation-44.png) ![Démarrage](Images/Debian10-Installation-45.png) ![Démarrage](Images/Debian10-Installation-46.png) ![Démarrage](Images/Debian10-Installation-47.png) Faites de même avec l'autre système RAID monté sur **/home**. ![Démarrage](Images/Debian10-Installation-48.png) Terminer le partitionnement: ![Démarrage](Images/Debian10-Installation-53.png) ![Démarrage](Images/Debian10-Installation-54.png) 11. Progression de l'installation Installation du système de base. ![Démarrage](Images/Debian10-Installation-55.png) 12. Configuration de l'outil de gestion des paquets Nous n'avons pas d'autres sources de paquets pour l'instant: ![Démarrage](Images/Debian10-Installation-56.png) 13. Choix du miroir **France** mais choisissez celui qui est le plus proche de votre localisation géographique. ![Démarrage](Images/Debian10-Installation-57.png) 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](Images/Debian10-Installation-58.png) 14. 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](Images/Debian10-Installation-59.png) Progression de l'installation ... ![Démarrage](Images/Debian10-Installation-60.png) ![Démarrage](Images/Debian10-Installation-61.png) 15. Configuration de "popularity contest" J'ai répondu: **oui**. Choisissez si vous voulez participer aux statistiques des paquets les plus employés. ![Démarrage](Images/Debian10-Installation-62.png) 16. Sélection des logiciels Désélectionnez "environnement de bureau" et sélectionnez: **"serveur ssh"** et **"utilitaires usuels du système"**. Validez. ![Démarrage](Images/Debian10-Installation-64.png) ![Démarrage](Images/Debian10-Installation-65.png) 17. Installation de **grub** (gestionnaire d'amorçage) sur le disque. ![Démarrage](Images/Debian10-Installation-66.png) 18. 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. Kilobug m'a suggéré d'installer **grub** sur les 2 disques qui constituent le système **raid**. Simplement, revenir en arrière, et rajouter le boot sur le deuxième disque de la grappe raid. ![Démarrage](Images/Debian10-Installation-67.png) L'installation se finalise: ![Démarrage](Images/Debian10-Installation-68.png) ![Démarrage](Images/Debian10-Installation-69.png) 19. Redémarrage Enlevez la clef USB qui a permis de lancer l'installation et tapez **ENTER**. ![Démarrage](Images/Debian10-Installation-70.png) ![Démarrage](Images/Debian10-Installation-71.png) 20. S'identifier (se loguer). ![Démarrage](Images/Debian10-Installation-72.png) ![Démarrage](Images/Debian10-Installation-73.png) ![Démarrage](Images/Debian10-Installation-74.png) ![Démarrage](Images/Debian10-Installation-75.png) ![Démarrage](Images/Debian10-Installation-76.png) 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](Images/Debian10-Installation-77.png) ![Démarrage](Images/Debian10-Installation-78.png) 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.