Sécuriser une interface de Nextcloud avec Let’s Encrypt

Sécuriser une interface de Nextcloud avec Let’s Encrypt

Dernier tutoriel, concernant l’installation d’une instance Nextcloud. Nous allons voir comment sécuriser une interface Nextcloud en activant notamment le HTTPS. Let’s encrypt sera utilisé pour générer un certificat.

Prérequis

Pour réaliser ce tutoriel vous devrez disposer :

Sécuriser une interface de Nextcloud avec Let’s Encrypt

La meilleure option pour sécuriser une interface Nextcloud c’est d’obtenir un certificat SSL via Let’s Encrypt.

HTTPS nous aide à prévenir les attaques de type « man in the middle » et le sniffing de mot de passe.

Commençons par installer le client Certbot (Certbot est un nouvel outil de l’EFF permettant de gérer les certificats SSL sur les serveurs. Il est aujourd’hui dédié aux certificats gratuits de Let’s Encrypt). Le client s’appelle toujours letsnecrypt dans le référentiel Ubuntu. La commande suivante installera le client et le plugin apache.

# apt install letsencrypt python-letsencrypt-apache

Configuration de SSL pour Nextcloud avec Let's Encrypt.

Exécutez maintenant la commande suivante pour obtenir un certificat TLS / SSL gratuit.

# sudo letsencrypt --apache --agree-tos --email your-email-address -d nextcloud.your-domain.com
Attention !!! remplacer your-email-address et nextcloud.your-domain.com par vos valeurs.

obtenir un certificat TLS / SSL gratuit avec Let's Encrypt

Vous êtes invité à partager votre adresse mail à l’Electronic Frontier Foundation. J’ai choisi N.

Ensuite vous devez choisir un virtual host auquel sera associé votre nom de domaine pour votre instance Nextcloud. Normalement vous verrez d’afficher tous vos potentiels vhost. Ici celui qui me concerne est nextcloud.conf. Je choisis donc 2

obtenir un certificat TLS / SSL gratuit avec Let's Encrypt

La configuration SSL est créée dans les fichiers de configuration Apache. J’ai choisi de rediriger tout le trafic vers HTTPS (Redirect).

obtenir un certificat TLS / SSL gratuit avec Let's Encrypt

Un message vous indique la création de votre certificat ainsi que sa date d’expiration. Ainsi que l’emplacement de tous les fichiers de configuration SSL.

obtenir un certificat TLS / SSL gratuit avec Let's Encrypt

Maintenant, visitez à nouveau votre site Nextcloud. Vous verrez qu’il est automatiquement redirigé vers https.

Quelques commandes utiles pour Let’s Encrypt

Let’s Encrypt fourni de nombreuses commandes pour gérer ses certificats SSL et faire quelques opérations de maintenance.

Stockage des certificats.

Tout d’abord vos certificats sont stockés dans /etc/letsencrypt/live/votre-domaine

Emplacement des certificats Let's Encrypt sur votre linux

Vérifier la date d’expiration de vos certificats.

Une commande bien pratique, qui pourra être inséré dans un script pour vérifier la date d’échéance d’un certificat.

#./certbot certificates

Vérifier la date d’expiration de vos certificats Let's Encrypt

Localisation des logs.

A chaque utilisation de commandes, des logs sont générés dans le fichier : /var/log/letsencrypt/letsencrypt.log

Vous pouvez largement le consulté, lorsque vous avez des messages d’erreurs ou des soucis lors de l’installation d’un certificat.

Renouvellement d’un certificat.

Les certificats délivrés par Let’s Encrypt sont valides pendant 90 jours. L’utilitaire Certbot fournit une option renew qui permet de renouveler vos certificats présents sur votre serveur ET si seulement ceux-ci expirent dans moins de 30 jours.

#certbot renew

Renouvellement d’un certificat let's Encrypt avec Certbot

Je vous conseille de créer une tâche cron qui permet de renouveler automatiquement si besoin votre certificat.

Une entrée dans cron se paramètre avec les champs suivants dans l’ordre :

  • minute,
  • heure,
  • jours dans le mois,
  • mois,
  • jour de la semaine,
  • la commande à lancer.

Tâche CRON à insérer (La tâche ci-dessous permet de vérifier la validité du certificat tous les lundi à 23h00, ensuite le résultat de la commande sera mis dans un fichier de log)

# crontab -e
# 00 23 * * 1 /usr/bin/certbot renew >> /var/log/certbot-renew.log

Création d'une tâche CRON pour renouveler le certificat Let's Encrypt automatiquement

Révocation d’un certificat.

Pour révoquer un certificat, il est nécessaire d’exécuter la commande suivante en remplaçant mondomaine.com par votre domaine /etc/letsencrypt/live/mondomaine.com/cert.pem :

# certbot revoke --cert-path /etc/letsencrypt/live/mondomaine.com/cert.pem

Supprimer un certificat de son serveur grâce à la commande certbot revoke

Paramétrer Nextcloud pour votre nouveau nom de domaine

Si vous avez essayé de vous connecter à votre instance Nextcloud, vous devriez avoir ce message :

Paramétrer Nextcloud pour votre nouveau nom de domaine en HTTPS

C’est une protection de Nextcloud. Il faut donc ajouter votre nouveau nom de domaine dans le fichier config.php. Le chemin complet est (pour une installation par défaut) /var/www/html/nextcloud/config/config.php

Ajouter un nouveau nom de domaine autorisé pour accéder à Nextcloud

La variable trusted_domains est un tableau qu’il faudra modifier en ajoutant les noms de domaine que vous souhaitez rendre accessible pour votre instance Nextcloud.

Sécuriser son installation Nextcloud en activant les headers HSTS

Par défaut, la configuration SSL Apache n’ajoute pas d’en-tête de sécurité HSTS. Pour ajouter une en-tête HSTS, éditez le fichier de configuration SSL.

# vim /etc/apache2/sites-available/nextcloud-le-ssl.conf

Puis rajouter ce code après la ligne SSLCertificateKeyFile :

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; preload"
</IfModule>
Sécuriser son installation Nextcloud en activant les headers HSTS

Puis ensuite activer le module header et redémarrer le service Apache.

# a2enmod headers
# service apache2 restart

Rappel sur le HSTS :

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.

Lorsque la politique HSTS est active pour un site web, l’agent utilisateur compatible opère comme suit :

Remplace automatiquement tous les liens non sécurisés par des liens sécurisés. Par exemple, http://www.exemple.com/une/page/ est automatiquement remplacé par https://www.exemple.com/une/page/ avant d’accéder au serveur.

Si la sécurité de la connexion ne peut être assurée (par exemple, le certificat TLS est auto-signé), celui-ci affiche un message d’erreur et interdit à l’utilisateur l’accès au site à cause de cette erreur.

La politique HSTS aide à protéger les utilisateurs de sites web contre quelques attaques réseau passives (écoute clandestine) et actives. Une attaque du type man-in-the-middle ne peut pas intercepter de requête tant que le HSTS est actif pour ce site.

Source : https://fr.wikipedia.org

Mettre à niveau HTTP/1.1 vers HTTP/2

HTTP / 2 est devenu le nouveau standard HTTP depuis 2015 et offre plusieurs améliorations par rapport à HTTP/1.1. L’un des avantages de HTTP/ 2 est qu’il utilise une communication binaire au lieu d’une communication textuelle entre le serveur et le navigateur, ce qui rend le transfert de données plus compact à transmettre. Il vous permet également de répondre à plusieurs demandes via une seule connexion TCP grâce au multiplexage.

Si vous voulez en savoir plus sur les avantages de HTTP / 2 cliquer sur ce lien : HTTP/2 Frequently Asked Questions.

Activer HTTP/2 dans notre configuration Nextcloud est simple. Commencez par ouvrir votre fichier d’hôte virtuel SSL avec votre éditeur préféré :

#vim /etc/apache2/sites-available/nextcloud-le-ssl.conf

Insérez maintenant la ligne Protocols h2 http/1.1 sur une nouvelle ligne située sous DocumentRoot /var/www/html/nextcloud/.

Mettre à niveau HTTP/1.1 vers HTTP/2 pour votre instance Nextcloud

Après avoir enregistrer le fichier, il va falloir effectuer quelques étapes pour activer correctement http/2 :

Faire utiliser FastCGI au serveur Apache :

#apt install php7.0-fpm
#a2enmod proxy_fcgi setenvif
#a2enconf php7.0-fpm
#a2dismod php7.0
#service apache2 restart

Utiliser MPM Event au lieu de Prefork (Les Modules Multi-Processus (Multi-Processing Modules) sont des modules utilisés par le serveur web Apache HTTP Server qui définissent la manière d’accepter les requêtes des clients ainsi que la façon de se les répartir entre les différents processus Apache.)

#a2dismod mpm_prefork
#a2enmod mpm_event
#service apache2 restart
#service php7.0-fpm restart
Attention !!! La version d’Apache minimum pour utiliser le module http2 est la 2.4.17, mais pour une meilleure stabilité il est conseillé d’utiliser la version 2.4.23.

Pour connaitre sa version d’Apache, il faut utiliser la commande ci-dessous :

#apachectl -V

Connaitre la version du serveur Apache sur son serveur Linux

 

Si vous avez le message d’erreur : error module http2 does not exist, il va falloir mettre à jour votre Apache. Voici un exemple de commandes à essayer sur votre distribution Ubuntu.

#add-apt-repository -y ppa:ondrej/apache2
#apt-key update
#apt-get update
#apt-get --only-upgrade install apache2 -y

Activer le module Apache mod_http2 :

#a2enmod http2
#service apache2 restart

Activer le module Apache mod_http2

Maintenant pour savoir si votre instance Nextcloud supporte http/2, vous pouvez utiliser ce site : HTTP/2 Test.

Test du HTTP/2 sur votre instance Nextcloud

Attention !!! N’oubliez pas de rajouter à la fin du fichier php.ini les options de OPCache. La version de PHP ayant changée pour activer http/2 pour passer vers php-fpm. Le fichier php.ini se trouve normalement dans /etc/php/7.0/fpm/

Rappel !!! Les options à rajouter son :

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Le service php-fpm doit être redémarré.

# service php7.0-fpm restart

Tâche CRON

Si votre instance NextCloud est utilisé dans un grand environnement, il est conseillé de modifier la gestion des tâches en arrière-plan en passant de AJAX à CRON.

Pour changer ce paramètre, il faut aller dans Administration -> Paramètre de base -> Tâche de fond.

 

Modifier la gestion des tâches de fond sur Nextcloud.

signature manuelle Guillaume

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *