Disque-dur ( Exemple : SSD 1To / HDD 2 To / HDD 1To / SSD 1To pour NAS )
Mémoire RAM ( compatible : Crucial 8Go / Crucial 16Go )
Pour toutes manipulations en électronique ayez les matériels suivants :
Multimètre / Testeur électrique / si vous avez besoin d’intervenir sur la carte électronique (Arduino / Raspberry / etc…) et de vérifier les contacts.
Dragonne de mise à la terre / Empêche la formation d’électricité statique dans les environnements secs, vous protège contre les parasites et Protège votre équipement des dommages statiques.
#1 Commençons par accéder à Freebox os.
Pour cela taper dans votre navigateur l’adresse ci-dessous.
https://mafreebox.free.fr ou https://192.168.0.254
Une fois sur l’interface “En mode invité”
#2 En cliquant sur FREE en bas à gauche et Connexion.
#3 Entrer votre mot de passe
#3 Le mode connecté va vous permettre d’accéder à toutes les fonctionnalités de Freebox OS.
Free a activer une fonctionnalité pour sa Freebox Delta qui permet l’hébergement de Machines Virtuelles (en anglais : Virtual Machines – VMs). Les détails sur cette mise à jour sont disponibles sur le site de la Freebox.
Suite à cela, j’ai pensé qu’il était intéressant de migrer l’hébergement de mon site personnel sur mon propre serveur (Directement à la maison).
Avant de commencer, il faut d’abord une Freebox Delta 🙂 avec une VM opérationnelle.
J’ai choisi une VM avec Debian. Pour la suite, vous pouvez choisir n’importe quelle distribution Linux ca sera identique.
En ce qui concerne l’installation d’une VM sur la Freebox, je vous renvoie sur mon tutoriel.
Installez le serveur Apache.
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install apache2
Installez le support PHP et MYSQL sur le serveur Apache.
sudo apt-get install libapache2-mod-php php-mysql
sudo nano /etc/apache2/mods-enabled/dir.conf
Voici le fichier, avant notre configuration.
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
Voici le fichier, après notre configuration.
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
Redémarrez le service Apache.
sudo service apache2 restart
Dans notre exemple, la version PHP 7.4 a été installée sur le serveur Apache.
Créez un fichier pour tester l’installation de PHP.
sudo nano /var/www/html/test.php
Voici le contenu du fichier.
<?php
phpinfo();
?>
Ouvrez le navigateur et accédez à la page de test PHP.Dans notre exemple, l’URL suivante a été saisie dans le navigateur http://192.168.0.17/test.php
Le serveur Apache affichera les informations PHP.
Félicitations l’étape 1 est réalisée ! Vous avez installé Apache et PHP sur Ubuntu Linux
sudo apt-get update
sudo apt-get install mariadb-server mariadb-client
Accédez à la ligne de commande MySQL.
sudo mysql -u root -p
Configurez le compte ROOT pour utiliser le plugin nommé MYSQL_NATIVE_PASSWORD.
ALTER USER root@localhost IDENTIFIED WITH mysql_native_password;
ALTER USER root@localhost IDENTIFIED BY 'PASSWORD123';
Dans notre exemple, le mot de passe configuré était PASSWORD123.
Enregistrez votre configuration et quittez.
FLUSH PRIVILEGES;
exit;
mysql -u root -p
select Host,User,authentication_string,plugin from mysql.user;
exit;
Modifier les droits d’accès au dossier www
sudo chown -R user:www-data /var/www/
Remplacer “user” Par votre id
Félicitations l’étape 2 est réalisée ! Vous avez correctement installé le service MySQL sur le serveur Apache.
sudo apt-get install phpmyadmin
Suivez les instruction d’installation de PhpMyAdmin par défaut.
Ensuite, on va se connecter à l’instance MySQL/MariaDB pour donner les droits sur cette base de données à l’utilisateur “icrea35” :
mysql -u root -p
Une fois connecté avec le prompt “mysql>” à l’écran, exécutez les requêtes SQL suivantes :
CREATE USER 'iCrea35'@'localhost' IDENTIFIED BY 'MotdePasseComplexe'; GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'iCrea35'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Les informations (utilisateur ‘icrea35’ et mot de passe ‘MotdePasseComplexe) doivent correspondre aux valeurs définies dans le fichier de configuration.
Création d’un admin pour PhpMyAdmin
Nous allons profiter d’être connecté à la console MySQL pour créer un nouveau compte administrateur qui aura la main sur l’ensemble des bases de données. Nous utiliserons ce compte pour se connecter à PhpMyAdmin.
Voici les requêtes SQL à exécuter pour créer un utilisateur nommé “icrea35-admin” avec le mot de passe “MotdePasseComplexe2“.
CREATE USER 'iCrea35-admin'@'localhost' IDENTIFIED BY 'MotdePasseComplexe2'; GRANT ALL PRIVILEGES ON *.* TO 'iCrea35-admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT;
Contrairement à l’utilisateur précédent, celui-ci a les droits sur toutes les BDD de l’instant MySQL, d’où le “*.*” dans la requête GRANT.
Intégration de PhpMyAdmin à Apache
PhpMyAdmin est installé et configuré mais il nous manque une étape cruciale : la publication de l’application via Apache afin de pouvoir y accéder avec un navigateur.
Nous allons créer un fichier de configuration propre à PhpMyAdmin :
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
le code par defaut
Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options SymLinksIfOwnerMatch DirectoryIndex index.php # limit libapache2-mod-php to files and directories necessary by pma <IfModule mod_php7.c> php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/usr/share/doc/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/:/> </IfModule> # PHP 8+ <IfModule mod_php.c> php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/usr/share/doc/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/:/> </IfModule> </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/templates> Require all denied </Directory> <Directory /usr/share/phpmyadmin/libraries> Require all denied </Directory>
Voici le contenu à intégrer au fichier de configuration (peut-être adapté) :
Alias /PmA /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options SymLinksIfOwnerMatch DirectoryIndex index.php # Autoriser accès depuis certaines adresses IP / sous-réseau Order deny,allow Deny from all Allow from 192.168.0.0/24 <IfModule mod_php.c> <IfModule mod_mime.c> AddType application/x-httpd-php .php </IfModule> <FilesMatch ".+\.php$"> SetHandler application/x-httpd-php </FilesMatch> php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/ php_admin_value mbstring.func_overload 0 </IfModule> </Directory> # Désactiver accès web sur certains dossiers <Directory /usr/share/phpmyadmin/templates> Require all denied </Directory> <Directory /usr/share/phpmyadmin/libraries> Require all denied </Directory> <Directory /usr/share/phpmyadmin/setup/lib> Require all denied </Directory>
Quelques explications :
Enregistrez le fichier et activez ce fichier de config :
sudo a2enconf phpmyadmin.conf
Validez la configuration, et si c’est OK rechargez Apache :
sudo apachectl configtest
et si c’est OK rechargez Apache :
sudo systemctl reload apache2
Le moment est venu de tester l’accès à PhpMyAdmin !
Accéder à PhpMyAdmin
Ouvrez un navigateur et accédez à l’adresse suivante :
http://<ip-du-serveur>/PmA
Je vous rappelle que la valeur « PmA » dépend de l’alias défini précédemment dans la configuration d’Apache. Lorsque vous accédez à cette adresse, vous arriverez sur une page de connexion, où vous devrez vous connecter avec le compte « iCrea35-admin » créé précédemment.
Félicitations l’étape 3 est réalisée !
Désactivez le module Apache responsable de la liste des répertoires.
sudo a2dismod --force autoindex
sudo service apache2 restart
mkdir /var/www/html/essais
echo essais1 > /var/www/html/essais/essais1.txt
echo essais2 > /var/www/html/essais/essais2.txt
curl -I http://<ip-du-serveur>/essais/
Voici la sortie de la commande
HTTP/1.1 404 Not Found Date: Thu, 19 Jan 2023 23:38:49 GMT Server: Apache/2.4.54 (Debian) Content-Type: text/html; charset=iso-8859-1
Félicitations l’étape 4 est réalisée !
curl -v --silent http://127.0.0.1/notest.html --stderr - | grep address | cut -d ">" -f 2 | cut -d "<" -f 1
Voici la sortie de la commande.
Apache/2.4.54 (Debian) Server at 127.0.0.1 Port 80
curl -I http://127.0.0.1/notest.html --stderr - | grep -i server
server: Apache/2.4.54 (Debian)
sudo nano /etc/apache2/conf-available/security.conf
ServerTokens OS
ServerSignature On
TraceEnable Off
ServerTokens Prod
ServerSignature Off
TraceEnable Off
sudo service apache2 restart
Server: Apache
Ci-dessous l’en-tête Apache configuré par defaut, il affiche le minimum d’informations. Mais déjà trop d’information pour un Hacker.
Dans notre cas, nous avons désactivé l’en-tête de signature du serveur Apache. dont voici le résultat. Ceci supprimera les information de version et donc évitera de mettre les hacker sur la piste de ce que vous utilisez.
Félicitations l’étape 5 est réalisée ! Vous avez terminé la configuration de l’en-tête Apache.
sudo apt-get install ufwA ce stade, IFW est installé mais n’est pas activé. Nous allons vérifier l’état du firewall grâce à la commande
status
:
sudo ufw status verbose
status
permet de savoir si le pare-feu est activé ou désactivé,logging
permet de connaitre le niveau de traçabilité de ce que l’on trouvera dans/var/log/ufw.log
default
permet de savoir si par défaut (en l’absence de règle), on autorise ou refuse toutes connexions entrantes ou sortantessudo ufw default deny incoming sudo ufw default deny outgoingAutorisons les connexions au serveur web. Pour cela, nous devons autoriser les connexions entrantes (IN) vers le port 80 (HTTP) et 443 (HTTPS)
sudo ufw allow in 80/tcp sudo ufw allow in 443/tcpEn plus de spécifier le port pour les connexions entrantes, vous pouvez également choisir le protocole de transport des paquets. Le choix entre TCP ou UDP dépend du type de service. Les services qui peuvent tolérer des pertes de données utilisent généralement UDP (comme la téléphonie, la vidéo, les jeux en ligne, etc.) tandis que les services qui doivent garantir l’intégrité des données utilisent TCP (comme le web, les e-mails, etc.). Vous vous en doutez surement mais votre serveur a également besoin d’accéder à internet en HTTP ou HTTPS. Il peut avoir besoin de contacter un webservice, de télécharger des fichiers ou simplement de se mettre à jour. Il faut donc autoriser le serveur à sortir (OUT) vers Internet :
sudo ufw allow out 80/tcp sudo ufw allow out 443/tcpActuellement connecté à votre serveur en SSH. Une connexion SSH vous permet d’exécuter des commandes à distance, de monter des tunnels ou d’envoyer des fichier en SFTP. Nous allons donc autoriser le SSH(22) en entrant
sudo ufw allow in 22/tcpVotre serveur aura également besoin d’envoyer des emails. Il ne pourra toutefois pas recevoir de mails ou être utilisé comme relai. Nous pouvons donc autoriser les connexions SMTP (25) sortantes uniquement
sudo ufw allow out 25/tcpComme tous les serveurs, votre serveur va avoir besoin de résoudre des noms de domaine, c’est à dire de convertir un nom de domaine en adresse IP. Nous devons donc autoriser la connexion sortante en DNS (53)
sudo ufw allow out 53/udpVous aurez remarqué que nous n’avons pas ouvert le port de MySQL. En effet, notre serveur de base de données doit être joignable localement par PHP qui est sur le même serveur mais ne doit pas être exposé sur internet. Étant donné que nous avons bloqué tous les ports par défaut, il se retrouve protégé sans règle particulière. Vous pourrez toutefois vous connecter à votre serveur MySQL depuis l’extérieur avec un VPN que l’on configurera un peu plus tard dans le tutoriel et grâce à lui vous serez connecter sur votre réseaux local à distance et ainsi depuis votre ordinateur en utilisant votre connexion SSH vous pourrez vous connecter a votre base MySQL. Notre configuration initiale étant terminée, nous pouvons maintenant activer le firewall
sudo ufw enableVérifions maintenant notre paramétrage
sudo ufw status verbose
Status: active Logging: on (low) Default: deny (incoming), deny (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere (v6) 443/tcp ALLOW IN Anywhere (v6) 22/tcp ALLOW IN Anywhere (v6) 80/tcp ALLOW OUT Anywhere 443/tcp ALLOW OUT Anywhere 25/tcp ALLOW OUT Anywhere 53/udp ALLOW OUT Anywhere 80/tcp ALLOW OUT Anywhere (v6) 443/tcp ALLOW OUT Anywhere (v6) 25/tcp ALLOW OUT Anywhere (v6) 53/udp ALLOW OUT Anywhere (v6)
sudo ufw limit 22/tcp comment 'Autorise 6 connexions sur 30 secondes'[FALCUTATIF] UFW permet également de restreindre un port à certaines IPs. Nous pouvons donc imaginer que seulement quelques adresses IP aient accès à la connexion SSH. Supprimons la règle qui ouvrait SSH pour tout le monde et spécifions une plage d’adresse IP autorisée.
sudo ufw delete allow in 22/tcp sudo ufw allow from 192.168.0.0 to any port 22
Félicitations l’étape 6 est réalisée !
Installez le serveur Apache et les paquets requis.
sudo apt-get update
sudo apt-get install apache2 openssl
Normalement si vous avez suivie toutes les étapes précédente le module openssl est déjà installer et vous aurez ceci.
apache2 is already the newest version (2.4.54-1~deb11u1). openssl is already the newest version (1.1.1n-0+deb11u3+rpt1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Activez le module Apache nommé : Mod_ssl.
sudo a2enmod ssl
Activez le module Apache nommé : Mod_rewrite
sudo a2enmod rewrite
sudo nano /etc/apache2/apache2.conf
Ajoutez les lignes suivantes à la fin de ce fichier.
<Directory /var/www/html> AllowOverride All </Directory>
sudo mkdir /etc/apache2/certificate cd /etc/apache2/certificate sudo openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out apache-certificate.crt -keyout apache.key
Generating a RSA private key ............++++ .......................................................++++ writing new private key to 'apache.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:BRETAGNE Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: ICREA35 Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: 123.123.123.123 Email Address []:
Sur l’option nommée COMMON_NAME, vous devez entrer l’adresse IP ou le nom d’hôte.
Dans notre exemple, nous avons utilisé l’adresse IP 123.123.123.123
Modifiez le fichier de configuration Apache pour le site Web par défaut.
sudo nano /etc/apache2/sites-enabled/000-default.conf
Voici le fichier, avant notre configuration.
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
<VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt SSLCertificateKeyFile /etc/apache2/certificate/apache.key </VirtualHost>
<VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L] </virtualhost> <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt SSLCertificateKeyFile /etc/apache2/certificate/apache.key </VirtualHost>
sudo service apache2 restart
Ouvrez votre navigateur et accédez à la version HTTPS de votre site Web.
Dans notre exemple, l’URL suivante a été saisie dans le navigateur :
• https://<votre_IP>
Le serveur Apache affichera la version HTTPS de votre site Web.
Félicitations l’étape 7 est réalisée !
[A partir de cette étape vous devez posséder votre nom de domaine]
si vous en avez pas, je vous conseil d’accédez au site Web de ONLINE.NET (Scaleway DEDIBOX) site du Groupe Iliad qui gère Free et achetez un nom de domaine DNS. il les propose à un prix intéressant.
Dans notre exemple, nous avons acheté un domaine nommé : test.icrea35.fr
Vous pouvez utiliser n’importe quel site Web pour acheter un domaine DNS, ONLINE.NET est juste mon choix personnel.
Créez une entrée DNS pointant votre site Web vers l’ordinateur exécutant Apache.
Dans notre exemple, nous avons créé une entrée DNS pointant TEST.ICREA35.FR à Vers l’ipV6 du serveur qui héberge le serveur Apache.
Utilisez la commande NSLOOKUP pour tester votre configuration DNS.
sudo apt-get update sudo apt-get install dnsutils nslookup test.icrea35.fr
Installez le serveur Apache et les paquets requis.
sudo apt-get update sudo apt-get install apache2 openssl
Activez le module Apache nommé : Mod_ssl.
Activez le module Apache nommé : Mod_rewrite.
sudo a2enmod ssl sudo a2enmod rewrite
Modifiez le fichier de configuration Apache.
sudo nano /etc/apache2/apache2.conf
Ajoutez les lignes suivantes à la fin de ce fichier.
<Directory /var/www/html> AllowOverride All </Directory>
Créez des répertoires pour stocker les nouveaux fichiers et journaux du site Web.
sudo mkdir /websites/icrea35/www -p sudo mkdir /websites/icrea35/logs -p sudo chown www-data:www-data /websites/icrea35 -R
Les fichiers du site Web seront stockés dans le répertoire suivant:
/websites/icrea35/www
Les journaux du site Web seront stockés dans le répertoire suivant:
/websites/icrea35/logs
Créez un fichier de configuration Apache pour le nouveau site Web.
sudo nano /etc/apache2/sites-available/icrea35.conf
Voici le fichier avec notre configuration.
<VirtualHost *:80> ServerAdmin webmaster@loaclhost DocumentRoot /websites/icrea35/www ServerName test.icrea35.fr <Directory /websites/icrea35/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /websites/icrea35/logs/error.log CustomLog /websites/icrea35/logs/access.log combined LogLevel error </VirtualHost>
Activez le nouveau site Web.
sudo a2ensite icrea35.conf
Redémarrez le service Apache.
sudo service apache2 restart
Ouvrez votre navigateur et essayez d’accéder à la version HTTP du site Web.
Dans notre exemple, l’URL suivante a été saisie dans le navigateur :
• http://test.icrea35.fr
Vous avez terminé la configuration de l’hôte virtuel sur le serveur Apache.
Nous allons installer un certificat SSL gratuit fourni par let’s encrypt.
Nous devons également rediriger automatiquement tout le trafic HTTP vers la version HTTPS du site Web nous l’avion fait précédemment mais sans certificat SSL .
Installez la liste des packages requis.
sudo apt-get update sudo apt-get install certbot python3-certbot-apache
Installer le certificat ssl gratuit Apache
sudo certbot --apache -d test.icrea35.fr
• Entrer votre adresse mail quand il vous le demande et valider avec la touche (entrer).
• Appuyez sur (Y) pour partager votre e-mail et recevoir des newsletters.
• Appuyez sur (Y) pour rediriger automatiquement votre site Web HTTP vers la version HTTPS.
If you really want to skip this, you can run the client with --register-unsafely-without-email but you will then be unable to receive notice about impending expiration or revocation of your certificates or problems with your Certbot installation that will lead to failure to renew. Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): votre_email@mail.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Requesting a certificate for test.icrea35.fr Performing the following challenges: http-01 challenge for test.icrea35.fr Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/icrea35-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/icrea35-le-ssl.conf Enabling available site: /etc/apache2/sites-available/icrea35-le-ssl.conf Redirecting vhost in /etc/apache2/sites-enabled/icrea35.conf to ssl vhost in /etc/apache2/sites-available/icrea35-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://test.icrea35.fr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Subscribe to the EFF mailing list (email: votre_email@mail.com). IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/test.icrea35.fr/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/test.icrea35.fr/privkey.pem Your certificate will expire on 2023-04-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Le système installera automatiquement un certificat gratuit.
Il configurera également le serveur Apache pour rediriger tous les accès HTTP vers la version HTTPS de votre site Web.
Dans notre exemple, le système a créé un fichier de configuration d’hôte virtuel.
/etc/apache2/sites-available/icrea35-le-ssl.conf
Voici le contenu du fichier.
<VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /websites/icrea35/www ServerName test.icrea35.fr <Directory /websites/icrea35/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /websites/icrea35/logs/error.log CustomLog /websites/icrea35/logs/access.log combined LogLevel error SSLCertificateFile /etc/letsencrypt/live/test.icrea35.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/test.icrea35.fr/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
On vérifie en se connectant sur test.icrea35.fr
On obtient bien un petit cadenas devant l’adresse web et si on clique dessus ça nous informe bien que le site est sécurisé.
Le fichier KEY contient votre clé privée de certificat et doit être conservé dans un endroit sûr tout le temps.
Dans notre exemple, le fichier KEY a été stocké dans :
/etc/letsencrypt/live/test.icrea35.fr/privkey.pem
Le système modifie automatiquement le fichier de configuration de l’hôte virtuel Apache d’origine.
Il redirigera automatiquement toutes les requêtes HTTP vers la version HTTPS de votre site Web.
Félicitation ! Vous venez d’installé votre certificat Let’s Encrypt sur le serveur Apache.
Sachant que le certificat gratuit installé est valable 90 jours.
Nous allons crée une tâche planifiée pour renouveler automatiquement tout certificat dans les trente jours suivant son expiration. Ainsi vous aurez pas a vous souciez de cela.
Le nom de la tâche planifiée est CERTBOT et se trouve dans le fichier suivant :
sudo nano crontab -e
Voici le contenu du fichier.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
Utilisez la commande suivante pour simuler le processus de renouvellement de certificat.
sudo certbot renew --dry-run
Voici la sortie de la commande.
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/test.icrea35.fr.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator apache, Installer apache Simulating renewal of an existing certificate for test.icrea35.fr Performing the following challenges: http-01 challenge for test.icrea35.fr Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of apache server; fullchain is /etc/letsencrypt/live/test.icrea35.fr/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/test.icrea35.fr/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Félicitations! Vous avez configuré le renouvellement automatique du certificat Let’s Encrypt.
sudo apt-get update sudo apt-get install apache2 php-fpmActivez les modules et les fichiers de configuration requis.
sudo a2enmod proxy_fcgi sudo a2enconf php7.4-fpm sudo a2enmod proxy_fcgiSi PHP était installé dans votre installation Apache, vous devez désactiver le module PHP Apache standard.
sudo a2dismod php7.4Activez le nouveau module PHP. Désactivez le MPM Apache par défaut. Activez le nouveau MPM Apache.
sudo a2dismod mpm_prefork sudo a2dismod mpm_worker sudo a2enmod mpm_eventApache 2 a introduit des modules multi-traitement ou MPM. Les MPM modifient la façon dont Apache gère les demandes des clients. Activez le module Apache HTTP2.
sudo a2enmod http2Modifiez le fichier de configuration Apache.
sudo nano /etc/apache2/apache2.confActivez la prise en charge de HTTP2 sur Apache en ajoutant la ligne suivante à la fin du fichier de configuration.
Protocols h2 http/1.1Redémarrez le service PHP-FPM.
sudo service php7.4-fpm statusRedémarrez le service Apache.
sudo service apache2 restartVous avez terminé l’installation de HTTP2 sur Apache. Maintenant, nous allons tester si notre installation Apache prend vraiment en charge HTTP2. Installez le logiciel requis pour tester la prise en charge d’Apache HTTP/2.
sudo apt-get update sudo apt-get install wget curlUtilisez la commande suivante pour tester la prise en charge d’Apache HTTP2 à l’aide de WGET. Gardez à l’esprit que vous devez changer test.icrea35.fr à l’adresse IP de votre serveur.
sudo wget -S http://test.icrea35.fr/Voici la sortie de la commande.
HTTP request sent, awaiting response... HTTP/1.1 301 Moved Permanently Date: Mon, 23 Jan 2023 09:56:15 GMT Server: Apache/2.4.54 (Debian) Location: https://test.icrea35.fr/ Content-Length: 232 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 Location: https://test.icrea35.fr/ [following] --2023-01-23 10:56:15-- https://test.icrea35.fr/ Connecting to test.icrea35.fr (test.icrea35.fr)|2a01:e34:0000:0000:0000:0000:000:0000|:443... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Mon, 23 Jan 2023 09:56:15 GMT Server: Apache/2.4.54 (Debian) Upgrade: h2,h2c Connection: Upgrade, Keep-Alive Vary: Accept-Encoding Keep-Alive: timeout=5, max=100 Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 Length: unspecified [text/html] Saving to: ‘index.html’Si vous avez la ligne upgrade: h2, H2c c’est que le http2 est fonctionnel sur votre serveur. Félicitations, vous avez testé avec succès le support HTTP2 sur Apache.