# 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
- 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 ....)
- 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.
- 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
- 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.
- 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.
-
Démarrage
-
Choix du mode d'installation
Texte pour moi.
-
Choix de la langue (clavier, interface)
Langue d'installation: Français
Situation géographique: France
Configuration du clavier: français
-
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.
- Choix du nom de domaine
yojik.net (mettez le votre!)
- Saisie du mot de passe root (super-utilisateur)
Confirmation du mot de passe super-utilisateur.
- 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.
-
Saisie du mot de passe utilisateur.
-
Mot de passe
-
Confirmation de ce mot de passe.
-
-
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 ...)
![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)
-
Progression de l'installation
-
Configuration de l'outil de gestion des paquets
Nous n'avons pas d'autres sources de paquets pour l'instant:
-
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.
-
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 ...
-
Configuration de “popularity contest”
J'ai répondu: oui. Choisissez si vous voulez participer aux statistiques des paquets les plus employés.
-
Sélection des logiciels
Désélectionnez “environnement de bureau” et sélectionnez: “serveur ssh” et “utilitaires usuels du système”. Validez.
-
Installation de grub (gestionnaire d'amorçage) sur le disque.
-
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.
-
Redémarrage
Enlevez la clef USB qui a permis de lancer l'installation et tapez ENTER.
-
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.
-
Choix du mode d'Installation
-
Choix de la Langue
-
Choix de la situation géographique
-
Configuration du clavier
-
Installation: début
-
Installation: Suite
-
Configuration du réseau: nom de machine
-
Configuration du réseau: nom de Domaine
-
Configuration du réseau: nom de Domaine (suite)
-
Configuration du mot de passe super-utilisateur
-
Confirmation du mot de passe
-
Configuration d'un premier utilisateur (Nom/prénom)
-
Configuration d'un premier utilisateur (suite)
-
Identifiant (login) de cet utilisateur
-
Mot de passe de cet utilisateur
-
Confirmation
-
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.
-
Nous allons utiliser la méthode manuelle pour pouvoir fixer nous-mêmes la taille de nos partitions:
-
Choix du disque à partitionner
-
Création de la table de partition
-
Choix du système de fichiers et du point de montage de la première partition (/boot).
-
Création des partitions suivantes (swap et "/")
-
Partition swap
-
Création de la partition root "/"
-
Configuration des volumes chiffrés
-
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 ...
-
Choix de la clef de chiffrage
-
Fin du partitionnement
-
Oups! oubli ... il nous faut configurer le point de montage "/"
-
Affichage de notre table de partitions
-
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)
-
Étape 1
-
Étape 2
-
Étape 3
-
Étape 4
-
Étape 5
-
Étape 6
-
Étape 7
-
Étape 8
-
Étape 9
-
Étape 10
-
Étape 11
-
Partitionnement en mode lvm chiffré
On suit ce qui est indiqué sur les captures d'écran.
-
Choix du disque à partitionner
-
Choisissez le mode que vous voulez: tout dans une partition ou des partitions séparées.
-
On modifie les partitions
-
Partitionnement en cours
-
Effacement des données (écriture de données aléatoires sur le disque)
-
Saisie de la phrase de passe
-
Suite
-
Affichage de vos choix
-
Confirmation de vos choix
-
Installation du système (comme précédemment)
-
Étape 23
-
Étape 24
-
Étape 25
-
Étape 26
-
Étape 27
-
Étape 28
-
Étape 29
-
Étape 30
-
Étape 31
-
Étape 32
-
Étape 33
-
Re-démarrage
-
Saisie de la phrase de passe pour débloquer l'accès au disque
-
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" !