logo_sommaire

Mise à jour : 05/01/2021 à 19h17

PREREQUIS

VERSION & VALIDATION

Debian 10 Validé le 24/12/2020
RaspBian Non-Testé le xx/xx/2021
PHP : Version 8

Status : Validé, correction orthographique en cours.
NIVEAU TUTORIEL :

Débutant

NIVEAU REQUIS :

Savoir lire
Connaître le concept de DNS (l'histoire avec les domaines)
Comprendre le concept de virtualhost

SOURCES LISTES

Debian 10 (BUSTER)
RaspBian

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 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.


Introduction

/!\ Avant de poursuivre, il est nécessaire de prendre connaissance des indications ci-dessous/!\

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.

Première étape, la mise à jour :

						$su
						#apt update && apt upgrade -y
					

Explications des commandes

SU

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.


APT UDATE/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 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
					

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 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
							
					

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 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>

						

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 sur à la fin du vHost du 443 et la redirection http vers https sur le vHost du 80.

HTTPS (avec domaine)

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.

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 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
						

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 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> 
				
						


SÉCURISER

Sécuriser un minimum son serveur web

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
						
						
					

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.