Chap 1. Prise en main du RPi et installation de Mate sur un Raspbian
Chap 2. Installation de OwnCloud sur un Raspberry Pi
Chap 3. Sécuriser votre RPi
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Chap 5. Connection SSH
Chap 6. Les fichiers journaux
Chap 7. Let’s Encrypt (LE)
Chap 8. Ajout d’un disque dur externe et migration de données
Chap 9. Suppression et ajout d’une interface graphique
Chap 10. Rappel sur les différentes étapes pour mettre en place un server dédié à Owncloud
Chap 4. Accès au serveur Web Owncloud à partir de son nom de domaine
Avant d’aller plus loin, je souhaite rappeler que « internet c’est la jungle ». Tout et n’importe quoi peut-y arriver. Il ne faut donc pas prendre la question de sécurité à la légère. Prennez donc toutes les précautions nécessaires, comme mettre régulièrement à jour vos serveurs, etc.
1. Configuration du réseau
Matériel
- Raspberry Pi 2 B
- Carte micro SD, Classe 10
- Câble HDMI
- Câble Ethernet
- Télé ou moniteur PC, avec support HDMI (pour l’installation de Raspbian uniquement)
- Disque dur Externe USB 3 autonome, raccordé à une source d’alimentation (optionnel)
- Un parefeux (optionnel)
Configuration
- Adresse IP Publique (internet) statique, ou dynamique (nécessite l’utilisation d’un script)
- Adresse IP Privée statique (LAN) pour le RPi (optionnelement, pour le parefeux aussi)
- Nom de domaine (NetLibre, nsupdate)
- Certificat SSL (OpenSSL)
Topologie du réseau
Pour une meilleure sécurité, assurez-vous d’avoir votre serveur Owncloud dans la zone DMZ (ou zone démilitarizée) de votre réseau. Ceci n’est pas une vulnérabilité, mais bien au contraire. Cette fonctionnalité vous permet de séparer le réseau accessible à partir d’internet, de votre réseau local.
Une fois le DMZ mis-en place, vous ne devriez pas vous soucier du port forwarding. A moins que vous ne souhaitez accéder à votre site, qu’à partir d’un port autre que les ports 80 et 443.
Si vous n’avez que le RPi sur le DMZ (fig 1), au niveau de la configuration du routeur de votre FAI (fournisseur d’accès à internet), vous devriez avoir l’option d’entrer l’adresse IP de votre RPi. Si par contre, vous avez un parefeux sur votre réseau (fig 2), dans la zone DMZ bien sûr, il vous faudra renseigner l’adresse IP de ce parefeux dans la configuration du DMZ du routeur FAI, puis de faire un NAT pour rediriger le traffic vers vos serveurs. Je ne vais pas rentrer dans les détails ici.
De ce fait, dans les deux cas, assurez vous d’assigner une adresse IP privée fixe au RPi, mais aussi à votre parefeux si vous en avez un.
Assigner une adresse IP fixe au RPi
Brancher votre RPi directement au routeur FAI afin de récupérer les valeurs données par « ip add show dev eth0 » (anciennement connu par « ifconfig’).
$ ip add show inet 10.1.2.3/24 brd 10.1.2.255 scope global eth0
Créer ensuite un fichier /etc/network/interfaces.d/eth0, dans lequel on va y ajouter les informations données par la commande précédente. La plus d’information concernant la configuration de l’interface réseau, je vous recommande de lire cet article sur le site officiel debian.
$ sudo vim /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 10.1.2.3 netmask 255.255.255.0 gateway 10.1.2.254 $ sudo ifup -v eth0
2. Accéder à votre server web via un nom de domaine
L’étape suivante serait d’associer un nom facile à retenir, qui va pointer vers l’adresse ip publique de votre routeur, tel que MaPage.monDomaine.fr.
Comme serveur DNS pour avoir un nom de domain, j’ai choisi de m’enregistrer sur NetLib.re (projet francophone), et nsupdate.info (projet anglophone) pour les raisons suivantes:
– Nom de domaine gratuit
– Codes sources du projet en opensource
– Facilité d’inscription
– Aucune compétence particulière nécessaire pour l’utilisation du site
Enregistrement de type « A » (‘A Record’ en anglais)
Notre priorité étant de mapper le domaine MaPage.monDomaine.fr à notre adresse IP publique, il nous faut donc un enregistrement de Type A, si l’adresse IP Publique est sous format IPv4, sinon de Type AAAA pour l’IPv6.
Pour les autres types d’enregistrement (SRV et MX, etc.), je ne vais pas en parler puisqu’on en a pas besoin pour l’instant.
Connectez-vous sur la site NetLibre. Noter qu’il y a déjà deux champs pré-remplis sur cette page, qu’il faut éviter de supprimer : ns0.arn-fai.net. et alsace.tetaneutral.net.
Remplissez les différents champs comme suit:
Type: A Nom: @ TTL: 3600 Valeur: <monadress IP publique
>
Une ligne supplémentaire vous confirmant l’ajout de l’information, devrait s’afficher sur la page.
Une fois que vous avez compris comment çà marche, vous pouvez vous enregistrer aussi sur nsupdate.info puis refaire la même procédure afin d’avoir une adresse en .nsupdate.info.
Vérification de la résolution de nom
Patientez quelques 5-10 minutes, puis vérifier si vous pouvez accéder à votre page en utlisant le nom de domaine. Si rien ne s’affiche, faite un ping ou utiliser cet outil internet.
$ ping .netlib.re
L’outil internet ci-dessous donne les mêmes résultats qu’une simple commande nslookup.
Domaine de confiance (Trusted domain)
Ne vous inquiétez pas du message affiché lors de la première connection sur MaPage.monDomaine.fr (.netlib.re), qui nous informe que domaine n’est pas de confiance.
Pour y remédier, il suffit d’ajouter le nom de domaine de votre page, ainsi que l’adresse IP publique de votre site dans le fichier /var/www/html/owncloud/config/config.php.
$ sudo vim /var/www/html/owncloud/config/config.php 'trusted_domains' => array ( 0 => 'localhost', 1 => '10.1.2.3', 2 => 'Mon.Adresse.IP.Publique', 3 => '.netlib.re', 4 => '.nsupdate.info', ), $ sudo service apache2 restart
Adresse IP dynamique
Vous ne le savez peut être pas mais, l’adresse IP assignée par les FAIs à notre routeur peut changer à une fréquence très variable. Du genre une fois par jour/mois, etc. A la base, cette règle a été conçu pour empêcher certaines personnes malhonnêtes d’attaque continuellement la même adresse IP.
Je n’ai pas trouvé de solution viable pour l’instant. Je ne vais donc pas me lancer dans les explications sur comment faire pour y remédier au problème d’adresse IP dynamique.
Si vous avez une meilleure solution autre que les scripts proposés sur certains sites qui, généralement envoient les informations de connection non chiffrées à notre serveur de domaine, entre autre le mot-de passe, je suis preneur.
3. Quelques conseils de sécurité
Si vous avez suivit l’étape d’installation de Owncloud sur un RPi dans cet article, vous n’avez plus besoin de réactiver le mode « a2enmod ssl » du server Apache.
Vérifier que vous avez bien accès à votre page en utilisant https://.netlib.re:/owncloud (si vous n’avez pas pas de redirection de port, le lien se résume à https://.netlib.re/owncloud).
Un avertissement s’afficher à l’écran si vous vous connectez en HTTPs, pour vous prévenir que le serveur auquel vous voulez accéder n’a pas de certificat de sécurité valide.
Pour pouvoir continuer la visite de la page, et faire fi du message, cliquer tout simplement sur Proceed to MaPage.netlib.re (unsafe).
Supprimer les informations sur les versions de vos serveurs
Il y a plusieurs façon d’afficher une page d’erreur sur une page. J’ai choisi une basique, en demandant au navigateur d’afficher la page http://.netlib.re:443/owncloud.
Pour y remédier, ajouter « ServerSignature Off » à la fin du fichier /etc/apache2/apache2.conf.
Taper ensuite,
$ curl -v http://.netlib.re:/owncloud
Ici, c’est la commande « ServerTokens Prod » qu’il faut ajouter dans le fichier de configuration de Apache.
En conclusion, pour éviter d’afficher les informations des différents serveurs (type, version, etc.), désactiver leurs signatures dans /etc/apache2/apache2.conf.
$ sudo vim /etc/apache2/apache2.conf
ServerSignature Off
ServerTokens Prod
Ce n’est pas tout, vérifier aussi que l’option d’affichage de la version de php est bien désactivée, ce qui devrait être le cas par défaut.
$ sudo vim /etc/php5/apache2/php.ini
Faite une recherche en tapant
/expose
Vous devriez avoir « expose_php = Off », si ce n’est pas le cas, remplacer le On par Off.
Redémarrer le serveur Apache.
$ sudo service apache2 restart
4. Avant d’aller plus loin
Je vous propose de lire l’article « Développement et administration des services réseaux« , à partir duquel j’ai retirré les informations ci-dessous.
apache2.conf : le fichier de configuration générale (ancien httpd.conf). C’est à partir de lui que tous les autres fichiers sont chargés
envvars : le fichier utilisé pour définir des variables d’environnement propres à Apache
ports.conf : le fichier qui contient la directive listen qui spécifie les adresses et les ports d’écoutes
mods-available/ : le dossier contenant les modules disponibles
mods-enabled/ : le dossier contenant les modules activés
sites-available/ : le dossier contenant les fichiers de configuration des sites disponibles (la liste des vhosts installés)
sites-enabled/ : le dossier contenant les fichiers de configuration des sites activés (la liste des vhosts utilisés)
Vhosts fait référence aux hôtes virtuels.
Nous allons ensuite associer l’adresse IP publique de notre serveur Owncloud à un nom de domaine sur internet (de préférence, choisissez-en deux au cas où l’un des URLs devient inaccessible).
Je me suis enregistré sur netlib.re, puis nsupdate.info pour les raisons suivantes. Un, à cause de la facilité d’utilisation pour les débutants. Deux, pour leurs gratuités. Et trois, à cause de la disponibilité de leurs codes sources.
Pour accéder à mon serveur, je n’ai donc plus qu’à taper
.netlib.re
.nsupdate.info
5. Accéder à Owncloud en SSL (HTTPS)
Pour rappel, le HTTPS est une combinaison entre les protocoles HTTP et SSL/TLS, pour chiffrer les informations échangées entre notre poste et le serveur visité. Ceci justement, dans le but de créer une connection avec une sécurité « résonnable » à travers le réseau pour protéger les utilisateurs, ainsi que les données qui y transitent.
Si vous avez besoin de plus de sécurité, vous devriez utiliser un certificat signé par une authorité de certification (CA).
Création d’un certificat SSL
Ci-dessous la marche à suivre pour mettre en place un Site Web sécurisé via protocole SSL. J’ai choisi la méthode de création de Certificat auto-signé, option « -x509 » avec l’utilisation de la commande openssl, qu’on va placer dans le dossier /etc/ssl.
$ ssh .netlib.re $ sudo mkdir -p /etc/ssl/localcerts $ sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/owncloud.pem -keyout /etc/ssl/localcerts/owncloud.key
Le certificat créé avec option « -days 365 », sera valide pour 1an. Si comme moi, vous ne souhaitez pas protéger votre clé privée par un mot de passe, ajouter l’option « – nodes » à la commande openssl.
Modifier ensuite les permissions du dossier /etc/ssl/localcerts, qui contient les deux clés owncloud.key et owncloud.pem, afin que personne d’autre que le proprétaire du dossier (ici Root), n’a accès à son contenu.
$ ls -l /etc/ssl/localcerts/ total 8 -rw-r--r-- 1 root root 1704 Mar 25 06:03 owncloud.key -rw-r--r-- 1 root root 1440 Mar 25 06:03 owncloud.pem $ sudo chmod 600 /etc/ssl/localcerts/owncloud* $ ls -l /etc/ssl/localcerts/ total 8 -rw------- 1 root root 1704 Mar 25 06:03 owncloud.key -rw------- 1 root root 1440 Mar 25 06:03 owncloud.pem
/!\ Les permissions pour accéder à ces clés tel que présenté ci-dessus, a pour but de limiter leurs accès à une tierce personne. Il ne faut surtout, mais SURTOUT pas partager votre clé privée, ni la perdre d’ailleur.
Activer le mode ssl,
$ sudo a2enmod ssl
Un message s’affichera avec la liste des dépendances activées, si le mode ssl est déjà activé.
Considering dependency setenvif for ssl:
Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Module socache_shmcb already enabled Module ssl already enabled
Configuration de Apache2
Il n’y a rien à modifier au niveau des ports d’écoute, puisque Apache2 est configuré par défaut pour écouter sur les ports 80 et 443.
$ cat /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
Listen 443
Listen 443
Sauvegarde des fichiers de configuration
N’oubliez pas de faire une sauvegarde de vos fichiers de configuration, quelqu’il soit (owncloud.conf, config.php, apache2.conf, etc.), avant de les modifier.
1. Fichier de configuration de owncloud
$ sudo cp /etc/apache2/sites-available/owncloud.conf /etc/apache2/sites-available/owncloud.bak
2. Fichier de configuration du serveur web
$ sudo cp /etc/apache2/apache2.conf /etc/apache2/sites-available/apache2.bak
3. Tableau de configuration PHP du serveur owncloud
$ sudo cp /var/www/html/owncloud/conf/config.php /var/www/html/owncloud/conf/config.bak
4. Fichier .htaccess
Dans la liste de fichiers de configuration, il faut absolument ne pas toucher au fichier .htaccess comme indiqué sur dans le tutoriel de Apache. Par contre, rien ne vous empêche d’en faire une copie de sauvegarde.
A titre d’information, dans le dossier contenant l’option « AllowOverride All », /var/www/html/owncloud/ par exemple (cf. « Sécuriser notre Hôte Virtuel » qu’on verra un peu plus tard dans ce chapitre), les règles données par .htaccess vont être prioritaires aux directives du serveur Apache.
AllowOverride All
Ce qui n’empêche pas le serveur Apache d’y appliquer d’autres règles qui ne rentrent pas en conflit avec ceux du .htaccess, dans le même dossier.
Recharger la configuration d’Apache
Si vous modifier l’un des fichiers de configuration de votre serveur, n’oublier pas de redémarrer le serveur Apache.
$ sudo service apache2 restart
Configuration SSL
Vérifier dans un premier temps la version de chacun de vos serveurs.
Version de Apache:
$ apachectl -V Server version: Apache/2.4.10 (Raspbian) $ aptitude show apache2 Version: 2.4.10-10+deb8u4
Version de OpenSSL:
$ openssl version OpenSSL 1.0.1k 8 Jan 2015 $ aptitude show openssl Version: 1.0.1k-3+deb8u4
Version du PHP:
$ php --version PHP 5.6.17-0+deb8u1 (cli) (built: Jan 24 2016 12:25:22) $ aptitude show php5 Version: 5.6.17+dfsg-0+deb8u1
Générer ensuite une configuration SSL convenable, en fonction de la version de vos serveurs, à partir de ce lien.
Sécuriser notre Hôte Virtuel
Rediriger tous les traffics HTTP (port 80) vers HTTPS (port 443).
Pour ce faire, je vous suggère de supprimer tout le contenu du fichier /etc/apache2/sites-available/owncloud.conf, puis de le remplacer par celui ci-dessous, en l’adaptant à vos besoins.
Pour rappel, mon adresse IP publique est liée à deux URLs différents. Un en netlib.re, puis l’autre en nsupdate.info.
$ sudo vim /etc/apache2/sites-available/owncloud.conf
# Force port redirecting (HTTP to HTTPS) ServerName .netlib.re Redirect permanent / https://.netlib.re ServerName .nsupdate.info Redirect permanent / https://.nsupdate.info # Web server configuration ServerName .netlib.re ServerAlias .nsupdate.info DocumentRoot /var/www/html/owncloud/ # SSL configuration SSLEngine on SSLCertificateFile /etc/ssl/localcerts/owncloud.pem SSLCertificateKeyFile /etc/ssl/localcerts/owncloud.key #SSLCACertificateFile /path/to/all_ca_certs # Restrict/deny/allow access to certain directories Options +FollowSymLinks AllowOverride All Dav off SetEnv HOME /var/www/html/owncloud SetEnv HTTP_HOME /var/www/html/owncloud # just in case if .htaccess gets disabled Require all denied # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000)
Quelques notes concernant cette configuration:
- DocumentRoot définit la racine des documents pour chaque hôte virtuel
- SSLEngine doit être activé, afin que le server web puisse utiliser le SSL
- SSLCertificateFile et SSLCertificateKeyFile définit le chemin d’accès à nos certificats et clés
- SSLCACertificateFile à acitiver, si vous avec un certificat signé par un CA
6. Sécurités et avertissements sur les configurations
L’ajout de la règle en HSTS dans l’hôte virtuel n’est pas une bonne idée. D’autant plus que celà ne va pas supprimer l’avertissement qui s’affiche dans la page d’administration de votre Owncloud.
Dans /etc/apache2/apache2.conf, ajouter
$ sudo vim /etc/apache2/apache2.conf
#
# Force all traffic to remain on HTTPS
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
#
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
#
# Force people coming to your site to use HTTPS
#
# 1. Enable the Rewrite capabilities
#
RewriteEngine On
#
# 2. Check to make sure the connection is not already HTTPS
#
RewriteCond %{HTTPS} !=on
#
# 3. Redirect users from their original location, to the same location but using HTTPS.
# i.e. http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
#
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Profitons-en par la même occasion pour régler aussi le problème de Mémoire cache.
$ sudo apt-get install php5-apcu
$ aptitude show php5-apcu
Version: 4.0.7-1
Sans passer par l’interface graphique, une méthode pour vérifier si le memcache est configuré, le résultat de la commande ci-dessous doit être égale à 1 si c’est activé. Sinon, on devrait avoir 0.
$ sudo cat /var/www/html/owncloud/config/config.php | grep -ci -m1 "'memcache.local'"
0
Dans le fichier /var/www/html/owncloud/config/config.php, ajouter la ligne ci-dessous, puis revérifier le memcache, qui devrait maintenant avoir pour valeur 1:
'memcache.local' => '\OC\Memcache\APCu',
Vérifier de nouveau que tous est maintenant rentré dans l’ordre dans la page d’administration de votre serveur Owncloud.
7. Différents Tests
Test d’accès en HTTP à votre page
Après avoir supprimé les caches et cookies de votre navigateur, entrer l’url de votre site en HTTP, puis vérifier le résultat.
Si tout s’est bien passé, vous devriez désormais avoir accès à votre page de manière sécurisée, en HTTPS.
Et voilà. Apprécier votre nouveau « Dropbox-like ». Mais, attendez, ce n’est pas tout!
Test de sécurité du serveur
Pour le fun, effectuer un test de sécurité de votre page sur Quallys SSL Lab.
Le résultat du test nous donne un T à cause d’un problème de certificat. Sans celà, le site mérite un A. Ce qui fait que notre site est digne de « confiance ».
Vous pouvez également vérifier quels ports sont ouverts avec Pentest-tools.
Amusez-vous bien!
Références et Ressources:
Netlibre, un nom de domaine gratuit, facilement administrable
Principes de base du système DNS
Hardening and Security Guidance
How to turn off server signature on Apache web server
Tutoriel: Virtualhosts avec Apache2
Atelier 3 partie 4 – Installer son serveur à la maison
Self-Signed_Certificate (Debian)
Certificates and Encodings
What is a Pem file and how does it differ from other OpenSSL Generated Key File Formats?
Enable SSL for Owncloud 8 on Ubuntu
Redirect Request to SSL
Common Apache Missconfigurations
How To Configure Apache 2
Configuring Memory Caching
Sécuriser son serveur Linux
Protéger son site Internet des cyberattaques