3 - Installation du serveur Debian
Debian est une organisation communautaire et démocratique, dont le but est le développement de systèmes d'exploitation basés exclusivement sur des logiciels libres. Debian se distingue de la plupart des distributions fondées sur elle par son caractère non commercial et par le mode de gouvernance coopératif de l'association qui gère la distribution. (Wikipedia)
Téléchargement
Suivant votre architecture processeur :
- https://deb.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/mini.iso
- https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/mini.iso
Renommer le fichier : mini-debian-trixie.iso
Mise en place
- Lancer VirtualBox

- Virtual machine name and operating system
- VM Name : Serveur Debian
- VM Folder : default
- ISO Image : …/mini-debian-trixie.iso
- OS : Linux
- OS Distribution : Debian
- OS Version : Debian (64-bit) (⚠️ important)
- ☐
Proceed with Unattended Installation
- Specify virtual hardware
- Base Memory : 1024 Mio (768 Mio si vous n'avez que 8Go de RAM)
- Number of CPUs : autant de cœurs performants que possible (pour les trouver, lscpu -e=CPU,CORE,SOCKET,MAXMHZ,MINMHZ)
- Specify virtual hard disk
- Disk Size : 15 Gio
- Hard Disk File Type and Format : VDI (VirtualBox Disk Image)
- [Finish]
Configuration
- Réseau [Adapter 1]
- Attached to : NAT
- [Redirection de ports] → [+]
- Nom : SSH
- Protocole : TCP
- Port hôte : 10022
- Port invité : 22
- Réseau [Adapter 2]
- ☑ Activer la carte réseau
- Attached to : Réseau interne
- Nom : intnet
- [OK]
Premier lancement

Navigation durant l'installation
L'installation se fait entièrement au clavier
- Flèche : ⬅⬆⬇➡ (déplacement dans les options)
- Barre d'espace (activer une option)
- Tabulation ↹ (déplacement dans les champs)
- Entrée ⏎ (validation d'une page)
⚠️ La touche [Entrée] ne peut pas servir à activer une case à cocher. Elle validera la page entière ! Pour activer une option, il faut utiliser la barre d'espace. Pour naviguer, il faut utiliser la touche tabulation.
Installation
- Install
- French - Français → France → Français
- enp0s3: Intel Corporation 82540EM Gigabit Ethernet Controller
- Nom de machine : serveur-debian
- Domaine : admx.osef
- France → deb.debian.org
- pas de mandataire (proxy), laissez vide
- ... Chargement ...
- Mot de passe du superutilisateur («root») : (laissez vide)
- Confirmation du mot de passe : (laissez vide)
- Nom complet du nouvel utilisateur : Utilisateur
- Identifiant pour le compte utilisateur : user
- Mot de passe pour le nouvel utilisateur : -+
- Confirmation du mot de passe : -+
- Assisté - utiliser un disque entier
- SCSI3 (0,0,0) (sda) - 16,1 GB ATA VBOX HARDDISK
- Tout dans une seule partition (recommandé pour les débutants)
- Terminer le partitionnement et appliquer les changements
- Faut-il appliquer les changements sur les disques ? : <oui>
- ... Première phase d'installation ...
- Souhaitez-vous participer à l'étude statistique sur l'utilisation des paquets ? (Comme vous voulez…)
- Sélection des logiciels : Tout déselectionner avec la barre d'espace puis... :
- [*] Serveur SSH
- [*] Utilitaires usuels du système
- ↹ <Continuer>
- ... Deuxième phase d'installation ...
- Installer le programme de démarrage GRUB sur un disque dur : <oui>
- /dev/sda (ata-VBOX_HARDDISK_VB....)
- Terminer l'installation : <Continuer>
Éjection
Dans le menu de la machine virtuelle :
- Périphériques
- Lecteurs optiques
- Remove Disk From Virtual Drive
- Lecteurs optiques
- Machine
- Redémarrage
Finitions
Entrer l'identifiant et le mot de passe utilisateur...
# @serveur
serveur-debian login: user
password: -+
sudo apt update
[sudo] password for user: -+
sudo apt -y install vim vim-airline bash-completion ssh byobu
byobu-enable
Personnalisation du nom des interfaces réseaux
Par défaut, le noyau donne des noms alambiqués aux interfaces réseaux. Un utilisateur standard n'y prêtera pas attention. Pour un informaticien, il est utile de donner des noms simples aux interface pour faciliter l'écriture des commandes. Pour commencer, dans un terminal, affichez les adresses de vos interfaces et copiez l'adresse MAC (link/ether).
# @serveur
# Pour afficher toutes les adresses des interfaces réseaux :
ip a
# Nous allons extraire les adresses MAC et créer deux fichiers :
# Aller dans le bon dossier
cd /etc/systemd/network/
# Afficher les adresses puis,
# filtrer la chaine "ether", n'imprimer que la chaine « MACAddress= » suivi de la deuxième colonne puis,
# envoyer le résultat dans le terminal ET dans le fichier 10-nic0.link (via sudo)
ip a | awk '/ether/ {print "MACAddress=" $2}' | sudo tee 10-nic0.link
# Faire une copie du fichier
sudo cp 10-nic0.link 10-nic1.link
Ensuite, éditez le fichier /etc/systemd/network/10-nic0.link, supprimer la deuxième ligne et complétez à l'intérieur comme suis :
# @serveur
sudo vi /etc/systemd/network/10-nic0.link
[Match]
MACAddress=xx:xx:xx:xx:xx:xx
[Link]
Name=nic0
👉 Micro tuto vi
Pour effacer une ligne, une fois le curseur sur la ligne, pressez deux fois la touche [D]
Pour insérer du texte dans un fichier, pressez la touche [I] (insertion)
Pour quitter vi, presser la touche Echap (pour sortir du mode insertion) puis saisissez la commande :wq
Pour quitter sans sauvegarder, c'est :q!
Faite de même avec /etc/systemd/network/10-nic1.link en supprimant cette fois la permière ligne.
# @serveur
sudo vi /etc/systemd/network/10-nic1.link
[Match]
MACAddress=xx:xx:xx:xx:xx:xx
[Link]
Name=nic1
Puis, reconstruisez l'initramfs (le « disque de démarrage » du noyau) avec la commande ci-dessous :
# @serveur
# Reconstruction de l'initramfs
sudo update-initramfs -u -k all
Le nom de l'interface sera effectivement changé au prochain démarrage. Mais avant de redémarrer, il faut corriger le fichier /etc/network/interfaces
# @serveur
sudo vi /etc/network/interfaces
Il faut remplacer enp0s3 par nic0. Pour cela, sans entrer en mode insertion, saisissez directement : :%s,enp0s3,nic0,g puis valider avec [entrée]. Vous pouvez également ajouter un # devant la dernière ligne (ipv6) pour la commenter. Au final, vous devriez obtenir :
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug nic0
iface nic0 inet dhcp
# This is an autoconfigured IPv6 interface
#iface nic0 inet6 auto
Démarrage du serveur debian en mode « headless »
Il ne sert à rien de consommer des ressources en laissant la fenêtre VirtualBox du serveur Debian affichée. Celà oblige l'hôte à piloter un écran virtuel inutilement. Dans un premier temps, arrêtez le serveur Debian :
# @serveur
sudo poweroff
👉 Ici, un premier snapshot peut-être envisagé
Dans la fenêtre de VirtualBox :
- cliquer sur le triangle noir à coté du bouton [Démarrer][▾]
- sélectionnez Start without GUI (Ctrl+Alt+Espace)
Le même résultat est obtenu depuis la ligne de commande en lançant :
Sous Linux/Unix/Mac :
# @host
VBoxManage startvm "Serveur Debian" --type headless
Sous Windows :
# @host
cd %ProgramFiles%
Oracle\VirtualBox\VBoxManage.exe startvm "Serveur Debian" --type headless
🔍 en mode « headless », l'accélération 3d n'est pas disponible.
Désormais, nous pouvons contrôler le serveur debian en ouvrant une connexion SSH depuis l'hôte.
# @host
ssh -p10022 user@localhost
Il y a deux avantages majeur à travailler dans le terminal de l'hôte via SSH plutôt que directement dans la fenêtre de Virtualbox.
- Pouvoir redimmensionner le terminal pour gagner de la place et afficher de longue ligne.
- Pouvoir copier/coller des commandes du navigateur de l'hôte vers le terminal.
Simplification de la connexion
Vu que c'est pénible de taper tout ça, nous allons simplifier. Dans un premier temps, il faut créer un fichier « config » dans le dossier « .ssh » de l'hôte :
# @host
# Terminal
vi ~/.ssh/config
# ou
nano ~/.ssh/config
# GUI
gedit ~/.ssh/config
# ou
kate ~/.ssh/config
# Windows
notepad.exe "~\.ssh\config"
# ou
notepad.exe "%USERPROFILE%\.ssh\config"
⚠️ Le Bloc-note de Windows est psychorigide, il adore ajouter « .txt » à la fin du fichier au moment de la sauvegarde.
Le fichier devra contenir ceci :
Host *
Compression yes
Host serveur
Hostname localhost
User user
Port 10022
IdentityFile ~/.ssh/cle_tp_admx
Host client
Hostname 10.0.0.1
ProxyJump serveur
User user
IdentifyFile ~/.ssh/cle_tp_admx
Il ne reste qu'à sauvegarder :
- vi : [echap] :wq [entrée]
- nano : ctrl+O [entrée] ctrl+X
- gedit, micro, kate, notepad : ctrl+S, alt+F4
Désormais, vous pouvez appeler le serveur depuis l'hôte d'un simple :
# @host
ssh serveur
Quand nous aurons installé et configuré les daemons (services) DHCP et DNS, nous connecterons le client Ubuntu au serveur Debian de sorte que le serveur devienne la passerelle (gateway) du client. Quand ce sera fait, vous pourrez accéder au client Ubuntu via ssh depuis votre hôte d'un simple ssh client grâce au dernier bloc de la configuration ci-dessus. Notez bien le ProxyJump.
Suppression du mot de passe
Pour ne pas avoir à saisir un mot de passe à chaque connexion, copier le texte de la clé publique SSH de l'hôte (cat ~/.ssh/cle_tp_admx.pub) et collez le dans le fichier ~/.ssh/authorized_keys du serveur. Si le dossier « .ssh » n'existe pas sur le serveur, vous pouvez le créer avec : mkdir ~/.ssh.
Si votre hôte est sous Linux et que vous avez bien suivi les instructions de simplification de la connexion ci-dessus, vous pouvez obtenir le même résultat avec la commande :
# @host
ssh-copy-id -i ~/.ssh/cle_tp_admx serveur
Configuration du serveur Debian
Exemple de fichier /etc/apt/sources.list (ce fichier est déprécié au profit de fichier « sources » au format deb822 placés dans le dossier /etc/apt/sources.list.d):
# Official repos
deb http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware
deb http://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
👉 Les dépots de logiciels peuvent être parcouru manuellement en entrant leurs adresses dans un navigateur (ou dans un client ftp pour les dépots utilisant se protocole). Exemple, pour parcourir le dépot Debian français officiel : http://ftp.fr.debian.org/debian/.
Le dossier /etc/apt/sources.list.d peut contenir deux types de fichier.
- Des fichiers "list" au format historique :
# Fichier : /etc/apt/sources.list.d/deb-multimedia.list
deb [signed-by=/usr/share/keyrings/deb-multimedia-keyring.pgp] https://www.deb-multimedia.org trixie main non-free
- Des fichiers "sources" dans le nouveau format deb822
# Fichier : /etc/apt/sources.list.d/deb-multimedia.sources
Types: deb
Enabled: yes
URIs: https://www.deb-multimedia.org
Suites: trixie
Components: main non-free
Signed-By: /usr/share/keyrings/deb-multimedia-keyring.pgp
Ainsi, les dépôts officiels Debian du fichier /etc/apt/sources.list peuvent-êtres commentés ou supprimés puis remplacés par un fichier au format deb822 qui s'écrira ainsi :
# Fichier : /etc/apt/sources.list.d/debian.sources
Types: deb
Enabled: yes
URIs: http://ftp.de.debian.org/debian/
http://deb.debian.org/debian/
Suites: trixie trixie-updates trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
Enabled: yes
URIs: http://security.debian.org/debian-security
http://ftp.de.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
👉 Dans ce dernier exemple, vous noterez qu'avec le format deb822, il est possible d'indiquer plusieurs adresses de dépôts différentes proposant les mêmes collections de paquets. On parle alors de dépôts « mirroir ».
Partage de connexion avec le client Ubuntu
Lorsqu'un ordinateur doit partager la connexion disponible sur l'une de ces interfaces réseau (ou carte) avec d'autres ordinateurs reliés à lui via une deuxième interface (ou plus), il faut activer une option du noyau Linux : l'IP Forwarding.
# @server
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Contrôler que la valeur 1 à bien remplacer la valeur 0 dans le fichier /proc/sys/net/ipv4/ip_forward en saisisant la commande de relecture suivante qui doit retourner la valeur 1 :
# @server
cat /proc/sys/net/ipv4/ip_forward
1
Pour activer « l'IP forward » à chaque démarrage du serveur sans intervention de votre part, il faut modifier le fichier /etc/sysctl.conf via le dossier de sous-configuration /etc/sysctl.d dans lequel nous allons créer le fichier suivant :
# @server
sudo vi /etc/sysctl.d/perso.conf
# Autorise les paquets à traverser le système
net.ipv4.ip_forward=1
# Si besoin :
# désactivation de ipv6 pour toutes les interfaces
#net.ipv6.conf.all.disable_ipv6 = 1
# désactivation de l’auto configuration pour toutes les interfaces
#net.ipv6.conf.all.autoconf = 0
# désactivation de ipv6 pour les nouvelles interfaces (ex:si ajout de carte réseau)
#net.ipv6.conf.default.disable_ipv6 = 1
# désactivation de l’auto configuration pour les nouvelles interfaces
#net.ipv6.conf.default.autoconf = 0
Ces actions qui transforment le serveur en passerelle seraient suffisantes si l'ensemble des interfaces réseaux en jeux étaient configurées avec des adresses IP publiques et qu'une table de routage adéquate était en place... Mais ce n'est pas le cas ici.
Translation d'adresse
Le client Ubuntu ne pouvant pas accéder à une adresse IP public, nous allons attribuer à la deuxième carte réseau du serveur Debian (celle en réseau interne : intnet) ainsi qu'à celle du client Ubuntu, des adresses IP privées. Celle du serveur sera fixée dans /etc/network/interfaces, celle du client sera allouée par le serveur via le protocole DHCP.
Dans ce cas, pour que le partage fonctionne, il faut mettre en oeuvre la translation d'adresse dans la pile réseau du noyau Linux du serveur qui est piloté par la commande : iptables :
# @server
sudo apt install iptables
sudo iptables -t nat -A POSTROUTING -o nic0 -j MASQUERADE
Cette ligne indique que tout les paquets qui transitent et sortent par l'interface réseau nic0 du serveur doivent être masqués (avec l'adresse IP publique de l'interface nic0).
Pour sauvegarder l'état des règles iptables, installer le paquet iptables-persistent :
# @server
sudo apt install iptables-persistent
Répondre oui au deux questions.
Construction d'un réseau privé
⚠️ N'utilisez pas le vi basic fourni avec beaucoup de distribution (son ergonomie est déroutante pour les débutants) préférez lui la version améliorer vim en suivant les consignes de la page d'aide dédié.
Pour ne pas avoir à saisir les commandes de partages et de NAT (Network Address Translation) à chaque redémarrage, nous allons automatiser leurs exécutions dans le fichier de configuration des interfaces réseaux et en profiter pour inscrire dans le marbre la configuration statique de la deuxième interface réseau du serveur :
# @server
sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug nic0
iface nic0 inet dhcp
# This is an autoconfigured IPv6 interface
#iface nic0 inet6 auto
allow-hotplug nic1
iface nic1 inet static
address 10.0.0.254
netmask 255.255.255.0
# post-up echo 1 > /proc/sys/net/ipv4/ip_forward
# post-up iptables -t nat -A POSTROUTING -o nic0 -j MASQUERADE
Les deux dernières lignes ont été commentées. Elles sont concervées pour mémoire, afin de présenter comment ajouter des actions après l'activation d'une carte réseau. Ici, la première ligne à été rendu obsolète après la modification du fichier /etc/sysctl.conf et la deuxième par l'installation du paquet iptables-persistent (dans les deux cas, voir plus haut).
Pour activer la deuxième interface réseau une fois configurée, vous pouvez utiliser la commande :
# @server
sudo ifup nic1
👉 la commande ifdown permet de déconfigurer une interface réseau
Masqueradequoi ?
Ci-dessus, nous avons indiqué dans le fichier de configuration des interfaces réseaux qu'il falait, lorsque la deuxième carte réseau était activée, masquer l'adresse IP des paquets sortant par la première interface (nic0).
Pour cela, la commande iptables a été appelé.
- -t nat indique que l'on souhaite manipuler la table de « Network Adresse Translation »
- -A POSTROUTING indique que l'on souhaite Ajouter une règle à la chaine POSTROUTING (après le routage)
- -o nic0 indique que cela concerne la sortie de la première interface réseau
- -j MASQUERADE indique qu'il s'agit de masquer l'adresse IP d'origine
Pour vérifier que tout c'est bien passer, vous pouvez demander à iptables d'afficher les règles de « nat » active :
# @server
sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
La dernière ligne, indique que le « masquage » est bien en place pour toutes les sources et vers toutes les destinations.
👉 Si tous c'est bien passé, éteindre la VM et faire un nouveau snapshot (le premier peut être supprimer)
>>> Vous pouvez passer à l'installation du service DHCP
