# Installation d'un serveur Debian/Stretch sécurisé
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.
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 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.
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 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.
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.
Nom de la machine | Domaine | Adresse IPV4 | Comptes | Mot de passe |
---|---|---|---|---|
atom | yojik.net | 192.168.111.160 | ericadmin | *** |
root | *** |
(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
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.)
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.
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)
É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.
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:
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.
yojik.net (mettez le votre!)
Confirmation du mot de passe super-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.
Partitionnement du disque
Ici, nous avons 2 solutions principalement:
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.
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:
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.
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à :)
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 ...
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.
dd if=/dev/sdb of=/root/secret.key bs=512 skip=8 count=16
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
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.
pas fini :( ou mieux, "work in progress" !