Last updated on 05/09/2023
PREREQUIS
VERSION & VALIDATION
Debian 9,10,11 Validé le 24/12/2020
Testé sur Debian 12 le : 05/09/2023 des erreurs ont été rencontrés
RaspBian Non-Testé le xx/xx/2021
PHP : Version 7 et 8
Status : Validé – (re) validé le 04/09/2023.
NIVEAU TUTORIEL :
Débutant
NIVEAU REQUIS :
Savoir lire
Connaître le concept de DNS (l’histoire avec les domaines)
Comprendre le concept de virtualhost
DURÉE D’EXÉCUTION
Lammers : 60 minutes
Novices : 30 minutes
Habitués de Linux: inférieur à 10 minutes (selon connexion internet)
Présentation
Ce tutoriel est destiné aux utilisateurs Linux pour les sytèmes suivants : Debian 9,10,11,12 & Raspbian.
Il sera expliquer ici, comment configurer Apache2. Depuis la version buster (Debian 10), veuillez vérifier que le chemin /usr/sbin est présent dans votre variable $PATH. Vous pourrez trouver plus d’informations sur cette ressource.
Introduction
Afin d’acquérir une méthode de travail correcte, il est recommandé d’effectuer tous les tutoriels proposés par BlackHat-Out sur des serveurs de tests. Il est évident que chaque système est différent, même si ces tutoriels sont mis en pratique sur plusieurs OS, nous avons rencontré différentes difficultés selon les systèmes. Toutes les manipulations proposées se feront en tant qu’administrateur et nous ne pourrons garantir ou être tenus responsables d’une quelconque manipulation rendant le système inopérant.
Le fichier « source.list » est le fichier de configuration indiquant au système d’exploitation où aller récupérer ses mises à jours.
Après la configuration du fichier « source.list » (via /etc/apt/source.list), effectuer les commandes ci-dessous :
$ su # apt update && apt upgrade -y
Explications des commandes
SU
La commande su permet de passer sur le compte administrateur « root ». Toutes les manipulations seront effectuées en tant qu’administrateur système.
APT UPDATE/UPGRADE
La commande apt update va permettre de rechercher toutes les mises à jours disponibles pour les paquets installés sur Linux.
La commande apt upgrade va permettre d’installer toutes les mises à jours disponibles pour les paquets installés sur Linux.
La commande apt update && upgrade -y permet de concaténer les commandes de recherches et d’installations des mises à jours. L’argument -y permet d’indiquer qu’on approuve bien l’installation.
APACHE
Préparation d’apache
Dernière maj : 27/12/2020 à 15h23
Les commandes citées ci-dessous vous permettront d’installer et configurer apache.
# apt install apache2 # mkdir /var/www/nom_du_virtualhost_a_configurer # chown -R www-data:www-data /var/www/nom_du_virtualhost_a_configurer # ls -lath /var/www/ # cd /etc/apache2/sites-available/ # a2dissite 000-default.conf # nano nom_virtualhost.conf (on fait la combinaison de touche "ctrl+O" on fait "entrer" puis "ctrl+x") # a2enmod ssl # a2enmod headers # systemctl restart apache2
Si on prévoit de faire de l’HTTPS avec un certificat auto-signé on rajoute les 2 commandes ci-dessous:
# mkdir /var/log/apache2/nom_du_virtualhost # mkdir /etc/ssl/nom_du_virtualhost
Explications des commandes
APT INSTALL
– La commande apt install [package] permet de lancer l’installation du paquet demandé sur debian.
MKDIR
– La commande mkdir permet la création d’un dossier. Ici le dossier du « nom_du_virtualhost_a_configurer » sera crée et accessible via le chemin indiqué « /var/www/ »
CHOWN
– La commande chown permet de changer le propriétaire d’un dossier.
– L’argument chown -R permet d’indiquer la récursivité de la commande, de manière à ce que tous les sous-dossiers appartiennent au propriétaire du dossier parent.
– L’argument www-data:www-data est le nom du nouveau propriétaire du dossier. www-data est l’utilisateur par défaut utilisé par les serveurs web.
LS -LATH
– La commande ls -lath est la commande ls suivi des options l, a, t, h qui ont la signification suivante :
• l = permet d’afficher une liste détaillée des caractéristiques de chaque fichier du répertoire (aide pour voir les droits du fichier).
• a = permet d’afficher tous les fichiers et dossiers d’un répertoire, y compris ceux qui sont cachés (ceux qui commencent par un point « . »).
• t = permet de trier le contenu des répertoires en fonction de la date et non par ordre alphabétique. Les fichiers les plus récents sont présentés en premier.
• h = s’utilise de pair avec l comme suit : ls -lh afin d’obtenir les informations de poids d’occupation en plus lisible pour un humain plutôt qu’en octet (d’où -h pour human readable, c’est à dire lisible pour un humain). Avec cette option ls va adapter son affichage en utilisant l’unité la plus adaptée.
Dans notre contexte, la commande ls -lath sur le répertoire /var/www/ va nous permettre de bien confirmer la présence de « www-data:www-data » comme propriétaire du dossier « nom_du_virtualhost_a_configurer »
NANO
– La commande nano permet d’accéder à l’éditeur de texte nano présent sur débian. Cette même commande suivi du nom d’un fichier comme nano xxx.conf permet d’ouvrir en mode edition le fichier xxx.conf.
Dans le cas où le fichier xxx.conf n’existerait pas, il sera automatiquement créé.
– La combinaison de touche ctrl+O dans nano permet d’enregistrer sous le fichier nouvellement créé.
– La combinaison de touche ctrl+X dans nano permet de quitter l’éditeur de texte. Si aucun enregistrement n’a été effectué avant, il sera automatiquement demandé une confirmation de sauvegarde.
LES COMMANDES APACHES
– La commande apachectl permet d’appeler un suite de commande afin de démarrer, stopper, recharger le service apache ou vérifier la bonne syntaxe des fichiers de configuration du service.
– L’argument configtest permet de vérifier que tous les fichiers de configurations soient bien paramétrés.
– La commande a2ensite (= apache2 enable site) permet d’activer les fichiers de configurations des virtualhosts.
– La commande a2dissite (= apache2 disable site) permet de désactiver les fichiers de configurations des virtualhosts.
– La commande a2enmod (= apache2 enable module) permet d’activer les modules d’apache. Ici le module ssl et headers ont été activés.
– La commande a2dismod (= apache2 disable module) permet de désactiver les modules d’apache.
SYSTEMCTL
– La commande systemctl permet de gérer les états des services disponibles sur débian ou raspbian (aussi compatible sur la plupart des distributions linux). Pour l’utiliser il faut indiquer comme premier argument l’action voulu [start/restart/stop/reload] puis le service ciblé [apache2]. L’argument reload permet de recharger le fichier de configuration du serveur sur lequel le système se base pour gérer le service.
VirtualHost
Configuration du virtualhost
Les commandes ci-dessous vont vous permettre de configurer votre virtualhost. Le virtualhost correspond au comportement du serveur web lors de l’accès à votre site web.
# nano /etc/apache2/sites-available/nom_virtualhost.conf
(Il faut copier/coller les lignes ci-dessous dans votre fichiers de configuration)
<VirtualHost *:80> ServerName [votre nom de domaine ou nom DNS] ServerAlias [votre alias] ServerAdmin [mail de contact] DocumentRoot /var/www/[nom_du_virtualhost_a_configurer] # RewriteEngine On # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} #--GESTION DES DROITS--# <Directory /var/www/[nom_du_virtualhost_a_configurer]/> Options -Indexes Require all granted </Directory> #--GESTION ERREURS--# # ErrorDocument 404 /erreur.html #--GESTION LOGS--# ErrorLog /var/log/apache2/[nom_du_virtualhost]/error.log LogLevel warn CustomLog /var/log/apache2/[nom_du_virtualhost]/access.log combined </VirtualHost>
Explications des commandes
LA CONFIGURATION DU VH
On peut voir deux parties dans le virtualhost présentées ci-dessus.
La première partie est le comportement qu’aura le serveur lorsque qu’un client viendra le contacter par le port 80 (HTTP). Ainsi la deuxième partie (non présente à ce stade du tutoriel), sera le comportement qu’aura le serveur lorsque qu’un client le contactera par le port 443 (HTTPS).
Les virtualhosts sont encadrés par les balises suivantes <VirtualHost *:[N° PORT]> et </VirtualHost>.
Toutes les lignes précédées du caractère # constituent un commentaire au sein du fichier de configuration. Attention cependant, lorsqu’un commentaire est placé sur la même ligne qu’une instruction, des erreurs de syntaxe peuvent apparaîtres lors de l’éxecution de la commande apachectl configtest et ainsi empêcher le systemctl [restart/reload] apache2.
Dans la configuration actuelle, la partie du fichier gérant le comportement à avoir lorsqu’un client souhaite le contacter par le port 443 est actuellement inexistante. Dans le cas où nous n’avons pas encore généré de certificat auto signé ou « réel » (ici cad approuvé par une autorité de certification reconnue), il sera impossible de se connecter au site via le port 443 ; les navigateurs considéront la connexion comme dangereuse et empêcheront l’accès.
Pour adapter le fichier de configuration à vos besoins, il vous sera nécessaire de modifier toutes les valeurs entre crochets. exemple [votre alias], toutes les valeurs sont arbitraires, vous pouvez mettre ce que vous souhaitez dans la mesure du raisonnable. Les valeurs doivent correspondres à vos besoins et à ce que vous avez défini dans la partie « Préparation d’apache »
Par la suite nous allons vérifier la bonne syntaxe de notre virtualhost puis l’activer.
# apachectl configtest # cd /etc/apache2/sites-available/ # a2ensite nom_virtualhost.conf # apachectl restart
explications du fichier de configuration à venir….
PHP
Préparer PHP pour Apache
Dernière maj : 27/12/2020 à 14h47
Les commandes citées ci-dessous vous permettront d’installer et configurer PHP pour apache. Généralement, on peut choisir la version php en changeant « 8.0 » par la version voulu exemple : « 7.4 ».
# apt -y install lsb-release apt-transport-https ca-certificates # wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg # echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php8.list # apt update && apt upgrade -y # apt install libapache2-mod-php8.0 php8.0 php8.0-xml php8.0-curl php8.0-gd php8.0 php8.0-cgi php8.0-cli php8.0-zip php8.0-bcmath php8.0-gmp php8.0-mysql php8.0-mbstring php8.0-intl php8.0-imagick php8.0-gd -y
# nano /etc/php/8.0/apache2/php.ini
Fichier de conf php.ini CTRL+W pour effectuer une recherche Ajoutez/Modifiez les valeurs suivantes:
[...] memory_limit = 512M upload_max_filesize = 15G max_execution_time = 360 post_max_size = 200M output_buffering = Off date.timezone = Europe/Paris [...] cltr+o ctrl+x
Explications des commandes
?? D: ??
– Ici on vient modifier des valeurs du fichier de configuration php si vous avez des infos à nous passer n’hésitez pas : contact@blackhat-out.fr.
HTTPS
HTTPS (sans domaine internet)
Dernière maj : 05/06/2021 à 20h24
Les commandes citées ci-dessous vous permettront de créer et configurer manuellement l’HTTPS.
#openssl genrsa -out /etc/ssl/[nom_du_virtualhost]/[nom_de_la_clef].key 4096 #openssl req -new -x509 -key /etc/ssl/[nom_du_virtualhost]/[nom_de_la_clef].key -subj "/CN=[Nom afficher sur le certificat]" -out /etc/ssl/[nom_virtualhost]/[nom_de_la_clef].pem
Une fois le certificat généré, on va pouvoir modifier le virtualhost en conséquence. Dans la configuration ci-dessous, nous allons forcer le passage sur le port 443 et indiquer où sont situés les certificats :
# nano /etc/apache2/sites-available/nom_virtualhost.conf
<VirtualHost *:80>
#################
# ACCES AU SITE #
#################
ServerName localhost
ServerAlias [votre_nom]
ServerAdmin xxxxx@xxx.yy
DocumentRoot /var/www/nom_du_virtualhost_a_configurer
RewriteEngine On
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
##############
# CONF BASIC #
##############
#--GESTION DES DROITS--#
<Directory /var/www/nom_du_virtualhost_a_configurer>
Options -Indexes
Require all granted
</Directory>
#--GESTION ERREURS--#
ErrorDocument 404 /erreur.html
#--LOGS--#
ErrorLog /var/log/apache2/[nom_virtualhost]/errors.log
LogLevel warn
CustomLog /var/log/apache2/[nom_virtualhost]/acces.log combined
</VirtualHost>
<VirtualHost *:443>
#################
# ACCES AU SITE #
#################
ServerName localhost
ServerAlias [votre_nom]
ServerAdmin contact@blackhat-out.fr
DocumentRoot /var/www/[nom_du_virtualhost]
RewriteEngine On
# Redirect all requests to GLPI router, unless file exists.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
##############
# CONF BASIC #
##############
#--GESTION DES DROITS--#
<Directory /var/www/[nom_du_virtualhost]/>
Options -Indexes
Require all granted
</Directory>
#--GESTION ERREURS--#
ErrorDocument 404 /erreur.html
#--LOGS--#
ErrorLog /var/log/apache2/[virtualhost]/errors.log
LogLevel warn
CustomLog /var/log/apache2/[virtualhost]/acces.log combined
##############
# CONF HTTPS #
##############
SSLEngine on
SSLCertificateFile /etc/ssl/[virtualhost]/[nom_de_la_clef].pem
SSLCertificateKeyFile /etc/ssl/[virtualhost]/[nom_de_la_clef].key
</VirtualHost>
Explications des commandes
Dans cette partie du tuto, il s’agit de dupliquer la configuration du VirtualHost (vHost) du port 80, vers le port 443 en rajoutant les certificats SSL à la fin du vHost du 443 et la redirection http vers https sur le vHost du 80.
HTTPS (avec domaine)
Dernière maj : 23/12/2020 à 21h30
####
Les commandes citées ci-dessous vous permettront de créer et configurer automatiquement l’HTTPS. Il est possible que la façon dont est écrit le fichier de configuration du virtual host (pour rappel xxx.conf) puisse générer une erreur « Could not reverse map the HTTPS VirtualHost to the original » ; dans ce cas, retournez editer le virtualhost et supprimez toutes les lignes commentées. Vérifier aussi l’absence de tabulation/d’espace à la fin des lignes non-commentées. Vérifiez par la même occasion que vous n’ayez pas un mélange de tabulations et d’espaces sur la même ligne.
Si le problème persiste appuyez-vous sur cette ressource (en). N’oubliez pas de stoper/redemarrer le service apache2 et de désactiver/activer votre virtualhost après chaque manipulation sur le virtualhost lors du traitement de cette erreur.
####
Nous vous proposons 2 methodes pour installer certbot, en cas de problème n’hésitez pas à vous appuyez sur le site officiel.
METHODE A
# apt install snapd # snap install core; sudo snap refresh core # snap install --classic certbot # ln -s /snap/bin/certbot /usr/bin/certbot # certbot --apache
METHODE B
La ligne 1, avec la commande ‘mv’ est uniquement à effectuer sur un raspbian
# mv /etc/pip.conf /etc/pip.conf.backup # mkdir /certbot # cd /certbot # wget https://dl.eff.org/certbot-auto # chmod a+x certbot-auto # ./certbot-auto # ./certbot-auto --apache (ou --nginx) ./Selectionnez le numéro du site ./Selectionner le numéro 2 ./Saisissez les commandes suivantes # ./certbot-auto renew -dry-run # nano crontab -e */12 * * * * /CHEMIN/VERS/certbot-auto renew –quiet –no-self-upgrade
ctrl+o ctrl+x
Explications des commandes
CD
– La commande cd permet de se déplacer au sein de l’arborescence Linux. Ici, on indique qu’on souhaite se déplacer dans le dossier certbot à la racine du système débian.
WGET
– La commande wget permet de télécharger un paquet directement via un lien web (URL).
CHMOD A+X
– La commande chmod a+x certbot-auto permet de rendre exécutable un script.
3 DERNIERES LIGNES
– Les 3 dernières lignes permettent le renouvellement automatique du certificat SSL.
HSTS (Facultatif)
Dernière maj : 23/12/2020 à 21h53
Le HTTP Strict Transport Security, ou HSTS, est un en-tête de réponse qui permet de forcer les navigateurs à utiliser le HTTPS pour toutes les requêtes ultérieures qu’ils envoient à un serveur.
# nano /etc/apache2/sites-available/nom_du_virtualhost-ssl.conf
Ajoutez les lignes suivantes juste au dessus du </VirtualHost>
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" </IfModule>
SÉCURISER
Sécuriser un minimum son serveur web
Dernière maj : 27/11/2020 à 15h12
L’objectif est d’activer le pare-feu nativement présent et de ne laisser ouvert que les ports dont l’HTTP, l’HTTPS et SSH ont besoin.
# apt-get install ufw -y # ufw allow 80 # ufw allow 443 # ufw allow 22 # ufw enable # nano /etc/apache2/conf-available/security.conf
Fichier de conf security.conf ; Ajoutez/Modifez les lignes suivantes
[...]
ServerSignature Off
#ServerSignature On
[...] (ctrl+o + ctrl+x)
On redémarre apache pour finaliser et appliquer toutes les modifications:
# systemctl restart apache2
Explications des commandes
UFW
– La commande ufw est la façon simplifier de gérer NetFilter. NetFilter est le pare-feu Linux généralement géré via son « interface graphique » nommée iptable.
– Ici, on autorise l’accès aux ports 80, 443, 22 puis on active les règles avec l’argument enable.
FIN DU TUTORIEL
Ce tutoriel se termine ici, pour toute question ou rectification, vous pouvez nous contacter par mail à contact@blackhat-out.fr.