Mise à jour : 05/01/2021 à 19h17
Debian 10 Validé le 24/12/2020
RaspBian Non-Testé le xx/xx/2021
PHP : Version 8
Débutant
Savoir lire
Connaître le concept de DNS (l'histoire avec les domaines)
Comprendre le concept de virtualhost
Lammers : 60 minutes
Novices : 30 minutes
Habitués de Linux: inférieur à 10 minutes (selon connexion internet)
Ce tutoriel est destiné aux utilisateurs Linux pour les sytèmes suivants : Debian 10 & Raspbian. Il sera expliquer ici, comment configurer Apache2. Si vous êtes sur un système 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.
Première étape, la mise à jour :
$su
#apt update && apt upgrade -y
La commande su permet de passer sur un compte administrateur. Partant du principe que vous avez des bases en informatique, toutes les manipulations seront effectuées en tant qu'administrateur système.
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.
Dernière maj du module : 27/12/2020 à 15h23
Les commandes citées ci-dessous vous permettront d'installer et configurer apache.
PS : Pour le tutoriel nextcloud ajouté la commande mkdir /var/www/data avant de faire le chown
#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/
#mkdir /var/log/apache2/nom_du_virtualhost
#mkdir /etc/ssl/nom_du_virtualhost
#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
- La commande apt install [package] permet de lancer l'installation du paquet demandé sur debian.
- 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/"
- 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.
- 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"
- 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.
- 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.
- 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.
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>
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....
Dernière maj du module : 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" (nécessaire pour le fonctionnement du tuto nextcloud).
#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
- 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.
Dernière maj du module : 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/nextcloud/[nom_de_la_clef].pem
#nano /etc/apache2/sites-available/nom_virtualhost.conf
On est dans le fichier du configuration du VirtualHost
Ajoutez/Modifiez les lignes manquantes
<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>
<VirtualHost *:443>
ServerName [votre nom de domaine ou nom DNS]
ServerAlias [votre alias]
ServerAdmin [mail de contact]
DocumentRoot /var/www/[nom_du_virtualhost_a_configurer]
#--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
#--GESTION HTTPS--#
SSLEngine on
SSLCertificateFile /etc/ssl/[nom_du_virtualhost]/[nom_clef_choisit].pem
SSLCertificateKeyFile /etc/ssl/[nom_du_virtualhost]/[nom_clef_choisit].key
</VirtualHost>
- 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 sur à la fin du vHost du 443 et la redirection http vers https sur le vHost du 80.
Dernière maj du module : 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'ouliez 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.
#apt install snapd
#snap install core; sudo snap refresh core
#snap install --classic certbot
#ln -s /snap/bin/certbot /usr/bin/certbot
#certbot --apache
La ligne 2 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
- 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.
- La commande wget permet de télécharger un paquet directement via un lien web (URL).
- La commande chmod a+x certbot-auto permet de rendre exécutable un script.
- Les 3 dernières lignes permettent le renouvellement automatique du certificat SSL.
Dernière maj du module : 23/12/2020 à 21h53
HTTP Strict Transport Security (HSTS) est un mécanisme de politique de sécurité proposé pour HTTP, permettant à un serveur web de déclarer à un agent utilisateur (comme un navigateur web), compatible, qu'il doit interagir avec lui en utilisant une connexion sécurisée (comme HTTPS). La politique est donc communiquée à l'agent utilisateur par le serveur via la réponse HTTP, dans le champ d'en-tête nommé « Strict-Transport-Security ». La politique spécifie une période de temps durant laquelle l'agent utilisateur doit accéder au serveur uniquement de façon sécurisée. Source Wikipédia && Complément d'informations via Developper.Mozilla (en).
#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>
Dernière maj du module : 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)
#systemctl restart apache2
- 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.
Ce tutoriel se termine ici, pour toute question ou rectification, vous pouvez nous contacter par mail à contact@blackhat-out.fr.