| | | |

VPS – Configuration complet avec multisite & WordPress

Avoir un VPS c’est vraiment un gros avantage sur tout si on veut héberger plusieurs site Web. Par contre arriver à héberger plusieurs site est assez compliquer si on connais pas toutes les astuces!

Si vous n’avez pas encore de VPS, il y a un service assez intéressant qui ne coûte pas trop cher comparé à la concurrence et avec des performances intéressantes. SSDNodes, allez voir les performances et les tarifs. Seul défaut (si on veut), il faut savoir faire la configuration d’IPv6.
Voici un lien d’affiliation si vous souhaitez nous aider à maintenir ce site :
www.ssdnodes.com

Dans cette article on va partir d’un VPS qui contiens que l’installation de base de Ubuntu 20.04.

Pour commencer on va installé:

  1. Sécurisation du serveur (VPS)
  2. LAMP (Acronyme de Linux Apache MySQL PHP).
  3. Création d’une base de donnée pour WordPress.
  4. Installer toutes les dépendance pour pouvoir installer utilisé par WordPress.
  5. Edition du VirtualHost.
  6. Téléchargement et installation de WordPress.
  7. Mettre à jour le fichier de configuration WordPress
  8. Finalisation de l’installation
  9. Configuration de multisite sur le VPS
  10. Configuration de la redirection sur le DNS
  11. Sécurisation du site web avec un certificat SSL / https


1) Sécurisation du serveur (VPS)

1.1) Création d’un nouvel utilisateur
Le compte “root” est le compte “super-administrateur” ou “dieu” (Toor = root à l’envers) de votre serveur, il a toutes les permissions. C’est donc le compte à sécuriser en premier. Mais pour pas faire d’erreur et resté bloquer, on va en premier créer un utilisateur avec des droits similaires.
Il est déconseiller de se connecter directement en root sur un VPS, ou alors juste le temps de faire les modifications importantes de sécurité. C’est le compte privilégié par les hackeur à cause de ses permissions avancées.
Avec la commande “adduser username” un mot de passe sera demandé et puis la confirmation. Le nom complet, le numéro de chambre, de téléphone pro, de téléphone fix et une autre information sont aussi demander. Ces dernières infos sont pas nécessaire. Il faut juste mettre un mot de passe très fort pour pouvoir continuer.
On va donc ajouter un nouvelle utilisateur avec la commande suivante ( username est à remplacer par le nom d’utilisateur):

$ sudo adduser username

Après avoir créer le nouvelle utilisateur, on va lui donner les droits d’administration avec la commande suivante:

$ sudo usermod -aG sudo username

On va se nous connecter au nouvel utilisateur avec la commande suivante:

$ su username

1.2) Sécurisation du compte root
On va configurer un mot de passe très fort, c’est-à-dire avec une vingtaine de caractères, avec lettres, chiffres et caractères spéciaux “aléatoires de préférence” (par ex. xar!@tImusü[>3"1*°).
Un gestionnaire de mots de passe est conseiller pour sauver de tel mot de passe.
Avant d’entrer le mot de passe, il faut absolument tester si toutes les touches clavier sont correctement configurer (Keyboard Layout, azerty, qwertzu, etc… ). Il faut faire très attention au NumPad, quand il est pas allumer, il met des caractère qui ne corresponde pas.
Pour changer le mot de passe, on utilise la commande suivante:

$ passwd

1.3) Configuration du SSH
L’accès à votre serveur se fait par le protocole SSH port 22. On va modifier cet accès en modifiant le port d’écoute et en bloquant la connexion directe au compte root.
La configuration du SSH est dans le fichier /etc/ssh/sshd_config.
On va éditer le fichier avec la commande suivante:

sudo nano /etc/ssh/sshd_config

Il y a une ligne qui indique Port 22. On enlève le # et remplace le 22 par le numéro de port qu’on veut à condition de pas prendre un numéro de port déjà occuper, (p.ex.:80, 443). Les numéro de ports vont de 0 à 65 535. Habituellement les ports allant de 0 à 1024 sont des ports connu et donc réserver pour d’autre service. Plus d’infos sur Wikipédia.

À la fin du fichier, on change PermitRootLogin yes à  PermitRootLogin no pour empêcher la connexion en root. Sur certain serveur comme par exemple OVH, cette option est déjà corriger.

On redémarre le service SSH avec la commande sudo service ssh restart, puis on vérifie que la configuration fonctionne SANS FERMER LA CONNEXION ACTIVE, en ouvrant une nouvelle connexion au serveur. Il ne faut surtout pas fermer la connexion active, en cas de mauvaise configuration, on risque de perdre l’accès au serveur.

1.4) Si un ParFeu est déjà configurer, la nouvelle connexion ne fonctionnera pas. Le blocage viens du PareFeu, il bloque le nouveau port choisi. Dans cette exemple on part du principe que ufw (Uncomplicated Firewall) est installer.
On va donc ajouter un nouveau port au PareFeu avec la commande suivante:
sudo ufw allow NuméroPort

NuméroPort est le port choisi lors de la configuration du fichier /etc/ssh/sshd_config

Si le part feu n’est pas configurer, il est fortement conseiller de le configurer. Dans l’article ufw Uncomplicated FireWall , on explique les base de ufw.

Après cette modification, la connexion en SSH avec le nouvelle utilisateur et le nouveau port devrait fonctionner.

1.5) fail2ban, bloquez les attaques bruteforce
Les serveurs risque toujours de se faire attaquer par des robots tentant de percer les défenses. Certains hackeurs tentent de rentrer dans les serveurs mal sécurisés de manière automatique en testant tous les mots de passe possibles. Cette technique s’appelle la bruteforce.
fail2ban permet de bloquer ces attaques. Le fonctionnement est assez simple, au bout d’un certain nombre de tentatives de connexions infructueuses, l’adresse IP de l’attaquant est bloquée.

Avec la commande suivante, on va installer fail2ban :
sudo apt install fail2ban -y

Pour vérifier le bon fonctionnement, on utilise la commande:
service fail2ban status

La configuration de fail2ban est dans le dossier /etc/fail2ban/
On va créer un fichier jail.local qui correspondra à la configuration locale des “prisons” (combinaison de règles de détection et d’actions pour un service donné).

# Structure de /etc/fail2ban/

fail2ban.conf  # Fichier de configuration global
filter.d/
    └─ *.conf  # Règles de détection des erreurs d'authentification
action.d/
    └─ *.conf  # Actions à affectuer pour bannir une IP
jail.conf      # Configuration par défaut des "prisons"
jail.local     # Configuration locale des "prisons"

Source: https://doc.ubuntu-fr.org/fail2ban
à finir la parti de fail2ban!


2. Installation de LAMP
Voici les lignes de commande à lancer.

sudo apt update && sudo apt upgrade -y
sudo apt install apache2 -y

sudo apt install mysql-server -y
sudo apt install php libapache2-mod-php php-mysql -y

Après quelque minutes, après l’installation, on édite le fichier dir.conf pour mettre index.php en premier dans la liste. Ceci va permettre de rediriger tout les requêtes au site en premier vers le fichier index.php au lieux du fichier index.html.

sudo nano /etc/apache2/mods-enabled/dir.conf

Contenu original du fichier:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php
index.xhtml index.htm
<IfModule>

Contenu du fichier modifier:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
<IfModule>

On enregistre avec “Ctrl” + “x” , “y” , “Entrer”.

Pour tester notre installation on va créer un fichier index.php :
sudo nano /var/www/html/i.php

On va mettre le contenu suivant dans le fichier:
<?php phpinfo(); ?>
On enregistre avec “Ctrl” + “x” , “y” , “Entrer”.

On redémarre le serveur apache2:
sudo service apache2 restart

On ouvre un navigateur internet. On écrie l’adresse du serveur en ajoutant /i.php à la fin.
La page d’information de php (ci-dessous) devrait s’afficher.

Si rien ne d’affiche il est possible que php soit pas installer. On peut installer php avec la commande suivante:
sudo apt install php libapache2-mod-php php-mysql -y; sudo service apache2 restart


Cacher la version du serveur apache en cas d’erreur

Quand on entre une adresse qui n’existe pas sur un serveur, le message d’erreur sous “Not Found”, affiche des information sur le serveur Apache (version serveur, système exploitation). Afin de sécuriser un peu plus le serveur, on va ajouter deux ligne au fichier de configuration apache.

On édite le fichier suivant avec nano:
sudo nano /etc/apache2/apache2.conf

On ajoutera les lignes suivantes à la fin du fichier :
ServerSignature Off
ServerTokens Prod

On enregistre avec “Ctrl” + “x” , “y” , “Entrer”.

On redémarrer Apache pour que les modifications prennent effet avec la commande suivante:
sudo systemctl restart apache2

Ci-dessous un exemple avant, après.


3. Création d’une base de donnée pour WordPress.

sudo mysql -u root -p

CREATE DATABASE WordPressDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;


CREATE USER 'WordPressUser'@'localhost' IDENTIFIED BY 'VeryStrongPassWord';


GRANT ALL ON WordPressDB.* TO 'WordPressUser'@'localhost';


ALTER USER 'WordPressUser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'VeryStrongPassWord';


FLUSH PRIVILEGES;


EXIT;

Explication des différentes choses:
wordwressdb nom de la base de données. ATTENTION! Sans caractère spéciaux. Que des caractère alphanumérique. Que des caractère minuscule !
WordPressUser nom de l’utilisateur que WordPress utilisera plus tard. ATTENTION! Sans caractère spéciaux. Que des caractère alphanumérique.
VeryStrongPassWord un mot de passe compliquer que WordPress utilisera plus tard.


4. Installer toutes les dépendances pour pouvoir installer et utilisé par WordPress.

sudo apt update && sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-xml php-curl php-zip -y && sudo systemctl restart apache2


5. Édition du VirtualHost pour indiquer vers quel dossier la redirection devra se faire:
sudo nano /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
#ServerAdmin NomDeDomaine
        DocumentRoot /var/www/html/NomDeDomaine
        ServerName NomDeDomaine
        ServerAlias www.NomDeDomaine

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html/NomDeDomaine

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/NomDeDomaine/>
                Options FollowSymlinks
                AllowOverride All
                Require all granted
    </Directory>

</VirtualHost>

WordPress est livré avec une fonction de permalien qui garantit de belles URL optimisées pour les moteurs de recherche. Ils dépendent d’un module Apache appelé mod_rewrite. On va l’activer avec la commande suivante :
sudo a2enmod rewrite

Pour être sûr que tout fonctionne correctement après ces modifications, on entre la commande suivante pour tester les modifications:
sudo apache2ctl configtest

Si Syntax ok s’affiche, alors on peut continuer. S’il y a autre chose, on doit revenir en arrière et corriger les fautes de frappe qu’on a peut-être laissées dans les fichiers de configuration.

Pour activer les nouvelles modifications, on lance la commande suivante pour redémarrer Apache :
sudo systemctl restart apache2
ou les 3 commandes en une ligne:
sudo a2enmod rewrite && sudo apache2ctl configtest && sudo systemctl restart apache2

WordPress est livré avec une fonction de permalien qui garantit de belles URL optimisées pour les moteurs de recherche. Ils dépendent d’un module Apache appelé mod_rewrite. On va l’activer avec la commande suivante :
sudo a2enmod rewrite

Le ou les VirtualHost sont important et serviront plus tard à avoir plusieurs site sur le même VPS.


6. Téléchargement et installation de WordPress

On va télécharger WordPress et configurer le site. La racine du document pour le site sera dans le répertoire /var/www/html/NomDeDomaine. Avant tout on va télécharger WordPress à partir du site officiel et on prend toujours la dernière version pour être sur d’être à jour. La commande suivante va aller dans le répertoire temporaire, lancer le téléchargement de la dernière version de WordPress et décompresser le contenu de l’archive télécharger:
cd /tmp && wget https://wordpress.org/latest.tar.gz && tar xzvf latest.tar.gz

On va créer le fichier .htaccess que WordPress utilisera avec la commande suivante:
sudo touch /tmp/wordpress/.htaccess

On va créer le sous dossier dans le quel sera installer le site web avec la commande suivante:
sudo mkdir /var/www/html/NomDeDomaine

Les configurations WordPress sont enregistrées dans le fichier wp-config.php. Une nouvelle installation de WordPress est livrée avec un exemple de fichier de configuration qu’on peut copier dans le fichier wp-config.php. On va utiliser la commande suivante pour copier ce fichier :
sudo cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

Afin d’éviter des problèmes, on va supprimer le contenu du dossier /var/www/html/NomDeDomaine
Avec la commande suivante on peut lister le contenu du répertoire:
ll /var/www/html/NomDeDomaine
Cette commande supprimera tout le contenu du répertoire:
rm -r /var/www/html/NomDeDomaine/*

On va copier le contenu de notre dossier temporaire dans le dossier de notre site Web:
sudo cp -a /tmp/wordpress/. /var/www/html/NomDeDomaine

On doit changer les droits et/ou permissions des dossiers afin de permettre à WordPress de travailler correctement. On le fait avec la commande suivante:
sudo chown -R www-data:www-data /var/www/html/NomDeDomaine

Tous les sous-répertoires de l’installation de WordPress ont besoin des bonnes autorisations.
On modifie les autorisations avec la commande suivante:
sudo find /var/www/html/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/ -type f -exec chmod 640 {} \;

On fais une dernière modification des autorisations avec la commande suivante:
sudo chmod -R 755 /var/www


7. Mettre à jour le fichier de configuration WordPress

On va éditer le fichier wp-config.php, qui contient les configurations nécessaires pour exécuter le site WordPress. Tout d’abord, on change les clés secrètes pour améliorer la sécurité de l’installation. Pour ne pas générer des clés personnelles, WordPress a un utilitaire de génération de clés secrètes qu’on va utiliser pour obtenir des clés hautement sécurisées.
On va utiliser la commande suivante :
curl -s https://api.wordpress.org/secret-key/1.1/salt/

wordpress secrets

On va copier la clef générer pour la coller dans le fichier wp-config.php. On édite le fichier wp-config.php dans l’éditeur nano à l’aide de la commande suivante:
sudo nano /var/www/html/NomDeDomaine/wp-config.php

On remplace ce qui suit par la clef copier.

wordpress secrets section

Chaque Clefs générer est unique. Les clefs ne peuvent et ne doivent jamais être réutiliser pour plusieurs site. Elle sont unique et doivent le rester pour chaque site.

Au début du fichier de configuration “wp-config.php“, il devrait y avoir les configurations de la base de donner de WordPress comme dans l’exemple ci dessous.

sql settings

On va mettre à jour tout ces données avec celle qu’on a encodé, plus haut au point 3.

le nom de la base de données,
l’utilisateur de la base de données,
le mot de passe associé,

On défini la méthode que WordPress utilisera pour écrire dans le système de fichiers. Vu que le serveur Apache dispose des autorisations appropriées pour accéder à tous les répertoires du répertoire d’installation de WordPress, on défini la méthode d’accès au système de fichiers sur direct.

Si les données écrient dans le fichier “wp-config.php” ne correspondent pas avec celle encoder au point 3), WordPress ne fonctionnera pas. Une erreur du type “Error establishing a database connection” s’affichera.

IMPORTANT !
Il faut absolument que la ligne suivante soit dans le fichier:
define('FS_METHOD', 'direct');

On enregistre avec “Ctrl” + “x” , “y” , “Entrer”.


8. Finalisation de l’installation dans le WebFrontEnd

La configuration du serveur est terminée et on devrait pouvoir accéder à l’installation de WordPress directement sur le Web, via le nom de domaine (s’il est déjà configuré, voir point 10) ou l’adresse IP du serveur. Si toute l’installation s’est bien dérouler on devrait voir la page de configuration initiale de WordPress. On Choisi la langue et procédez :

wordpress setup

La page de configuration principale s’affiche et peut définir le titre, le nom d’utilisateur et le mot de passe du site qu’on veut utiliser pour la connexion au tableau de bord de l’administrateur. On rempli les détails de manière appropriée. Un mot de passe fort est généré mais on peut aussi en choisir un nous même mais i faut qu’il que ce soit un mot de passe fort. On sauvegarde et on continue:

wp config

Une fois connecté, on sera dirigé vers le tableau de bord d’administration WordPress :

wp-dashboard

La page d’accueil, avec l’article de blog WordPress par défaut, ressemble à ce qui suit:

blog

Dans ce tutoriel, on a configuré LAMP et installé un site WordPress. C’est une étape est très intéressante car on peut désormais héberger n’importe quel site WordPress en quelques minutes si on réalise un scripte.
Les prochaines étapes consistent à choisir un thèmes WordPress qui pourra améliorer l’apparence de du site, les plugins WordPress pour ajouter des fonctionnalités.

Mais ce n’est pas tout. Le prochaine étape est de configurer une autre site sur le VPS afin d’un peu mieux rentabiliser le VPS.

9. Configuration de multisite sur le VPS

Dans le point 4. Édition du VirtualHost… , on a choisi un dossier vers le quel le nom de domaine est dirigé. Le fichier par défaut est éditer avec la commande suivante:
sudo nano /etc/apache2/sites-available/000-default.conf
, ce fichier ne sera plus utiliser si on configure des multisites.
Chaque domaine a besoin de son propre fichier VirtualHost. Dans l’exemple qui suit, on va créer deux site donc deux fichiers.
Pour configurer le multisite, on va copier le fichier par défaut vers un fichier qui se compose d’un des nom de domaine:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/NomDeDomaine1.conf

Dans la fouler on copie directement le deuxième fichier avec le deuxième nom de domaine:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/NomDeDomaine2.conf

On va créer les dossiers dans les quels seront les sites internet:
sudo mkdir /var/www/html/NomDeDomaine1
sudo mkdir /var/www/html/NomDeDomaine2

On va éditer le contenu des fichiers premier VitualHost.
sudo nano /etc/apache2/sites-available/NomDeDomaine1.conf

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html/NomDeDomaine1/
   ServerName NomDeDomaine1
   ServerAlias www.NomDeDomaine


    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/NomDeDomaine1>
        AllowOverride All
    </Directory>

</VirtualHost>

On répète la même procédure pour le deuxième fichier VitualHost.
sudo nano /etc/apache2/sites-available/NomDeDomaine2.conf

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html/NomDeDomaine2/
   ServerName NomDeDomaine2
   ServerAlias www.NomDeDomaine

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/NomDeDomaine2>
        AllowOverride All
    </Directory>

</VirtualHost>

On va activer le fichier de configuration. À l’installation, le serveur est configuré pour lire le fichier par défaut 000-default.conf. Vu qu’on a changer et créé un nouveau fichier de configuration pour chaque domaine, on va désactiver (Disable) le fichier par défaut avec la commande:
sudo a2dissite 000-default.conf

Pour que le serveur soit mappé sur les nouveaux domaines, on doit activer (Enable) chacun des nouveaux fichiers .conf.
sudo a2ensite domain1.com.conf
sudo
a2ensite domain2.com.conf

Pour être sûr que tout fonctionne correctement, on entre la commande suivante pour tester les modifications:
sudo apache2ctl configtest

Si “Syntax ok” s’affiche, alors on peut continuer. S’il y a autre chose, on doit revenir en arrière et corriger les fautes de frappe qu’on a peut-être laissées dans les fichiers de configuration.

Pour activer les nouvelles modifications, on lance la commande suivante pour redémarrer Apache :
sudo systemctl restart apache2

Avec la commande ci-dessous, il est possible de voir quel site sont déjà actif sur le serveur:
ll /etc/apache2/sites-enabled

Ce qui suit devrait s’afficher:
25178469 lrwxrwxrwx 1 root root 29 2017-05-18 17:56 domain1.com.conf -> ../sites-available/domain1.com.com.conf
25204968 lrwxrwxrwx 1 root root 33 2017-05-18 17:56 domaine2.com.conf -> ../sites-available/domain2.com.com.conf

Si un site n’est plus sur le VPS, on peut aussi le désactiver (Disable) avec la commande suivante:
sudo a2dissite domain2.com.conf


10. Configuration de la redirection sur le site de Restena, dns.lu ou my.lu

Dans cette exemple on voit la configuration de la redirection du nom de domaine vers l’adresse IP du serveur VPS sur le site my.lu de Restena. Si vous le demandez, je rajoute le même exemple sur OVH.

La propagation des nouvelles configurations de DNS peut prendre jusqu’à 48h! Il faut donc avec un peu de patience.

Après que la configuration soit valider par les serveur DNS, on peut enfin faire le test si la redirection est fonctionnel. On ouvre un navigateur internet et on écris nom de domaine. Si tout a été fais correctement, la page d’installation de WordPress ou le site WordPress s’affiche.

11. Sécurisation du site web avec un certificat SSL / https

Google avait annoncé en septembre 2016 : « à partir de janvier 2017, Chrome 56 indiquera dans la barre d’adresse un message signalant un danger pour certains sites web non accessibles en HTTPS. » Du coup, c’est mieux de sécuriser les sites Web. Plus d’info sur ce site https://www.anthedesign.fr/hebergement-web/ssl/

Suite à ça, on va améliorer la sécurité du site Web grâce au cryptage, ceci augmentera la confiance des visiteurs. Let’s Encrypt facilite la mise en œuvre du cryptage sur n’importe quel site Web. Il s’agit d’un projet ouvert et gratuit qui permet d’obtenir et d’installer des certificats via des commandes simples et automatisées. Let’s Encrypt est une nouvelle autorité de certification capable d’émettre des certificats contre-signés par IdentTrust, ce qui permet à leurs certificats finaux d’être acceptés par tous les principaux navigateurs.
On va utiliser Certbot pour obtenir un certificat SSL gratuit pour Apache sur Ubuntu 20.04, puis on va s’assurer du renouvellement automatique.

On utilise un fichier d’hôte virtuel séparé au lieu du fichier de configuration par défaut d’Apache pour configurer le site web qui sera sécurisé par Let’s Encrypt. C’est recommander de créer de nouveaux fichiers d’hôtes virtuels Apache pour chaque domaine hébergé sur un serveur, car cela permet d’éviter les erreurs courantes et de conserver les fichiers de configuration par défaut comme configuration en cas de problèmes.

11.2) Vérification de la configuration de votre hôte virtuel Apache
Afin de pouvoir obtenir et configurer automatiquement le certificat SSL pour le serveur web, Certbot doit trouver le bon hôte virtuel dans les fichiers de configuration Apache. Le ou les noms de domaine de du serveur sera récupéré à partir des directives ServerName et ServerAlias définies dans les bloc de configuration VirtualHost.

11.3) Autorisation du HTTPS à travers le pare-feu UFW
On va configurer le pare-feu UFW (Uncomplicated FireWall) pour autoriser le trafic HTTPS. Lors de l’installation, Apache enregistre quelques profils d’application UFW différents. On peut utiliser le profil Apache Full pour autoriser le trafic HTTP et HTTPS.
Avec la commande suivante on peut voir quel type port sont ouvert:

sudo ufw status

Si aucune modifications a été faite, ce qui suite devrais s’afficher:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

Pour que le HTTPS soit autoriser, on écris les commande suivante:

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

Si on réécrit la commande sudo ufw status , on devrait voir ce qui suite:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)

11.4) Obtention d’un certificat SSL
Certbot propose différents moyens d’obtenir des certificats SSL par le biais de plugins. Le plugin Apache se chargera de reconfigurer Apache et de recharger la configuration chaque fois que nécessaire.
On va installer certbot, et python3-certbot-apache. Ce plugin qui intègre Certbot à Apache et permet d’automatiser l’obtention d’un certificat et la configuration HTTPS. On installe CertBot avec la commande suivante:
sudo apt install certbot python3-certbot-apache -y


Avec la commande suivante on lance le scripte pour avoir le certificat SSL avec CerBot:

sudo certbot --apache

Le script va nous poser une série de questions afin de configurer le certificat SSL. En premier il faut entrer une email valide. Cette email sera utilisée pour les notifications de renouvellement et les avis de sécurité :

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain

On appuie sur “Entrer” pour valider le mail. À l’étape suivante, on accepte les conditions d’utilisation du service Let’s Encrypt.
On confire avec la touce “A” et puis avec la touche “Entrer”:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Ensuite, le scripte demande si on veut partager l’email avec l’Electronic Frontier Foundation pour recevoir des nouvelles et d’autres informations. Afin de refuser cette invitation on appuie sur “N” et puis sur “Entrer” pour continuer:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing 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: N

Puis le script de Certbot demande pour quel domaines il faut activer le HTTPS. Les noms de domaine listés sont obtenus automatiquement à partir de la configuration du fichier hôte virtuel Apache.
Il est important de bien avoir configurer ServerName et ServerAlias dans les hôte virtuel.
Si on veut activer le HTTPS pour tous les noms de domaine répertoriés (recommandé), on peut laisser l’invite vide et appuyer sur “Entrer” pour continuer. Sinon, on entre le numéro qui précède le domaines pour les quel on veut activer le HTTPS en ajoutant des virgules et/ou des espaces, puis on appuie sur “Entrer” pour continuer.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Vous verrez une sortie de ce type :

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

Ensuite, le scripte nous propose de dévier le trafic HTTP vers le HTTPS. Tout tentative de connexion au site par le HTTP sera automatiquement redirigée vers l’adresse HTTPS. On appuie sur la touche “2” et puis “Entrer” pour activer la redirection:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Après cette étape, la configuration de Certbot est terminée, les dernières remarques sur le nouveau certificat seront afficher, ainsi que l’emplacement des fichiers générés et la manière de tester la configuration à l’aide d’un outil externe qui analyse l’authenticité du certificat :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2020-07-27. 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"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

Dans un navigateur internet, on va écrire le ou les nom de domaine et voir si sont sécuriser avec le petit cadenas ou si https:// s’affiche au début de l’adresse. Sur le site SSL Labs Server Test on peut vérifier la qualité du certificat et obtenir des informations détaillées à son sujet.

11.5) Verification du renouvellement automatique de Certbot
Les certificats Let’s Encrypt ne sont valables que 90 jours. Cette mesure vise à encourager les utilisateurs à automatiser le processus de renouvellement de leurs certificats, ainsi qu’à garantir que les certificats utilisés abusivement ou les clés volées expirent le plus tôt possible.

Le package Certbot qu’on a installé prend en charge les renouvellements en incluant un script de renouvellement dans /etc/cron.d, qui est géré par un service systemctl appelé certbot.timer.
Ce script est exécuté deux fois par jour et renouvellera automatiquement tout certificat qui se trouve dans une période de 30 précédant l’expiration.
Pour vérifier le statut de ce service, s’assurer qu’il est actif et qu’il fonctionne, on entre la commande suivante:

sudo systemctl status certbot.timer

Quelque chose de similaire à ce qui suite devrais s’afficher:

Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
    Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
   Triggers: ● certbot.service

Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

On peut simuler le processus de renouvellement avec la commande suivante:

sudo certbot renew --dry-run

S’il y a pas d’erreurs, tout est prêt. Si nécessaire, Certbot renouvellera le ou les certificats et rechargera Apache pour récupérer les modifications. Si le processus de renouvellement automatisé échoue, Let’s Encrypt enverra un message à l’email on a indiqué lors de la configuration, avertissant de l’expiration prochaine du ou des certificats.

11.6) Redirection permanant vers le https
Mettre un certificat SSL est assez simple avec quelques commandes mais le site ne sera pas forcément rediriger automatiquement vers le https. Une dernière modification est à faire. Il existe plusieurs possibilité de le faire mais la plus simple est de rajouter la ligne “Redirect permanent / https://NomDeDomaine/” au fichier “Virtual Host”.
On edite le fichier NomDeDomaine.conf avec la commande:
sudo nano /etc/apache2/sites-available/NomDeDomaine.conf

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html/NomDeDomaine/

Redirect permanent / https://NomDeDomaine/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/NomDeDomaine>
        AllowOverride All
    </Directory>

</VirtualHost>

Si cette déviation n’est pas active, il possible qu’une erreur de sécurité s’affiche.
“Votre connexion à ce site n’est pas sécurisée”

On enregistre avec “Ctrl” + “x” , “y” , “Entrer”.

Finalement on redémarre le serveur apache avec la commande:
sudo service apache2 restart

mes sources: https://www.cloudsigma.com/how-to-install-wordpress-with-lamp-on-ubuntu-20-04
https://httpd.apache.org/docs/current/vhosts/examples.html
https://www.liquidweb.com/kb/configure-apache-virtual-hosts-ubuntu-18-04/
https://www.linuxtricks.fr/wiki/apache-les-virtual-hosts
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04-fr
https://baptiste0928.net/securiser-son-serveur-linux-sous-ubuntu/
https://www.codeur.com/blog/redirection-https-automatique/
https://www.guillaumelemoine.com/installation-vps-multisite-ovh/

Laisser un commentaire