Installation et configuration d’un VPS sur OVH avec Debian9, WordPress et SSL.

Tutoriel de mise en place :

Installation et configuration d’un VPS sur OVH avec Debian 9 (en anglais) + WordPress + SSL

Intro

Bonjour, je vous propose un petit tutoriel complet pour l’installation d’un serveur VPS sur OVH

avec une distribution Debian 9 en eng, un wordpress et un SSL

Tout d’abord pourquoi cette solution et pas une solution « clé en main » OVH, alors la solution clé en main est certainement au même prix, mais c’est quand même plus fun et geek de faire tout par soi-mem. Nous avons certainement également la sensation de contrôle, ce qui ne doit pas être trop faux.

Quel est le prix de cette geekerie, alors difficile de s’y retrouver les prix sur le site sont en HT, avec souvent des promos, mais en gros si j’enlève les promos je passe en TTC pour un domaine en .fr, un en .com, un VPS, et un SSL payant pour le site en .fr le tout est a 70€/ans.

Donc c’est parti pour le montage de cette solution:

NB: Même si je suis un professionnel IT, je ne suis pas un ultra expert et mes définitions sont ce que j’en ai compris,
vous avez peut-être des précisions à apporter dans ce cas n’hésitez pas. J’ai tendance à être pragmatique,
mais je peux parfois faire des raccourcis. Par contre, si c’est pour critiquer sans construction passez votre chemin. Merci.

Commande d’un VPS sur OVH et d’un domaine

Mais au fait c’est quoi un VPS ?

VPS c’est l’acronyme de Virtual Private Server, heu oui OK, mais encore,

Bon en termes plus simple enfin je l’espère, c’est votre serveur privé hébergé par un tiers (dans un datacenter, sur une machine physique pour laquelle on installe un logiciel de virtualisation qui permet alors l’installation d’autre machine, que l’on appelle virtuelle) pour lequel vous avez un accès complet via SSH et que vous administrez comme vous le souhaitiez.

Bon si je vous ai perdu,

il est peut-être temps de s’arrêter là pour vous et de revenir plus tard après l’écoute de select-etoile (teasing je n’ai pas encore lancé ce podcast, dont l’objectif est de vous expliquez simplement les termes de l’informatique rdv sur select-etoile.fr )

Si vous êtes encore là alors go, préparez le café.

Avec un VPS vous vous retrouvez donc avec une machine virtuelle dédiée à votre utilisation, et là vous choisissez le système d’exploitation en gros votre distribution Linux, et l’utilisation dans notre cas un site wordpress.

Alors il n’y a pas que OVH , plusieurs services de VPS existe, mais j’aime bien OVH, on choisit son datacenter en France par exemple et le service est assez bien fichu.

Donc … let’s go…

Premièrement on commande un VPS SSD sur OVH

version simple au plus bas prix, c’est largement suffisant pour une utilisation basique.

https://www.ovh.com/fr/vps/vps-ssd.xml

C’est assez simple je ne vais pas vous décrire la procédure ici.

Sauf le choix de la distribution dans ce tuto, je choisis un VPS avec:

Debian V9 en version Anglais.

(vous pouvez choisir l’install par défaut d’un CMS (ici WordPress) mais c’est moins fun)

Une fois votre VPS en “main”, vous allez être en mesure de l’administrer via SSH de préférance, ou via l’interface KVM de votre espace OVH.

Si vous êtes sous Linux ou MacOS alors c’est simple la connexion ssh au serveur VPS se fait via le terminal.

(si vous êtes sous Windows vous avez Putty — si vous êtes sous Windows 10 alors je vous conseille l’installation de Linux dans powershell, puis on se retrouve alors avec un terminal équivalent — chercher un tuto d’install sur votre moteur de recherche préféré)

Pour la commande du domaine c’est pareil je ne détaille pas ici, c’est assez simple sur OVH, et les prix sont corrects.

Connexion et mise à jour du VPS

Alors on se connecte en ssh via le terminal avec l’instruction suivante:

SSH root@nomduserveur

Si vous passer par l’interface de OVH et la console KVM, un changement du clavier de Qwerty vers Azerty est necessaire :

Via la commande:
dpkg-reconfigure keyboard-configuration

Installer les mises à jour de Debian

apt updateapt upgradeapt dist-upgrade

Ajout utilisateur et blocage SSH du ROOT et installation de Fail2Ban

Création d’un utilisateur autre que root, et bannissement de la connexion ssh en root

adduser nomUtilisateur

Suivre les instructions, mot de passe, nom, … et répondre Y

On va maintenant interdire la connexion en root au ssh

Nous allons éditer le fichier:

/etc/ssh/sshd_config

(j’utilise nano, mais vous pouvez utiliser VIM si cela vous convient mieux)

Donc :

nano  /etc/ssh/sshd_config

Et l’on modifie la ligne : PermitRootLogin yes en PermitRootLogin no

On sauvegarde via ctrl+x et Y (si nano)

Puis on redémarre le service:

service ssh restart

On quitte le ssh et on se relog via

ssh nomUtilisateur@nomduserveur

Une fois connecté, on passe en root via la commande su

(vous avez alors un # à la place d’un $)

Nous allons maintenant installer fail2ban, pour sécuriser les attaques en bloquant à 5 tentatives / 10min et potentiellement blacklister des IP

apt install fail2ban

Une fois installé, nous allons réaliser la configuration en éditant:

nano /etc/fail2ban/jail.conf

On ajoute son mail sur les lignes: sender= et destmail=

(au passage configurer la redirection de mail avec votre nom de domaine et utiliser alors celle-ci)

On laisse les autres options par défaut et l’on redémarre le service:

service fail2ban restart

On install et on test sendmail pour valider l’envoi de mail par la suite si attaque:

apt install sendmailecho "Subject: test" | /usr/lib/sendmail -v mon-adresse-mail@exemple.com

Commande d’un SSL et configuration

Vous pouvez bien sûr utiliser let’s encrypt mais nous allons plutôt passer par un service payant pour le SSL, je vous propose de passer par NAMECHEAP qui reste un bon service pour un prix intéressant de moins de 7€/ans.

Nous n’aborderons pas les SSL multidomaine, et autre, nous restons sur un basique de type DV, ou nous ne validerons donc que le domaine. Mais c’est largement suffisant.

Génération de votre CSR (clé avec fichier.csr et .key, utiliser le service de gandi suivant

https://www.gandi.net/ssl/create/openssl?lang=fr

Remplissez les informations (seulement les infos connues) cela vous donne une ligne de commande, que vous lancé depuis votre répertoire home/nomUtilisateur.

Vous générer alors un fichier .csr et un .key

On récupérer tout cela en ftp

(via FileZilla en mode sftp et vos identifiants ssh du nomUtilisateur)

Prenez votre SSL sur NameCheap le premier le moins cher suffit

https://www.namecheap.com/security/ssl-certificates.aspx

Dans la config on vous demande vos données du CSR, puis votre email associé au domaine, et hop vous recevez les fichiers de configuration nécessaire. On garde le .zip reçu au chaud et l’on voit tout cela plus tard.

Configurer le DNS

Sur l’interface OVH c’est assez simple

On configure un enregistrement de type A avec l’IP du serveur

Installation de apache2,php, et wordpress

De retour sur la console SSH:

Installation de la base de donnée, de PHP et du serveur APACHE via les commandes suivantes,

apt install mariadb-client mariadb-serverapt install php7.0 php7.0-mysqlapt install apache2 libapache2-mod-php7.0

Pour une raison que j’ignore il faut relancer l’install:

apt install --reinstall php7.0 php7.0-mysqlapt install --reinstall apache2 apache2-mod-php7.0

On ajoute un fichier php pour valider le fonctionnement:

cd /var/www/htmlrm index.htmlnano index.php

Et l’on ajoute le code suivant:

<?php phpinfo(); ?>

On vas alors à l’adresse de notre site et si tout est OK on voit alors une page d’information php.

On install phpmyadmin (pour l’administration graphique de notre base de données)

apt install phpmyadmin

Si cela fonctionne, passage sur le site/phpmyadmin, et vérification

Si tout est ok alors on se congratulate on prend un 10eme café et on lance l’installation de wordpress

Création de la database: (sur le terminal)

mysql -u root -p

(pas de mot de passe), on arrive alors sur la partie SQL,

On créé un utilisateur, avec un son mot de passe, on remplace bien sur userpassword, le reste on peut garder tel que.

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'userpassword';CREATE DATABASE wp_database;GRANT ALL ON `wp_database`.* TO `wpuser`@`localhost`;FLUSH PRIVILEGES;Exit;

Téléchargement et installation de wordpress:

Dans votre rep de download:

wget https://wordpress.org/latest.tar.gz

Dezipons, enfin detarons ici.

tar xpf latest.tar.gz

Supprimons le contenu du répertoire html et l’on copie alors les information de wordpress

rm -rf /var/www/htmlcp -r wordpress /var/www/html

On met alors à jour les bon droits

chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

Lançons la configuration de WordPress depuis le site, avec les données précédentes pour la base de données. Le reste c’est du WordPress.

installation du SSL pour HTTPS

Activons le ssl pour notre serveur Apache2:

a2enmod ssla2ensite default-ssl

Maintenant nous allons redemarrer apache,

service apache2 restart

Dezippez les fichiers reçu par mail depuis notre fournisseur de SSL et on les transferts sur le VPS, avec la clé fichier .key (à renommer avec un _fr si en .fr)

Si le zip reçu n’a pas de bundle alors on combine les fichiers par la commande:

cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >> bundle.crt

Ensuite on modifie le fichier .crt de son site en .pem

openssl x509 -in nom_du_site_fr.crt -out nom_du_site_fr.pem -outform PEM

On copie ensuite les fichiers dans les répertoires suivant:

(le rep chaineinter sera à créer)

  • /etc/ssl/certs/nnom_du_site_fr.pem
  • /etc/ssl/private/nom_du_site_fr.key
  • /etc/apache2/chaineinter/bundle.crt

Dans le rep: /etc/apache2/sites-available

On édite le fichier defaut, default-ssl.conf et on ajoute ceci après l’instruction SSLEngine

SSLCertificateFile /etc/ssl/certs/nnom_du_site_fr.pemSSLCertificateKeyFile /etc/ssl/private/nom_du_site_fr.keySSLCACertificateFile /etc/apache2/chaineinter/bundle.crt

Redemarrer apache:

service apache2 restart

On verifie si tout est OK, en tapant https://nom_du_site.fr

Si ok, on install l’extension ssl à wordpress et l’on modifie les infos de site dans général de wordpress pour inclure https on install également l’extension Really simple ssl

Optimisons maintenant notre sécurité

(merci à @JSide pour l’aide sur ce point lord d’un jeudi geek )

vérifions notre note sur le site: https://www.ssllabs.com/ssltest/

Pour le moment le site est en B, nous allons donc ajouter des informations à notre configuration de fichier SSL et redemmarrer Apache.

Cette optimisation est valable pour Apache version 2.4 (verifiez votre version via la commande: apache2 -v)

On édite donc notre fichier de configuration ssl, situé dans notre cas dans le répertoire: /etc/apache2/sites-available/

# intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA
-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128
-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE
-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE
-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE
-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE
-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE
-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256
-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES
-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256
-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
# -- Securit supplementaire
SSLOptions +StrictRequire
# -- For Apache 2.4
SSLCompression off
SSLSessionTickets off
# enable only secure protocols:# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"

on redemarre alors notre service apache2,

service apache2 restart

On referifie alors notre site sur : https://www.ssllabs.com/ssltest/

Nous devrions maintenant obtenir un score A+ ce qui fait de notre site https un site bien sécurisé,
attention je vous rappel que l’on securise les protocoles de communications en chiffrant les échanges mais en aucun cas le serveur.

Merci pour votre lecture.

Sources :

GDM-Pixel.fr

@JSide

linuxconfig.org

SebBossoutrot

un peu de tout, des astuces, lifestyle, humeurs, …

Sébastien BOSSOUTROT

Written by

IT professionnal and geek.

SebBossoutrot

un peu de tout, des astuces, lifestyle, humeurs, …

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade