Configuration du serveur

Introduction

Nous allons maintenant voir, à travers différentes étapes, comment configurer une machine pour en faire un serveur web.

Il existe de nombreux paramétrages possibles, notamment pour la configuration des services web (Apache, Nginx), qui comportent un nombre impressionnant de directives. Il est impossible de tout voir ; nous ferons en sorte de faire les choix qui nous paraissent les plus pertinents par rapport à nos besoins.

Modifier les sources de dépôts

Cette étape est optionnelle si vous avez souscrit à un serveur VPS.

1. Retirer la source DVD

Par défaut, le DVD ou l’ISO d’installation est toujours pris en compte par APT pour effectuer les mises à jour. Or, d’une part, cela ne sert à rien et, surtout, ce support, qui a servi pendant l’installation, est déconnecté de la machine. À chaque recherche de mises à jour, cela générera une erreur comme celle-ci et empêchera APT d’obtenir de nouvelles mises à jour :

images/08RI01.png

Pour corriger ce problème, il suffit de supprimer ou de commenter la ligne concernée dans le fichier /etc/apt/sources.list :

root@mysrv:~# nano /etc/apt/sources.list 
# deb cdrom:[Debian GNU/Linux 12.12.0 _Bookworm_ - Official [...]  

2. Contrôle des autres sources

Avant de pouvoir effectuer des mises à jour, assurons-nous que toutes les sources nécessaires sont présentes.

root@mysrv:~# cat /etc/apt/sources.list  
images/08RI02.png

Nous constatons que le dépôt des mises à jour des paquets, ainsi que celui des mises à jour de sécurité, sont commentés, ce qui n’est pas normal.

Avec une telle configuration, il est impossible pour le système de trouver des mises à jour :

images/08RI03.png

Rappel du chapitre Les usages avancés, section Gestion des paquets - Les dépôts :...

Utilisateur non root

1. Ajout au groupe sudo

Configurons l’utilisateur non root, car c’est avec celui-ci que nous allons administrer la machine. Pour qu’il puisse le faire, il suffit de l’ajouter au groupe sudo :

root@mysrv:~# adduser alex sudo 
Ajout de l'utilisateur alex au groupe sudo... 
Fait.  

Installons ensuite la commande sudo :

root@mysrv:~# apt update 
root@mysrv:~# apt install sudo  

Quittons la session root, puis connectons-nous avec notre utilisateur et vérifions qu’il appartient bien au groupe sudo :

root@mysrv:~# exit  
images/08RI06.png

C’est bien le cas.

Effectuons une action d’administration pour tester le bon fonctionnement de cet accès :

images/08RI07.png

L’utilisateur est désormais fonctionnel pour les actions d’administration.

2. Personnalisation de nano

Comme nous l’avons vu au chapitre Utiliser Linux via un terminal, section L’éditeur de texte nano - Personnalisation, nous allons personnaliser nano pour que son interface soit plus lisible.

 Copiez le fichier de configuration par défaut de nano dans votre répertoire personnel :

alex@mysrv:~$ cp /etc/nanorc .nanorc  

 Éditez-le comme suit :

alex@mysrv:~$ nano .nanorc 
set autoindent 
set linenumbers 
set tabsize 4 
set tabstospaces 
set unix  

 Activez cette configuration personnalisée :

alex@mysrv:~$ sudo ln -s ~/.nanorc /root/.nanorc ...

Passage en IP fixe

Cette étape est optionnelle si vous avez souscrit à un serveur VPS ou si vous souhaitez rendre accessibles sur Internet les sites hébergés sur votre serveur local via votre routeur. Dans ce dernier cas, on se tournera plutôt vers une réservation d’IP via le routeur ; voir la section Mise en ligne des sites hébergés localement de ce chapitre.

Comme expliqué au chapitre Les usages avancés, section Gestion du réseau - Passage en IP fixe, un serveur doit avoir une adresse IP fixe, ou statique, afin d’être sûr que les clients puissent s’adresser à lui en permanence.

Si vous utilisez une machine virtuelle, il faudra vous assurer qu’elle dispose d’une interface réseau configurée en accès par pont et non en NAT afin que le serveur puisse recevoir une adresse IP propre plutôt que de partager l’adresse IP de la machine hôte. Nous avons déjà réalisé cette étape lors de l’installation.

1. IP de base

Nous pouvons noter l’IP qui nous a été attribuée dynamiquement par le DHCP sur notre interface réseau principale :

images/08RI08.png

Nous voyons qu’il s’agit de l’adresse 192.168.1.14/24.

On pourrait éventuellement prendre cette IP, qui nous a déjà été attribuée, car nous savons qu’à...

Service SSH

Jusqu’à présent, nous avons effectué les opérations directement sur le serveur. Ne préféreriez-vous pas y accéder depuis votre PC personnel ? Comme nous l’avons vu précédemment, c’est possible grâce à SSH !

SSH est normalement déjà présent sur notre machine, car nous avons coché l’option d’installation de ce service au chapitre précédent. Si vous avez souscrit à un serveur VPS, il doit normalement être déjà installé par défaut.

Si le service SSH n’est pas présent sur le système, référez-vous au chapitre Les usages avancés, section Connexion à distance, connectivité et transfert de données - ssh, qui présente également son fonctionnement et les modalités détaillées de sa mise en place, que nous ne reverrons pas ici.

Connectivité par nom d’hôte

Faisons en sorte d’appeler le serveur par son nom d’hôte plutôt que par son adresse IP. Rappelons que l’opération est à effectuer depuis le PC client qui accédera au serveur à distance, votre PC personnel par exemple :

alex@y510p:~$ sudo nano /etc/hosts 
192.168.1.54 mysrv  

Testons le bon fonctionnement de ping via le nom de la machine :

images/08RI09.png

Test...

Service web Apache

Nous voilà enfin à l’étape où notre serveur devient un serveur web. Nous présentons ici le service web Apache ; nous présenterons plus tard le service web Nginx. Ces services se gèrent avec systemd.

1. Installation

Apache est le paquet retenu par tasksel lorsqu’il vous a proposé d’installer serveur web pendant l’installation du système au chapitre précédent (Configuration du serveur). Si vous n’avez pas coché cette option, vous pourrez installer Apache maintenant comme suit :

alex@mysrv:~$ sudo apt update 
alex@mysrv:~$ sudo apt install apache2 apache2-doc  

Puis on le démarre comme suit :

alex@mysrv:~$ sudo systemctl start apache2.service  

Enfin, on active sa persistance :

alex@mysrv:~$ sudo systemctl enable apache2.service  

Vérifions que le service est bien lancé et persistant en consultant son statut :

images/08RI13.png

Testons l’accès à la page par défaut d’Apache depuis le navigateur web du client, en allant sur http://mysrv :

images/08RI14.png

Toutes ces informations nous montrent que l’installation d’Apache est un succès. Nous allons maintenant pouvoir le configurer pour qu’il héberge nos sites.

2. Fonctionnement

Notez bien que, dès qu’on modifie la configuration d’Apache, il est préférable de la tester :

sudo apachectl -t  

Puis, il faut redémarrer ou recharger le service pour que la modification soit bien prise en compte :

sudo systemctl restart apache2.service  

Ou

sudo systemctl reload apache2.service 

Propriétaire et groupe propriétaire

www-data est l’utilisateur système et le groupe du service Apache. Pour qu’Apache puisse faire tourner vos sites web, le groupe www-data doit avoir, au minimum, le droit de lecture sur le code source et les droits de lecture et d’exécution sur les répertoires contenant ce code. En revanche, il n’est pas nécessaire que l’utilisateur www-data soit propriétaire du code source : on laissera cette propriété à l’utilisateur qui maintiendra ce code.

Les modules

Apache dispose de modules qui permettent d’étendre ses fonctionnalités par défaut.

Activation :

a2enmod <module>  

Désactivation :

a2dismod <module>  

Pour...

Service web Nginx

Si vous souhaitez utiliser Nginx au lieu d’Apache, suivez ces quelques étapes.

Il est possible d’utiliser Nginx en concurrence avec Apache, à condition qu’ils n’utilisent pas les mêmes ports réseau (non expliqué dans cet ouvrage).

1. Nettoyage

Arrêtez et désactivez le service Apache s’il est présent sur votre système :

alex@mysrv:~$ sudo systemctl stop apache2.service 
alex@mysrv:~$ sudo systemctl disable apache2.service  

2. Installation

alex@mysrv:~$ sudo apt update 
alex@mysrv:~$ sudo apt install nginx  

Puis démarrez-le comme suit :

alex@mysrv:~$ sudo systemctl start nginx.service  

Enfin, activez sa persistance :

alex@mysrv:~$ sudo systemctl enable nginx.service  

Pour obtenir la dernière version de Nginx, il faudra nécessairement passer par le dépôt de Nginx et non par celui de Debian.

3. Fonctionnement

Nginx fonctionne de manière relativement similaire à Apache. Aussi, dès qu’on modifie sa configuration, il est préférable de la tester avant de redémarrer ou de recharger le service pour que la modification soit bien prise en compte :

sudo nginx -t  

Puis :

sudo systemctl restart nginx.service  

Ou

sudo systemctl reload nginx.service  

Propriétaire et groupe propriétaire

www-data est l’utilisateur système et le groupe...

Base de données

Ces étapes sont facultatives si vous n’utilisez pas de base de données SQL avec vos sites web.

Dans cette partie, nous allons voir comment utiliser MariaDB.

Facultatif : il est aussi possible d’installer le paquet phpmyadmin, qui fournit une interface web pour administrer les bases de données. Si vous êtes à l’aise avec le terminal, ce n’est pas utile (non présenté dans cet ouvrage).

1. Installation

alex@mysrv:~$ sudo apt update 
alex@mysrv:~$ sudo apt install mariadb-server  

2. Manipulation de MariaDB

Nous allons créer un utilisateur dans MariaDB, puis une base de données pour le futur site WordPress.

Ouvrir un shell MariaDB

alex@mysrv:~$ sudo mariadb  

Ajouter un utilisateur wp_user_1

CREATE USER 'wp_user_1'@'localhost' IDENTIFIED BY 'password';  

Créer une base de données testdb

CREATE DATABASE testdb;  

Permettre à l’utilisateur d’administrer cette base

GRANT ALL ON testdb.* TO 'wp_user_1'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 
exit;  

Nous avons utilisé le mot de passe password pour l’exemple. Ce n’est pas sécurisé ; voir la section Politique de sécurité des comptes - Gestion des mots de passe du chapitre Sensibilisation et durcissement pour plus...

Langage de programmation

Ces étapes sont facultatives si vous souhaitez héberger des sites web statiques, en HTML pur par exemple, qui ne comporteront donc aucun code exécutable stocké sur le serveur.

Dans cette section, nous allons voir comment utiliser PHP, nécessaire pour faire fonctionner le site WordPress que nous allons mettre en place.

Il existe différentes versions de PHP maintenues. Gardez bien en tête que plus une version est ancienne, plus sa date de fin de support est proche ; ce principe ne vaut pas uniquement pour PHP. Voir cette page pour plus de détails : https://www.php.net/supported-versions.php

1. Installation

Nous allons installer la dernière version de PHP disponible dans les dépôts de Debian 12, soit la version 8.2 au moment où ces lignes sont écrites — ce n’est donc pas la toute dernière version stable —, ainsi que PHP pour MySQL/MariaDB et PHP pour Apache ou Nginx.

alex@mysrv:~$ sudo apt install php8.2 php8.2-mysql  

Ces paquets sont déjà installés si vous avez installé phpmyadmin.

2. Mise en place pour Apache

alex@mysrv:~$ sudo apt install libapache2-mod-php8.2  

Si ce n’est pas déjà fait, il faudra ensuite activer le module PHP pour Apache :

alex@mysrv:~$ sudo a2enmod php8.2  

Les sites qui ont besoin de PHP l’utiliseront automatiquement, sans autre intervention.

La configuration...

Mise en place d’autres sites

Comme nous l’avons laissé entendre, il est tout à fait possible de gérer plusieurs sites à la fois sur un même serveur. En effet, grâce aux vhosts, nous pouvons avoir plusieurs sites actifs simultanément sur un même port réseau du système.

Il suffit de réitérer les opérations vues précédemment :

  • créer le répertoire pour le site web ;

  • créer ou importer le code source dans le sous-répertoire html ;

  • créer le fichier de configuration vhost pour Apache ou Nginx ;

  • activer le nouveau site ;

  • redémarrer ou recharger Apache ou Nginx ;

  • côté client :

  • ajouter une ligne dans /etc/hosts ;

  • tester le bon fonctionnement via un navigateur web.

Nous allons voir ici des exemples successifs de différents sites que notre serveur va héberger.

1. WordPress de zéro

Nous allons voir ici le cas d’une installation de WordPress.

Il suffit de télécharger WordPress depuis le site officiel (https://fr.wordpress.org/download/), puis de l’installer sur le serveur.

Rappel des prérequis de WordPress au moment où ces lignes sont écrites :

  • PHP >= 7.2.24

  • MySQL >= 5.5.5 ou MariaDB >= 10.6

Télécharger et décompresser l’archive

alex@mysrv:~$ wget https://wordpress.org/latest.tar.gz 
alex@mysrv:~$ mkdir -p /var/www/site2/html/ 
alex@mysrv:~$ tar -xzvf latest.tar.gz 
-C /var/www/site2/html/ --strip-components=1  

Le contenu de l’archive doit maintenant se trouver dans /var/www/site2/html.

Installer PHP, MySQL ou MariaDB et créer une base de données dédiée

Nous avons déjà installé PHP et MariaDB et créé une base de données testdb pour ce site. Voir les sections précédentes.

Apache

Créer un fichier de configuration vhost

alex@mysrv:~$ sudo nano /etc/apache2/sites-available/site2.conf 
<VirtualHost *:80> 
  ServerName site2.host 
  DocumentRoot /var/www/site2/html/ 
  ErrorLog /var/log/apache2/site2_error.log 
  CustomLog /var/log/apache2/site2_access.log combined 
  <Directory /var/www/site2> 
     Options -Indexes +FollowSymLinks 
     AllowOverride All ...

Mise en ligne des sites hébergés localement

Avant d’effectuer les manipulations de cette section, nous vous recommandons de suivre les préconisations de sécurité du chapitre Sensibilisation et durcissement.

Nous allons réserver l’IP du serveur au moyen d’un bail DHCP statique, puis effectuer une redirection des ports 80 et 443 (port forwarding), le tout via le routeur, c’est-à-dire la box.

Si votre routeur est votre smartphone, il est peu probable que vous puissiez faire du port forwarding. La seule solution pour mettre des sites en ligne, à notre connaissance, sera alors de louer un serveur VPS.

1. Sans DNS

Jusqu’à présent, nous avons vu comment héberger des sites non exposés sur Internet, donc en local ; on peut parler d’intranet. Dans ce cas précis, vous pouvez techniquement choisir le nom de domaine que vous voulez.

Voyons maintenant comment rendre vos sites accessibles depuis Internet.

Prérequis

Outre le fait de disposer d’un routeur permettant le port forwarding afin de rediriger les requêtes reçues sur les ports 80 et 443 du routeur vers le serveur, il faudra :

1. Obtenir son adresse IP publique : elle peut être consultée sur whatismyip.com ou obtenue avec la ligne de commande suivante :

curl https://ipinfo.io/ip ; echo  

2. Connaître l’adresse IP privée du serveur : 192.168.1.54.

3. Réactiver le DHCP sur le serveur (nécessaire pour faire la réservation DHCP statique via le routeur). Cette manipulation doit être effectuée directement sur celui-ci, car la connexion SSH sera coupée dès que l’interface réseau sera arrêtée :

Nous arrêtons l’interface :

alex@mysrv:~$ sudo ifdown enp0s3  

Nous modifions le fichier de configuration des interfaces :

alex@mysrv:~$ sudo nano /etc/network/interfaces 
allow-hotplug enp0s3 
iface enp0s3 inet dhcp 
auto enp0s3  

Nous redémarrons l’interface :

alex@mysrv:~$ sudo ifup enp0s3  

L’IP ne sera peut-être plus la même ; ce n’est pas grave, car nous allons la spécifier dans les paramètres des baux DHCP de la box.

Vérifiez bien que votre interface est active avec une seule IP attribuée. Si elle n’est pas active, si vous n’avez pas d’IP...

Mise en ligne des sites sur VPS

Si vous avez choisi de passer directement par un fournisseur de VPS, les étapes à suivre pour utiliser un nom de domaine sont les mêmes que celles présentées dans la section précédente Mise en ligne des sites hébergés localement - Avec un nom de domaine.

Les certificats TLS

Pour sécuriser la connexion à vos sites et améliorer leur niveau de confiance, vous devez mettre en place un ou plusieurs certificats TLS.

1. Explication

Comme nous l’avons déjà évoqué au début de l’ouvrage, TLS permet de protéger les communications entre un client et un serveur en les chiffrant. Le certificat permet également au client de vérifier que le serveur présente bien un certificat valable pour le nom de domaine demandé. Les certificats TLS peuvent ainsi être comparés à des cartes d’identité numériques pour les sites web.

Un certificat est destiné à être présenté publiquement par le serveur. Il contient notamment l’identité du domaine, sa clé publique, sa période de validité et la signature numérique d’une autorité de certification (CA). Le domaine utilise sa propre paire de clés asymétriques, distincte de celle de l’autorité de certification. Lors de l’établissement d’une connexion TLS, le serveur prouve qu’il possède la clé privée associée au certificat. Le client vérifie ensuite la validité du certificat, la correspondance avec le nom de domaine et la chaîne de confiance jusqu’à une autorité reconnue.

Pour les clients, la validation repose sur une chaîne de confiance. Les navigateurs et les systèmes d’exploitation disposent d’un magasin d’autorités racines de confiance. Un certificat de serveur est accepté si sa chaîne de certification aboutit à l’une de ces autorités, sous réserve que le certificat soit valide et corresponde au domaine demandé. Il est déjà arrivé que des autorités publiques soient retirées des magasins de confiance à la suite d’incidents ou de manquements (affaires Symantec 2015 et 2016 ou encore WoSign 2017 par exemple). Par ailleurs, une autorité de certification ne doit jamais détenir la clé privée utilisée par le serveur pour son certificat, ce qui pourtant arrive parfois (affaire Trustico 2018).

Dans cette section, nous détaillerons la mise en place des certificats pour plusieurs cas d’usage...

Changer les serveurs DNS d’un domaine pour ceux d’un autre fournisseur

1. D’OVHcloud à Hostinger

Cette procédure diffère de celle présentée à la section Mise en ligne des sites hébergés localement - Avec un nom de domaine .

Prenons le cas d’un nom de domaine enregistré chez un fournisseur — par exemple fosslab.fr chez OVHcloud — que nous souhaitons utiliser avec un serveur VPS souscrit auprès d’un autre fournisseur, ici Hostinger.

Étape 1 - Ajouter le domaine dans Hostinger

Dans Hostinger, accédez aux paramètres du VPS, puis au gestionnaire du VPS, afin d’ajouter le nom de domaine :

images/08RI82.png

Hostinger indique alors les serveurs DNS à déclarer pour ce domaine chez OVHcloud :

images/08RI83.png

Étape 2 - Modifier les serveurs DNS du domaine chez OVHcloud

Dans OVHcloud, remplacez les serveurs DNS actuellement associés au domaine par ceux fournis par Hostinger :

images/08RI84.png
images/08RI85.png
images/08RI86.png

Les adresses IP associées aux serveurs DNS sont indiquées dans la documentation d’Hostinger. Elles ne sont pas nécessairement à renseigner dans l’interface d’OVHcloud.

La modification est alors en cours de traitement :

images/08RI87.png

Actualisez la page après quelques instants pour vérifier que la modification a bien été prise en compte :

images/08RI88.png

Étape 3 - Finaliser la connexion du domaine dans Hostinger

Cliquez sur Terminé...

Journaux

Comme nous l’avons déjà évoqué, les journaux sont indispensables pour surveiller l’activité des sites, diagnostiquer les anomalies et faciliter le débogage.

On distingue principalement les journaux d’accès des journaux d’erreurs :

  • accès : ils enregistrent les requêtes adressées aux sites et aux services web, ainsi que les réponses du serveur ;

  • erreurs : ils enregistrent les erreurs et les événements utiles au diagnostic des sites et des services web.

Par défaut, les journaux des sites web se trouvent dans les répertoires suivants :

  • /var/log/apache2/ pour Apache ;

  • /var/log/nginx/ pour Nginx.

Chaque requête adressée à un site peut laisser une trace dans ses fichiers journaux. Leur volume peut donc augmenter rapidement sur un site fréquenté.

Apache et Nginx disposent également de journaux globaux d’accès et d’erreurs, distincts des fichiers éventuellement définis pour chaque site.

Rotation

Apache et Nginx disposent, par défaut, de leur propre configuration logrotate. Les fichiers correspondants se trouvent dans le répertoire /etc/logrotate.d/ et peuvent être adaptés selon les besoins.

Les journaux placés dans les emplacements prévus par ces configurations sont donc normalement soumis à une rotation automatique.

Autre...