Print Friendly, PDF & Email

MAJ du 30/06/17

A partir de ce jour, les modifications seront intégrées au fur et et mesure dans l’article au vu des nombreux changements chez StartSSL et Synology

 
Après plusieurs articles au sujet des services SSL et OpenVPN installés sur un NAS Synology, je regroupe dans cet article toutes les nouveautés, les simplifications et les améliorations de sécurité que j’ai pu apporter sur ces 2 sujets ces derniers mois.

L’objectif de cet article est de proposer une méthode simple et rapide d’installation de différents certificats gratuits StartSSL qui seront utilisés pour les sites Web et le serveur OpenVPN du NAS Synology.

En effet, la version de DSM 6 permet de déclarer plusieurs certificats sur le NAS et de les affecter à une ou plusieurs applications à la fois.

Les avantages de l’utilisation des certificats StartSSL sont nombreux en dehors de la gratuité : la PKI StartSSL possède un certificat racine qui est universellement reconnu par la grande majorité des systèmes d’exploitation, des navigateurs et des appareils mobiles, impliquant la reconnaissance immédiate de la fiabilité de tous les certificats StartSSL et permettant d’accéder de manière sécurisée à vos sites Web hébergés sur le NAS. Et, point le plus important, elle simplifie le paramétrage, la sécurité et l’utilisation du serveur OpenVPN sur le NAS.

En prérequis, il est nécessaire de réserver un nom de domaine auprès d’un hébergeur (OVH, 1&1…) et de créer les sous-domaines. On verra dans l’article comment utiliser le service de DNS dynamique du NAS pour associer l’adresse IP de votre FAI à votre nom de domaine.

Les versions OS et OpenVPN sur les différents équipements qui ont servi pour cet article sont les suivantes :

  • NAS : DSM 6.1.2-15132 – VPN Server 1.3.5-2761
  • PC : Windows 10 Pro – OpenVPN 2.4.3
  • iPhone/iPad : iOS 10.3.2 – OpenVPN Connect 1.1.1

L’article se compose de 2 parties :

  • L’installation de certificats SSL fournis par StartSSL sur le NAS. Vous pouvez vous arrêter là si votre projet concerne uniquement la sécurisation des sites Web hébergés sur le NAS
  • L’installation du serveur OpenVPN du NAS et des différents clients avec la PKI StartSSL

 

Certificat SSL

Inscription à StartSSL

Avant de vous inscrire sur le site StartSSL, pensez à déclarer chez votre hébergeur (OVH, 1&1…) le sous-domaine pour lequel vous allez créer un certificat SSL.

Dans notre exemple, le sous-domaine sera www.monsite.com

Sur le site de StartSSL, cliquez sur le bouton Start Now (StartSSL Free) :

Puis cliquez sur Sign-up :

Complétez le formulaire suivant puis cliquez sur Send verification code :

Finalisez la création de votre compte en saisissant le code envoyé par email :

StartSSL vous demande alors une signature de certificat (CSR). Vous pouvez soit laisser StartSSL la générer automatiquement soit la créer vous-même. Pour une question de sécurité, c’est mieux de maitriser soi-même les clés privées. Nous allons donc créer un fichier CSR et une clé privée :

Il y a plusieurs méthodes pour créer un fichier CSR et une clé privée. Pour réaliser cette tâche, StartSSL nous propose de télécharger l’outil StartCom Tool qui est très bien conçu et facile à utiliser. Cliquez sur le lien proposé et lancez l’outil.

Cliquez sur l’onglet Setting :

  • Sélectionnez SHA2 comme Digest Algorithm
  • Sélectionnez Professional Mode dans CSR Setting

Puis cliquez sur l’onglet CSR :

  • Sélectionnez Client Certificate
  • Indiquez la même adresse email que vous avez saisi sur le formulaire StartSSL
  • Sélectionnez Generate Private Key
  • Sélectionnez 4096 comme Key Lenght
  • Sélectionnez SHA512 comme Hash Algorithm
  • Ne saisissez pas de mot de passe car la clé sera chiffrée lors de la création du fichier au format PKCS#12. Il faudra tout de même mettre en lieu sûr ou chiffrer le fichier lui-même

Une fois le formulaire terminée, créez le CSR et la clé privée en cliquant sur Generate CSR :

Sauvegardez les fichiers CSR et la clé privée dans le dossier de votre choix.

Copiez le CSR généré sur la page StartSSL puis cliquez sur Submit :

StartSSL enregistre alors le certificat, qui vous servira à vous identifier sur le site Web StartSSL, dans le magasin de certificats Windows et vous propose de télécharger un fichier archive : info@monsite.com.zip

Dézipper ce fichier pour extraire le certificat qui est sous la forme suivante : 2_info@monsite.com.crt

Dans l’outil StartCom Tool, rendez-vous dans l’onglet Certificate et choisissez l’option Export PFX. Puis sélectionnez le certificat que vous venez d’extraire et la clé privée précédemment créée.

Saisissez une passphrase pour chiffrer le fichier et cliquez sur Submit pour créer le fichier au format PKCS#12 (ajoutez .pfx au nom de fichier à enregistrer, par exemple info@monsite.com.pfx) :

Passphrase

StartCom Tool vous demande un mot de passe ou password mais vous pouvez aussi saisir une passphrase. Un password est composé d’une suite de lettres, de chiffres et de symboles alors qu’une passphrase est une suite de mots le plus souvent issus d’un dictionnaire.

Une passphrase protègera mieux vos clés privées ou vos fichiers en général qu’un mot de passe même compliqué et elle sera par ailleurs plus facile à retenir que le mot de passe.

xkcd a illustré ces principes de façon humoristique :

Comment générer une passphrase ?

En cliquant sur l’un des boutons ci-dessous, sachant que plus l’entropie (mesure de la qualité d’une méthode de cryptage) est élevée plus la passphrase sera sûre et résistera à une attaque de type « brute-force ». Une entropie > à 80 bits (haute densité d’information) est considérée comme très sûre à cette date.

Avec le dictionnaire de français fondamental utilisé qui permet de rendre la passphrase plus lisble et plus facile à retenir, l’entropie est bonne à partir de 6 mots, excellente à partir de 7 mots :
 

correct cheval batterie agrafe

 

 

 

Statistiques d’entropie

 
Il y a  mots dans la passphrase qui a une entropie de  bits pour un dictionnaire de français fondamental composé de 3 726 mots (log2(3 726) = 11,86 bits/mot). Ce qui donne  clés possibles sur une base de 50 % des clés totales ((3 726^mots)/2) car, en moyenne, une recherche sur la moitié des clés suffirait pour découvrir la passphrase.

En supposant que « votre adversaire » peut effectuer 1 billion (trillion aux USA) de requêtes par seconde comme l’a déclaré Edward Snowden, soit  clés/s, une attaque de type « brute-force » sur la moitié des clés prendrait :

~ minutes
~ heures
~ jours
~ années

Comment calculer l’entropie

 
Voir les références pour le code JavaScript utilisé (à télécharger ici) qui provient de plusieurs sources, principalement celles de Jeff Preshing (xkcd Password Generator) et de Glenn Rempe (Diceware). J’ai adapté ces différents codes pour obtenir le résultat souhaité dans cet article.

Importation du certificat client

Si vous souhaitez vous connecter à StartSSL et continuer les créations de certificats sur un autre PC que celui que vous avez utilisé pour vous inscrire à StartSSL, il est nécessaire d’importer le certificat client dans le magasin de certificats Windows qui sera contrôlé lors du login sur le site Web StartSSL.

Pour importer le certificat client, double-cliquez sur le certificat précédemment créé, info@monsite.com.pfx, et choisissez de l’importer pour l’Utilisateur actuel puis cliquez sur Suivant :

Indiquez le nom du fichier à importer puis cliquez sur Suivant :

Tapez la passphrase qui protège la clé privée et sélectionnez comme option uniquement Inclure toutes les propriétés étendues puis cliquez sur Suivant :

Laissez Windows choisir automatiquement le magasin :

Le certificat est importé :

Pour vérifier que le certificat client a bien été importé dans le magasin, appuyer simultanément sur les touches Win + R, saisissez certmgr.msc et cliquez sur OK :

En vous rendant dans les certificats personnels du magasin, vous constaterez la présence du votre certificat client StartSSL :

Se connecter à StartSSL

Sur la barre du menu du site StartSSL, cliquez sur login puis sur Client Certificate Login :

Votre navigateur vous propose alors une liste de certificats stockés dans le magasin. Choisissez le certificat client créé lors de la procédure d’inscription StartSSL. Par exemple avec Google Chrome, la fenêtre qui apparaît est la suivante :

Sélectionnez alors le certificat client et cliquez sur OK pour vous authentifier sur le site StartSSL.

Si la première méthode de connexion ne fonctionne pas, cliquez alors sur One Time Password Login, et saisissez l’adresse email que vous avez utilisé pour l’inscription à StartSSL pour recevoir un mot de passe temporaire par messagerie.

Validation du nom de domaine

Cette étape permet de valider votre nom de domaine que vous avez réservé chez un hébergeur sur le site StartSSL et prouver que vous en êtes bien le titulaire.

Cliquez sur Validations Wizard et sélectionnez Domain Validation :

Dans notre exemple, on considère que le nom de domaine est monsite.com :

StartSSL va ensuite vous demander une adresse email administrative pour vous envoyer la demande de validation de la propriété du nom de domaine.

Si aucune des adresses proposées n’existe, vous devrez au préalable en créer l’une d’elles chez votre hébergeur. Choisissez une adresse valide, et cliquez sur Send Verification Code puis finalisez le processus en saisissant le code envoyé par email :

Votre nom de domaine a bien été validé par StartSSL :

Vous avez maintenant 30 jours pour sécuriser tous les sous-domaines que vous souhaitez (chaque sous-domaine aura son propre certificat dans l’offre gratuite). Une fois cette période passée, vous devrez renouveler cette étape de validation du nom de domaine.

Création de la clé privée du serveur

Comme pour le certificat client, nous allons demander à StartSSL de signer un certificat Serveur pour un sous-domaine dont la clé privée nous appartient. Cet élément échappant à StartSSL, notre niveau de sécurité sera un peu plus élevé.

Pour obtenir une clé privée, nous allons créer une nouvelle demande de signature de certificat (CSR) mais cette fois via l’interface DSM du NAS. Ça fonctionne aussi bien sûr avec StartCom Tool mais autant vous montrer un autre outil  🙂

Sur le serveur NAS Synology, rendez-vous dans Panneau de configuration, Sécurité, Certificat puis cliquez sur le bouton CSR.

Choisissez Créer une demande de signature de certificat (CSR) :

Saisissez les informations demandées. N’hésitez pas à utiliser la longueur de clé la plus élevé (4096 bits). Dans cet exemple, on va créer un certificat qui sera utilisé exclusivement par le serveur Web du NAS soit www.monsite.com (le sous-domaine a été préalablement créé chez l’hébergeur) :

Téléchargez l’archive :

Le fichier zippé, archive.zip, contient 2 fichiers :

  • server.csr qui est le fichier de demande de signature de certificat Serveur que nous allons soumettre à StartSSL
  • server.key qui est la clé privée du serveur

Pour info, les certificats signés en SHA1 émis après le 1er janvier 2016 et ceux expirant après le 1er janvier 2017 ne seront plus reconnus par les navigateurs.

A ce titre, Synology et StartSSL émettent (ou proposent par défaut) des certificats signés avec SHA256. C’est le cas du CSR émis par le NAS.

Création du certificat du serveur

Pour obtenir le certificat Serveur, connectez-vous sur le site Web de StartSSL et dans Certificates Wizard, sélectionnez Web Server SSL/TLS Certificate et cliquez sur Continue :

Saisissez le sous-domaine que vous souhaitez sécuriser. Dans cet exemple, on va créer un premier certificat : www.monsite.com 

Le sous-domaine a été préalablement créé chez l’hébergeur :

Concernant le CSR, sélectionnez Generated by Myself et copiez le contenu du fichier server.csr téléchargé depuis le NAS. Cliquez ensuite sur Submit :

Cliquez sur le lien proposé, here, pour télécharger un fichier archive sous la forme www.monsite.com.zip puis cliquez sur le bouton Certificate List pour afficher les certificats déclarés chez StartSSL :

Sauvegarder un certificat

Si vous n’avez pas récupéré le certificat du serveur au chapitre précédent, vous pouvez toujours le retrouver en cliquant sur l’onglet Tool Box puis Certificate List et enfin sur le bouton Retrieve correspondant au sous-domaine :

Le fichier archive téléchargé, dans notre exemple www.monsite.com.zip, contient le certificat serveur et le certificat d’autorité intermédiaire pour plusieurs types de plateforme (Apache, IIS, …).

Choisissez Apache en double-cliquant sur ApacheServer.zip et copiez les 2 fichiers inclus dans l’archive sur votre PC :

  • 1_root_bundle.crt qui est le certificat d’autorité de certification intermédiaire
  • 2_www.monsite.com.crt qui est le certificat SSL du serveur

Importer un certificat sur le NAS

L’importation du certificat nouvellement créé sur le NAS Synology est réalisée via le menu Panneau de configuration, Sécurité, Certificat puis cliquez sur le bouton Ajouter.

Choisissez l’option Ajouter un nouveau certificat et cliquez sur Suivant :

Décrivez le certificat que vous avez importé, choisissez l’option Importer le certificat, et cliquez sur Suivant :

Importez les fichiers suivants :

  • Clé privée : sélectionnez le fichier server.key
  • Certificat : sélectionnez le fichier 2_www.monsite.com.crt
  • Certificat intermédiaire : sélectionnez le fichier 1_root_bundle.crt

Le certificat SSL est installé sur votre NAS :

Créer et importer d’autres certificats sur le NAS

Depuis la version DSM 6, il est possible d’importer plusieurs certificats SSL et de les affecter aux différents services du NAS, par exemple :

  • dsm.monsite.com pour toutes les applications DSM par défaut
  • www.monsite.com pour l’application Web Station, le serveur Web
  • audio.monsite.com pour l’application Audio Station
  • video.monsite.com pour l’application Video Station
  • surveillance.monsite.com pour l’application Surveillance Station
  • vpn.monsite.com pour l’application VPN Server

Pour créer ces différents certificats, il suffit de déclarer les sous-domaines chez votre hébergeur puis de reprendre la procédure au chapitre Création de la clé privée du serveur

A la fin de cette procédure, dans notre exemple, tous les certificats sont importés sur le NAS :

Affecter les certificats aux différents services du NAS

Avant d’affecter les différents certificats SSL aux différentes applications du NAS, il est nécessaire de préciser les sous-domaines qui seront utilisés par application.

Pour déclarer le sous-domaine utilisé par défaut par le NAS, dsm.monsite.com dans notre exemple, cliquez sur Panneau de configuration, Réseau, Paramètres de DSM, puis sur Activer un domaine personnalisé, saisissez dsm.monsite.com et enfin cochez Activez HSTS pour sécuriser la connexion :

Pour les autres applications, rendez-vous dans Panneau de configuration puis Portail des applications :

En sélectionnant une application et en cliquant sur Modifier, différentes possibilités vous sont offertes pour accéder aux applications. Par exemple pour l’application Audio Station, vous pouvez accéder à l’appli par :

Dans cet exemple, seul le domaine personnalisé est sélectionné avec les options de sécurité supplémentaires :

Et pour l’appli Download Station, seul l’alias personnalisé est choisi. Le nom de domaine personnalisé déclaré dans les Paramètres de DSM sera alors utilisé :

Une fois les règles d’accès aux applications paramétrées, vous devez affecter les différents certificats aux différents sous-domaines utilisés par le NAS. Cliquez sur Panneau de configuration, Sécurité, Certificat, puis sur le bouton Configurer. En face de chaque application, ouvrez la fenêtre déroulante pour choisir le certificat adéquat :

Pour la suite de l’article, vous noterez qu’un sous-domaine et un certificat SSL ont été spécifiquement attribués à l’application VPN Server : vpn.monsite.com

Firewall et DynDNS

Autorisez dans Panneau de configuration, Sécurité, Pare-feu du NAS Synology, mais aussi sur votre Box ou votre routeur (natage des ports), les ports HTTPS utilisés par les applications Audio Station, Video Station, etc. (autorisez DSM et File Station uniquement sur le LAN si vous ne souhaitez pas un accès depuis Internet) :

Par ailleurs, pour accéder à votre NAS Synology depuis Internet, il est nécessaire d’utiliser un service de DNS dynamique qui permet aux utilisateurs d’associer un nom de domaine à une adresse IP dynamique (le plus souvent, votre FAI ne vous fournit pas d’adresse IP fixe).

J’utilise les services payants de DynDNS.com mais vous pouvez trouver sur le Web des services équivalents gratuits. Si vous avez hébergé votre nom de domaine chez OVH, cet hébergeur vous fournira un service DynDNS compris dans l’abonnement.

Déclarez chez votre fournisseur de service DNS dynamique un Hostname, par exemple monsite.dyndns.org, et l’Adresse IP de votre accès Internet :

Pour trouver l’adresse IP de votre accès Internet, interrogez le service suivant : localiser une adresse IP

Dans le Panneau de configuration, Accès externe, DDNS du NAS Synology, déclarez votre compte DynDNS. Le NAS Synology exécutera alors automatiquement le service DynDNS pour prévenir de tout changement d’adresse IP :

Pour finir, les sous-domaines que vous allez utiliser pour accéder au NAS Synology depuis Internet, par exemple audio.monsite.com pour Audio Station, doit exploiter le DNS dynamique de DynDNS.

Chez l’hébergeur de votre nom de domaine, déclarez comme CNAME DNS, pour votre sous-domaine audio.monsite.com et tous les autres sous-domaines utilisés sur le NAS, le hostname souscrit chez DynDNS, soit monsite.dyndns.org.

Par exemple chez 1and1.fr :

Votre sous-domaine, audio.monsite.com, et tous les autres sous-domaines paramétrés de cette façon seront donc toujours informés du changement d’adresse IP de votre accès Internet grâce au service DynDNS.

Vous pourrez ainsi toujours accéder à votre NAS depuis Internet.

Navigation sécurisée

La navigation sécurisée est maintenant possible, par exemple l’accès à Audio Station du NAS Synology en HTTPS :

Si vous avez l’intention d’utiliser le certificat SSL uniquement pour la navigation Web en offrant un service ouvert à tout public, je vous conseille alors l’article suivant qui montre comment créer un certificat Let’s Encrypt… en attendant fin 2017 que les nouveaux CA de StartSSL soient reconnus par les principaux navigateurs.

En effet, pour le moment, seul Microsoft Edge reconnait les nouveaux certificats StartSSL ce qui limite leurs utilisations.
 

OpenVPN

Serveur VPN NAS

Installation

Installez le package VPN Server depuis le Centre de paquets du NAS, menu Utilitaires, puis précisez dans les menus Paramètres Généraux et Privilège du serveur VPN les utilisateurs qui auront l’autorisation de se connecter :

Et leurs privilèges sur les applications VPN :

A noter que vous pouvez choisir comme Type de compte non pas les utilisateurs locaux mais les utilisateurs LDAP. Il est intéressant de gérer vos utilisateurs de façon centralisée avec un serveur LDAP dès lors que vous avez plusieurs applications qui s’appuient sur ce dernier.

Pour continuer , cliquez sur OpenVPN et modifiez les paramètres suivants :

  • Modifiez si nécessaire l’adresse IP dynamique
  • Précisez le nombre de connexions maximales et le nombre de connexions possibles avec le même compte
  • Indiquez le port et le protocole. Choisissez TCP si vous souhaitez utiliser SSLH
  • Depuis la MAJ de VPN Center du 21/02/17 (V1.3.5-2757), précisez l’algorithme de chiffrement et la fonction de hachage
  • Autorisez l’accès au serveur LAN pour accéder aux ressources partagées

Pour finir, dans Panneau de configuration, Sécurité, Pare-feu du NAS Synology, choisissez l’interface VPN et autorisez le sous-réseau VPN déclaré plus haut :

Certificats

Dans les chapitres précédents, un sous-domaine, vpn.monsite.com, et un certificat SSL ont été spécifiquement attribués à l’application VPN Server.

Pour la suite du paramétrage, il va falloir se connecter en SSH au NAS. Pour autoriser ce type de connexion, rendez-vous dans le Panneau de configuration, Terminal & SNMP puis cochez Activer le service SSH et cliquez sur la bouton Appliquer :

Il existe plusieurs outils gratuits pour vous connecter en SSH depuis votre PC comme MobaXterm Home Edition.

Une fois connecté au NAS en SSH avec un compte de type administrateur, vous pourrez constater la présence des fichiers suivants dans le dossier /var/packages/VPNCenter/target/etc/openvpn/keys :

  • ca.crt : c’est le certificat d’autorité intermédiaire importé au chapitre précédent (1_root_bundle.crt)
  • ca_bundle.crt : c’est un certificat bundle créé par le NAS
  • server.crt : le certificat SSL du serveur
  • server.key : la clé privée du serveur

Pour que le certificat client soit reconnu par le serveur OpenVPN du NAS, il est nécessaire de créer un nouveau fichier bundle.

A la différence du bundle créé automatiquement par le NAS dans ce dossier, ce nouveau bundle contiendra plusieurs certificats dont les certificats intermédiaires “client” et “serveur”.

En fonction de la date de création de vos certificats chez StartSSL, ci-joint le fichier bundle qu’il sera nécessaire d’utiliser :

Stoppez le serveur OpenVPN depuis une connexion SSH avec un compte de type administrateur avant de créer et copier les derniers certificats nécessaires sur le NAS :

sudo /var/packages/VPNCenter/target/scripts/openvpn.sh stop

Pour créer la clé Diffie-Hellman, dh4096.pem, et la clé d’authentification statique partagée SSL/TLS (PSK pour Pre-Shared Key), ta.key, exécutez les commandes suivantes :

cd /var/packages/VPNCenter/target/etc/openvpn/keys
sudo openssl dhparam -out dh4096.pem 4096
sudo openvpn --genkey --secret ta.key

Une clé Diffie-Hellman à 4096 bits augmente la sécurité mais le délai de création est de plusieurs heures sur un NAS Synology.

Le mieux est de profiter de la puissance CPU de votre PC pour créer ces 2 clés. Si vous avez installé préalablement le client OpenVPN, utilisez les mêmes commandes vues ci-dessus dans une fenêtre de commandes puis copiez-les sur votre partage réseau. Et enfin, copiez-les dans le dossier OpenVPN du NAS :

cd /var/packages/VPNCenter/target/etc/openvpn/keys
sudo cp /volume1/[Votre partage réseau]/ta.key .
sudo cp /volume1/[Votre partage réseau]/dh4096.pem .

Copier également le fichier ca_bundle_newstartssl.crt dans le dossier OpenVPN depuis votre partage réseau :

cd /var/packages/VPNCenter/target/etc/openvpn/keys
sudo cp /volume1/[Votre partage réseau]/ca_bundle_newstartssl.crt .

Changez les droits des différents certificats dans le dossier OpenVPN :

cd /var/packages/VPNCenter/target/etc/openvpn/keys
sudo chmod 400 ca_bundle_newstartssl.crt
sudo chmod 400 dh4096.pem
sudo chmod 400 ta.key

Vous pouvez redémarrer le serveur OpenVPN :

sudo /var/packages/VPNCenter/target/scripts/openvpn.sh start

WINS

Pour utiliser les ressources réseaux Windows lors d’une connexion OpenVPN via l’Explorateur de fichiers, il est nécessaire de déclarer un serveur WINS sur le réseau pour résoudre les noms NetBIOS et le serveur NAS peut jouer ce rôle.

Serveur WINS

Pour déclarer le serveur NAS comme serveur WINS, allez dans Panneau de configuration, Services de fichiers et indiquez le groupe de travail que vous utilisez sur vos PC Windows, par défaut WORKGROUP :

Cliquez sur Paramètres avancés :

  • Choisissez SMB3 comme protocole SMB max et SMB2 comme protocole mini (voir cet article pour activer SMB3 sur le client)
  • Laissez le mode de chiffrement du transport en Auto ou désactiver si vous souhaitez augmenter la rapidité d’accès avec OpenVPN
  • Activer le Local Master Browser
  • Activer le module VFS DirSort

Pour vérifier et compléter notre paramétrage, stoppez le serveur Samba depuis une console SSH :

sudo /usr/syno/etc/rc.sysv/S80samba.sh stop

Puis modifiez la configuration Samba du serveur :

cd /etc/samba
sudo vi smb.conf

Modifiez le fichier si nécessaire :

[global]
        printcap name=cups
        winbind enum groups=yes
        include=/var/tmp/nginx/smb.netbios.aliases.conf
        ldap admin dn=uid=root,cn=users,dc=directory,dc=monsite,dc=com
        encrypt passwords=yes
        min protocol=SMB2
        security=user
        local master=yes
        realm=*
        ldap passwd sync=yes
        ldap suffix=dc=directory,dc=monsite,dc=com
        name resolve order=wins lmhosts hosts bcast
        passdb backend=multi:smbpasswd,ldapsam:ldaps://localhost
        syno ldap support=yes
        dns proxy=yes
        printing=cups
        max protocol=SMB3
        wins support=yes
        winbind enum users=yes
        load printers=yes
        workgroup=WORKGROUP

Les informations importantes sont les suivantes :

  • Les directives LDAP ne seront présentes dans ce fichier que si vous utilisez le serveur LDAP du NAS pour centraliser et authentifier les utilisateurs dans différentes applications comme ici pour le partage de fichiers
  • workgroup=WORKGROUP : c’est le groupe de travail déclaré dans le panneau de configuration du NAS
  • wins support=yes : le NAS devient un serveur WINS
  • dns proxy=yes : le serveur WINS recherchera le nom via DNS s’il ne peut pas le résoudre
  • name resolve order=wins hosts lmhosts bcast : Samba résoudra les noms en utilisant dans l’ordre WINS, le fichier hosts, puis lmhosts pour finir par un broadcast
  • max protocol=SMB3 : le protocole SMB déclaré dans le panneau de configuration du NAS
  • local master=yes : Samba participe à l’élection du « local master » si plusieurs serveurs WINS sur le réseau
  • usershare allow guests=no : la fonction usershare permet aux utilisateurs d’ajouter, modifier et supprimer leurs propres partages. Cette directive ne permet pas aux invités d’avoir accès à cette fonction
  • security=user : sécurité au niveau de l’utilisateur
  • encrypt passwords=yes : Samba accepte les mots de passe chiffrés

Une fois le fichier de configuration sauvegardé, démarrez le serveur Samba sur le NAS :

sudo /usr/syno/etc/rc.sysv/S80samba.sh start

 

Client WINS

Exemple pour un serveur Linux Ubuntu qui s’adresse maintenant au serveur WINS du NAS pour résoudre les noms NetBIOS.

Connectez-vous en SSH puis modifiez la configuration du Samba du serveur :

cd /etc/samba
sudo vi smb.conf

La section « global » du fichier de configuration Samba du serveur Ubuntu :

[global]
    workgroup = WORKGROUP
    netbios name = NOM-NETBIOS-DU-SERVEUR
    security = USER
    valid users = @USER1, @USER2
    encrypt passwords = true
    max protocol = SMB3
    wins proxy = yes
    local master = no
    name resolve order = wins lmhosts host bcast
    hosts allow = 127.0.0.1 192.168.X.0/24 10.X.X.0/24
    hosts deny = 0.0.0.0/0

# server string is the equivalent of the NT Description field
    server string = Samba server %h server

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable its WINS Server
    wins support = no

# WINS Server - Tells the NMBD components of Samba to be a WINS Client
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
    wins server = 192.168.XXX.XXX

# This will prevent nmbd to search for NetBIOS names through DNS.
    dns proxy = yes

Le serveur Linux est maintenant client du serveur WINS du NAS :

  • wins support = no : le serveur Linux n’est pas un serveur WINS
  • wins server = 192.168.XXX.XXX : il est client du serveur WINS du NAS. Indiquez ici l’adresse LAN du NAS
  • wins proxy = yes : le serveur Linux relaie les requêtes qui lui seraient adressées vers le serveur WINS du NAS

Une fois le fichier de configuration sauvegardé, redémarrez le serveur Samba :

sudo service smbd restart

SSLH

La majorité des réseaux d’entreprise ou publics sont filtrés et n’acceptent que les protocoles HTTP (port TCP 80) et HTTPS (port TCP 443).

Pour utiliser OpenVPN sur ces réseaux, il est souvent nécessaire de paramétrer OpenVPN avec l’un de ces deux ports. Mais alors le serveur OpenVPN entre en conflit avec les serveurs Web utilisés sur le NAS.

SSLH (SSL/SSH multiplexer) permet de résoudre ce conflit : il fait en effet fonctionner virtuellement différents services sur le même port TCP en entrée. SSLH est une sorte de proxy qui redirige les connexions vers les bons services sur le NAS.

SSLH est un package comme le serveur VPN de Synology. Toutefois comme il s’agit ici d’un éditeur tiers, il faudra autoriser l’utilisation de paquets non publiés par Synology en cochant la case N’importe quel éditeur dans l’onglet Général des Paramètres du Centre de Paquets :

Puis de déclarer l’éditeur suivant dans l’onglet Sources de paquet :

  • Nom : SynoCommunity
  • Emplacement : http://packages.synocommunity.com

Puis dans le menu Communauté, installez le package SSLH :

Connectez-vous en SSH au NAS et rendez-vous dans le dossier SSLH pour modifier la configuration du service SSLH :

cd /usr/local/sslh/var/
sudo vi sslh.cfg

Le fichier de configuration sslh.cfg :

verbose: true;
foreground: false;
inetd: false;
numeric: false;
transparent: false;
timeout: "5";
user: "nobody";
pidfile: "/usr/local/sslh/var/sslh.pid";

# Change hostname with your external address name.
listen:
(
    { host: "0.0.0.0"; port: "3443"; }
);

protocols:
(
    { name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; probe: "builtin"; },
    { name: "ssl"; host: " localhost "; port: "443"; probe: "builtin"; },
    { name: "openvpn"; host: " localhost "; port: "1194"; probe: "builtin"; },
    { name: "tinc"; host: " localhost "; port: "655"; probe: "builtin"; },
    { name: "xmpp"; host: " localhost "; port: "5223"; probe: "builtin"; }
);

Les modifications apportées sont les suivantes :

  • timeout: “5” : modifiez le timeout avec comme valeur 5 pour utiliser SSLH avec le protocole OpenVPN
  • Dans la section listen, le port en entrée utilisé par le service SSLH est le port 3443
  • Dans la section protocols, le host est localhost en remplacement de 127.0.0.1
  • SSLH multiplexe en sortie plusieurs protocoles uniquement en TCP : SSH, SSL, HTTP, OpenVPN, TINC et XMPP. Concernant OpenVPN, vous pouvez modifier le port ou laisser le port utilisé par défaut par SSLH (TCP 1194)

A la fin de l’opération, relancez le service SSLH :

sudo /var/packages/sslh/scripts/start-stop-status restart

SSLH écoute maintenant sur le port 3443 avant de renvoyer la connexion vers le bon service en interne.

Pour rediriger vos connexions externes sur le service SSLH du NAS, il suffit maintenant d’ajouter une règle de natage sur votre routeur en lui indiquant les informations suivantes :

  • Protocole : TCP
  • Adresse source : any
  • Adresse de destination : l’adresse IP du NAS sur le LAN (192.168.XXX.XXX)
  • Du port : 443
  • Vers le port : 3443

Ainsi, les clients pourront utiliser indifféremment un serveur Web en HTTPS ou une connexion OpenVPN sur le port 443 hébergés sur le NAS.

Autorisez dans Panneau de configuration, Sécurité, Pare-feu du NAS Synology, le port interne SSLH soit le port TCP 3443 dans cet exemple :

Vous pouvez par ailleurs supprimer les règles spécifiques par applications Web car elles utilisent toutes par défaut le port 443 qui est renvoyé vers le port SSLH 3443.

Configuration OpenVPN

Connectez-vous en SSH sur la NAS et rendez-vous dans le dossier OpenVPN pour modifier la configuration du serveur OpenVPN. Si le serveur OpenVPN a été redémarré, stoppez-le :

sudo /var/packages/VPNCenter/target/scripts/openvpn.sh stop
cd /usr/syno/etc/packages/VPNCenter/openvpn
sudo vi openvpn.conf

Modifiez le fichier de configuration openvpn.conf avec les paramètres proposés ci-dessous.

Pensez à remplacer les adresses IP par les vôtres. Pour info, les Wifi publics utilisent souvent les sous-réseaux 192.168.0.0/24 ou 192.168.1.0/24. Si vous utilisez ces mêmes sous-réseaux à votre domicile, il y aura conflit d’adressage lorsque vous allez lancer une connexion OpenVPN et vous n’aurez pas accès aux ressources internes du NAS. Pour éviter ce pb, mieux vaut changer le sous-réseau de votre domicile en utilisant un nombre > à 10 et = 254 pour le 3ème octet : par exemple 192.168.200.0/24

push "route 192.168.XXX.0 255.255.255.0"
push "route 10.XXX.XXX.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.XXX.XXX"
push "dhcp-option WINS 192.168.XXX.XXX"
dev tun
port 1194
proto tcp6-server
sndbuf 0
rcvbuf 0
push "sndbuf 0"
push "rcvbuf 0"
tcp-queue-limit 131072
bcast-buffers 131072
tun-mtu 48000
fragment 0
mssfix 0
management 127.0.0.1 1195
server 10.XXX.XXX.0 255.255.255.0

tls-server
tls-timeout 10
tls-version-min 1.1
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
tls-verify "/var/packages/VPNCenter/target/scripts/ovpnCNcheck.sh /var/packages/VPNCenter/target/scripts/userlist.txt"
tls-auth /var/packages/VPNCenter/target/etc/openvpn/keys/ta.key 0
dh /var/packages/VPNCenter/target/etc/openvpn/keys/dh4096.pem
ca /var/packages/VPNCenter/target/etc/openvpn/keys/ca_bundle_newstartssl.crt
cert /var/packages/VPNCenter/target/etc/openvpn/keys/server.crt
key /var/packages/VPNCenter/target/etc/openvpn/keys/server.key
cipher AES-256-CBC
auth SHA512

max-clients 10
client-to-client
persist-tun
persist-key
verb 3
log-append /var/log/openvpn.log
status /tmp/ovpn_status_2_result 30
status-version 2
keepalive 10 60
reneg-sec 10800

client-connect /var/packages/VPNCenter/target/scripts/openvpn-notify.sh
client-disconnect /var/packages/VPNCenter/target/scripts/openvpn-notify.sh

remote-cert-eku "TLS Web Client Authentication"
script-security 2
plugin /var/packages/VPNCenter/target/lib/radiusplugin.so /var/packages/VPNCenter/target/etc/openvpn/radiusplugin.cnf
username-as-common-name
duplicate-cn

Les points importants de la configuration OpenVPN du serveur :

  • Depuis la MAJ de VPN Center du 21/02/17 (V1.3.5-2757), l’ordre des directives OpenVPN est important pour ne pas entrer en conflit avec le paramétrage du serveur OpenVPN via DSM en particulier les directives concernant le chiffrement et l’authentification (cipher, auth, tls-cipher, tls-auth…)
  • push “route 192.168.XXX.0…” : envoie au client une route vers le LAN
  • push “route 10.XXX.XXX.0…” : envoie au client une route vers le VPN
  • push “redirect-gateway…” : la passerelle par défaut est celle du VPN et tout le trafic client est redirigé vers le VPN
  • push “dhcp-option DNS…” : déclare le serveur DNS qui sera utilisé pour la résolution de nom. En général il s’agit de l’adresse IP LAN de votre routeur
  • push “dhcp-option WINS…” : déclare le serveur WINS qui sera utilisé pour la résolution des noms NetBIOS, nécessaire au partage réseau sous Windows. Dans notre exemple le serveur WINS est le NAS
  • proto tcp6-server : le serveur OpenVPN utilisera IPv4 et, en fonction de la configuration, IPv6
  • sndbuf et rcvbuf : en indiquant la valeur 0, c’est l’OS et non OpenVPN qui définira la taille du buffer TCP (par défaut 65536) ce qui permet d’augmenter les performances OpenVPN et la vitesse de la liaison
  • tcp-queue-limit et bcast-buffers : définit la taille de différents buffers en vue d’augmenter les performances OpenVPN
  • tun-mtu, fragment et mssfix : taille du MTU OpenVPN sur la liaison Gigabit du NAS Synology, toujours pour augmenter les performances (“OpenSSL 1.0.0 with AES-NI patch”, voir les références)
  • tls-timeout 10 : définit le timeout TLS à 10 secondes. En fonction du réseau utilisé il pourra s’écouler plusieurs secondes avant d’effectuer toutes les vérifications paramétrées dans le fichier de configuration (> à 3s pour un réseau Wifi et > à 5s pour un réseau 3G)
  • tls-version-min 1.1 : la version TLS utilisée est au minimum la v1.1. Et non la v1.2 car la directive cryptoapicert utilisée sur PC ne fonctionne qu’en v1.1
  • tls-cipher : définit et limite les suites de chiffrement TLS. Les différentes suites TLS sont séparées par le symbole « : »
  • tls-verify… : lance un script qui permet de vérifier la présence dans un fichier texte du Common Name (CN) du certificat client en cours de connexion. Si le CN est présent dans le fichier texte, la connexion est autorisée. Voir le chapitre suivant qui traite des scripts OpenVPN
  • tls-auth… : vérification de la clé PSK, ta.key
  • cipher AES-256-CBC : utilisation de l’algorithme de chiffrement AES avec une clé de 256 bits
  • auth SHA512 : utilisation de l’algorithme de hachage SHA512 avec une empreinte de 512 bits pour augmenter le niveau de sécurité
  • reneg-sec 10800 : la durée en seconde (10800s soit 3h) avant une nouvelle renégociation et authentification. Par défaut, la durée est de 3600s soit 1h
  • client-connect et client-disconnect… : lance un script avec la possibilité d’utiliser les variables d’environnement OpenVPN. Le script utilisé dans cette configuration notifie l’administrateur par mail lorsqu’il y a une connexion ou une déconnexion. Voir le chapitre suivant qui traite des scripts OpenVPN
  • plugin… : plugin fournit par Synology qui vérifie les identifiants du client et autorise ou non la connexion
  • remote-cert-eku : vérifie l’Extended Key Usage (EKU) du certificat client. Le magasin de certificats Windows ne contient pas cette information mais grâce au logiciel XCA vous pouvez déterminer cette valeur en important le certificat client info@monsite.com.pfx dans une base de données XCA, en cliquant sur le certificat client puis en vous rendant dans l’onglet Extensions. Vous trouverez les détails de l’EKU dont le paramètre TLS Web Client Authentication :

Une fois la configuration terminée, démarrez le serveur OpenVPN :

sudo /var/packages/VPNCenter/target/scripts/openvpn.sh start

Scripts OpenVPN

Contrôle du CN

Le script utilisé dans la directive tls-verify permet de vérifier la présence dans un fichier texte du Common Name (CN) du certificat client en cours de connexion.

Vous trouverez plusieurs scripts sur Internet pour réaliser cette action (voir les références en fin d’article) dont celui de Rober Penz que je vous propose ici et que j’ai légèrement adapté.

Ce script sera créé dans le dossier scripts de l’application VPN Server :

cd /volume1/@appstore/VPNCenter/scripts
sudo vi ovpnCNcheck.sh

Le script « ovpnCNcheck.sh » :

#!/bin/sh
# ovpnCNcheck -- an OpenVPN tls-verify script
# """""""""""""""""""""""""""""""""""""""""""
#
# This script checks if the peer is in the allowed
# user list by checking the CN (common name) of the
# X509 certificate against a provided text file.
#
# For example in OpenVPN, you could use the directive
# (as one line):
#
# tls-verify "/usr/local/sbin/ovpnCNcheck.py
# /etc/openvpn/userlist.txt"
#
# This would cause the connection to be dropped unless
# the client common name is within the userlist.txt.
#
# Special care has been taken to ensure that this script
# also works on openwrt systems where only busybox is
# available
#
# Written by Robert Penz <robert@penz.name> under the GPL 2
# Parts are copied from the verify-cn sample OpenVPN
# tls-verify script.

[ $# -eq 3 ] || { echo usage: ovpnCNcheck.sh userfile certificate_depth X509_NAME_oneline ; exit 255 ; }

# $1 -> cn we are looking for
# $2 -> certificate_depth
# $3 -> X509_NAME_oneline

if [ $2 -eq 0 ] ; then
    /usr/bin/grep -q "`expr match "$3" ".*CN=\([^,]*\)"`" "$1" && exit 0
    exit 1
fi

exit 0

Le fichier texte qui contient les CN sera également créé dans le dossier scripts de VPN Server avec un CN par ligne :

cd /volume1/@appstore/VPNCenter/scripts
sudo vi userlist.txt

Pour les certificats client StartSSL, le CN est l’adresse email du client. Le fichier « userlist.txt » :

info@monsite.com
prenom.nom@monsite.com
prenom2.nom2@monsite.com

Contrôlez le CN dans le magasin de certificats Windows en lançant certmgr.msc (touches Windows + R) et vous rendant dans les certificats personnels du magasin. Double-cliquez sur votre certificat et dans l’onglet Détails pour vérifier le CN de l’objet du certificat (le sujet) :

Les droits sont ajustés :

sudo chmod 755 ovpnCNcheck.sh userlist.txt

Pour finir, la directive suivante est insérée dans le fichier de configuration OpenVPN (voir le chapitre précédent) :

tls-verify "/var/packages/VPNCenter/target/scripts/ovpnCNcheck.sh /var/packages/VPNCenter/target/scripts/userlist.txt"

Vous pouvez réaliser le test de bon fonctionnement suivant, lequel retournera le status 0 via la commande echo si le CN est présent dans le fichier texte :

cd /volume1/@appstore/VPNCenter/scripts
sudo ./ovpnCNcheck.sh userlist.txt 0 "description=test login, CN=info@monsite.com, emailAddress=info@monsite.com"
echo $?

 

Notification Mail

Le script de Belgotux utilisé par les directives client-connect et client-disconnect permet de notifier par un email les clients qui se connectent et se déconnectent du serveur VPN.

Ce script que j’ai adapté au contexte utilise les variables OpenVPN ce qui permet de communiquer des infos intéressantes sur la connexion.

Le script est créé dans le dossier scripts de l’application VPN Server :

cd /volume1/@appstore/VPNCenter/scripts
sudo vi openvpn-notify.sh

Le script « openvpn-notify.sh » :

#!/bin/sh
# Auteur : Belgotux
# Site : www.monlinux.net
# Adresse : belgotux@monlinux.net
# Version : 1.0
# Date : 08-03-2015
# Licence : GPLv3
# Changelog :
# Description :
# use openvpn local environment variable, see openvpn man
# In your server config file :
# client-connect /usr/local/bin/openvpn-notify.sh
# client-disconnect /usr/local/bin/openvpn-notify.sh

MAILTO=info@monsite.com

(echo "Action = $script_type
VPN conf file = $config
Common name = $common_name
X509 Common name = $X509_0_CN
X509 email Address = $X509_0_emailAddress
SHA1 fingerprint = $tls_digest_0
Public IP address = $trusted_ip6
VPN get address = $ifconfig_pool_remote_ip
Bytes received from client = $bytes_received
Bytes sent to client = $bytes_sent"
) | /opt/bin/nail -s "$script_type $(basename $config .conf) $common_name" $MAILTO

exit 0

Les droits sont ajustés :

sudo chmod 755 openvpn-notify.sh

Le test de bon fonctionnement du script consiste à se connecter au serveur OpenVPN puis à se déconnecter et vérifier la présence des mails dans votre messagerie. Mais avant de réaliser ce test, il est nécessaire d’installer quelques services supplémentaires et de régler quelques questions de sécurité.

Prérequis Scripts OpenVPN

Bootstrap

Le script openvpn-notify.sh utilise nail pour envoyer les mails. Ce programme n’étant pas présent sur le NAS Synology, il est nécessaire d’installer un Bootstrap qui existe sous forme de package.

Commencez par déclarer l’éditeur suivant dans l’onglet Sources de paquet :

  • Nom : CPHub.net
  • Emplacement : http://www.cphub.net

Puis dans le menu Communauté, installez le package Bootstrap Installer qui vous proposera de choisir entre le Bootstrap Optware-ng iPKG ou Entware-ng oPKG. Pour la suite de l’article, j’ai choisi le premier :

Et pour finir, installez le package iPKGui :

Lancez iPKGui et installez nail (si iPKGui ne se lance pas correctement, installez le Perl CGI Fix) :

Une fois installé, connectez-vous en SSH pour modifier le fichier de configuration :

cd /opt/etc
sudo vi nail.rc

Adaptez les 3 premiers paramètres du fichier de configuration (voir les références) :

set from="info@monsite.com"
set smtp-auth-user="contact@monsite.com"
set smtp-auth-password=PASSWORD
set smtp=smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-synology
set smtp-use-starttls
set ssl-verify=ignore

Testez le bon fonctionnement :

echo "Votre mail" | /opt/bin/nail -s "L'objet du mail" destinataire@monsite.com

 

AppArmor

Les packages Synology, dont VPN Server, sont protégés par une couche de sécurité supplémentaire qui s’appelle AppArmor.

AppArmor permet d’associer à un programme un profil de sécurité qui restreint ses accès au système d’exploitation.

Il est donc nécessaire de modifier le fichier de configuration AppArmor de VPN Server afin d’autoriser le lancement des scripts et l’utilisation des commandes nail et grep :

sudo /usr/syno/etc.defaults/rc.sysv/apparmor.sh stop
cd /volume1/@appstore/VPNCenter/apparmor
sudo vi pkg_VPNCenter

Après les lignes suivantes :

#include <tunables/global>

/volume*/@appstore/VPNCenter/sbin/openvpn {
    #include <abstractions/base>
    #include <abstractions/base-cgi>

Ajoutez les 5 lignes suivantes :

/volume1/@appstore/VPNCenter/scripts/ovpnCNcheck.sh      rix,
/volume1/@appstore/VPNCenter/scripts/userlist.txt        r,
/volume1/@appstore/VPNCenter/scripts/openvpn-notify.sh   rix,
/volume*/@optware/{,**}                                  rix,
/usr/bin/grep                                            ix,

Sauvegardez le fichier et relancez le service :

sudo /usr/syno/etc.defaults/rc.sysv/apparmor.sh start

Depuis la MAJ de VPN Center du 21/02/17 (V1.3.5-2757), il est nécessaire de relancer AppArmor dès que vous modifiez le fichier de configuration OpenVPN ou au redémarrage du serveur NAS. Pour relancer le service AppArmor lors d’une modif de config OpenVPN, utilisez la commande ci-dessus (stop puis start).

Pour créer un script qui relance AppArmor au démarrage du NAS, rendez-vous dans le Panneau de Configuration, puis Planificateur de Tâches et cliquez sur le bouton Créer, Tâche déclenchée, Script défini par l’utilisateur.

Indiquez un nom pour la tâche, par ex. AppArmor :

Puis saisissez le script suivant :

sleep 120
/usr/syno/etc.defaults/rc.sysv/apparmor.sh stop
sleep 5
/usr/syno/etc.defaults/rc.sysv/apparmor.sh start

Client OpenVPN Windows

Téléchargez et installez le client OpenVPN, version Windows Installer 32bits ou 64bits, Windows Vista or later.

Une fois installé, pensez à vérifier les paramètres réseaux de votre logiciel antivirus/firewall afin d’autoriser l’adaptateur TAP installé par le client OpenVPN sur votre réseau.

Exemple avec BitDefender, l’adaptateur TAP s’appelle « Ethernet » et on lui affecte le mode le plus sûr disponible dans les paramètres du firewall logiciel :

Pensez également à supprimer le mode furtif de votre logiciel antivirus/firewall s’il existe, ce qui est le cas pour Bitdefender.

Certificats

Un premier certificat Client a déjà été créé lors de l’inscription à StartSSL avec l’adresse email info@mon site.com et il a été installé au format PKCS#12 sur le PC cible. Ça suffit pour configurer votre client surtout s’il est unique.

En fonction de la date de création de votre certificat client, copiez le certificat d’autorité racine (c’est un bundle de certificats) avec les droits d’administrateur dans le dossier OpenVPN de votre PC soit C:\Program Files\OpenVPN\config :

Renommez le certificat d’autorité racine en ca.crt dans le dossier OpenVPN.

Copiez également dans ce même dossier la clé d’authentification SSL/TLS, ta.key, créée précédemment.

Modifiez sur le serveur la liste des utilisateurs autorisés à se connecter qui est vérifiée par la directive tls-verify dans le fichier de configuration OpenVPN du serveur.

Toutefois, comme pour le serveur, il est possible de créer de multiples certificats clients pour différencier les clients qui se connecteront au serveur OpenVPN du NAS.

Pour créer un second certificat, par exemple avec l’email prenom.nom@monsite.com, connectez-vous à StartSSL et cliquez sur l’onglet Validations Wizard afin de valider l’adresse email :

Complétez le formulaire suivant puis cliquez sur Send a verification code, puis saisissez le code réceptionné par mail et cliquez sur Validation :

Cliquez sur To order Client Certificate pour continuer :

Saisissez l’email que vous venez de valider :

Créez un CSR et une clé privée avec l’outil StartCom Tool (voir le détail de la procédure au chapitre Inscription à StartSSL) :

Copiez le CSR généré sur la page StartSSL puis cliquez sur Submit :

StartSSL vous propose alors de télécharger un fichier archive. Dézippez-le pour extraire le certificat qui est sous la forme suivante : 2_prenom.nom@monsite.com.crt

Dans l’outil StartCom Tool, rendez-vous dans l’onglet Certificate et choisissez l’option Export PFX. Puis sélectionnez le certificat client et la clé privée précédemment créée.

Saisissez une passphrase qui chiffrera le fichier et cliquez sur Submit pour créer le fichier au format PKCS#12 (ajoutez .pfx au nom de fichier, par exemple prenom.nom@monsite.com.pfx) :

Une fois cette procédure terminée, il est nécessaire d’importer ce nouveau certificat et de reprendre la procédure au début du chapitre notamment si vous installez ce certificat sur un nouveau PC.

Configuration OpenVPN

Créez avec l’application Notepad++ le fichier de configuration pc-config.ovpn avec les paramètres proposés ci-dessous. Pensez à remplacer les adresses IP par les vôtres :

client
dev tun
redirect-gateway autolocal def1

# Servers
<connection>
remote vpn.monsite.com 443 tcp
</connection>
<connection>
remote vpn.monsite.com 1194 tcp
</connection>

# Cipher and Hash Algorithm
tun-mtu 48000
fragment 0
mssfix 0
tls-client
tls-timeout 10
cipher AES-256-CBC
auth SHA512
tls-version-min 1.1
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA

# Certificates
tls-auth ta.key 1
ca ca.crt
cryptoapicert "THUMB:EMPREINTE SHA1 DU CERTIFICAT CLIENT"
remote-cert-eku "TLS Web Server Authentication"
verify-x509-name "vpn.monsite.com" name

# tls-remote vpn.monsite.com
# ns-cert-type server
# remote-cert-tls server
# The "float" tells OpenVPN to accept authenticated packets from any address,
# not only the address which was specified in the --remote option.
# This is useful when you are connecting to a peer which holds a dynamic address
# such as a dial-in user or DHCP client.
# (Please refer to the manual of OpenVPN for more information.)
# float

# If redirect-gateway is enabled, the client will redirect it's
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)
# redirect-gateway

# dhcp-option DNS: To set primary domain name server address.
# Repeat this option to set secondary DNS server addresses.
# dhcp-option DNS DNS_IP_ADDRESS
# DNS OpenDNS
# dhcp-option DNS 208.67.222.222
# dhcp-option DNS 208.67.220.220

# Try to preserve some state across restarts.
persist-key
persist-tun

resolv-retry infinite
reneg-sec 0
verb 3
auth-nocache
auth-user-pass

Les points importants de la configuration OpenVPN du client :

  • redirect-gateway autolocal def1 : conservez cette directive si votre client OpenVPN est situé sur le même sous-réseau que le serveur (flag autolocal)
  • <connection> : définit un profil de connexion du client qui comprend un serveur, un port et un protocole. Chaque profil est encadrée par les tags <connection> et </connection> qui sont utilisés dans l’ordre jusqu’à ce qu’une connexion soit établie. Dans le fichier de configuration proposé, il y a 3 profils dont seul le port est différent : 443 (port renvoyé vers SSLH par le routeur) pour une utilisation sur un réseau public ou d’entreprise, 3443 (port d’entrée SSLH) et 1194 (port OpenVPN)
  • tun-mtu, fragment et mssfix : taille du MTU OpenVPN pour augmenter les performances OpenVPN (voir les références)
  • tls-timeout 10 : définit le timeout TLS à 10 secondes. En fonction du réseau utilisé il pourra s’écouler plusieurs secondes avant d’effectuer toutes les vérifications paramétrées dans le fichier de configuration (> à 3s pour un réseau Wifi et > à 5s pour un réseau 3G)
  • cipher AES-256-CBC : utilisation de l’algorithme de chiffrement AES avec une clé de 256 bits
  • auth SHA512 : utilisation de l’algorithme de hachage SHA512 avec une empreinte de 512 bits pour augmenter le niveau de sécurité
  • tls-version-min 1.1 : la version TLS utilisée est au minimum la v1.1. Et non la v1.2 car la directive cryptoapicert utilisée sur PC ne fonctionne qu’en v1.1
  • tls-cipher : définit et limite les suites de chiffrement TLS. Les différentes suites TLS sont séparées par le symbole « : »
  • cryptoapicert “THUMB:EMPREINTE SHA1 DU CERTIFICAT CLIENT” : vérifie l’empreinte SHA1 du certificat client qui a été installé dans le magasin de certificats Windows. Cette directive permet d’éviter de laisser la clé privée (client.key) en clair sur le PC. En effet, comme nous avons importé le certificat au format PKCS#12 en empêchant l’exportation de la clé, cette info restera réellement privée augmentant ainsi le niveau de sécurité. L’empreinte SHA1 du certificat client se retrouve en consultant le magasin de certificats Windows. Cliquez sur les touches Windows + R et ouvrez le programme certmgr.msc puis cliquez sur le magasin Personnel puis Certificats et enfin sur le certificat client, onglet Détails :

Ce qui donne la directive suivante dans cet exemple (utilisez uniquement un espace pour séparer les différents nombres entre eux) :

cryptoapicert "THUMB:50 AB 78 9B 5C B8 12 38 2C A2 C8 36 78 90 B9 A0 C6 25 D3 E5"
  • remote-cert-eku : vérifie l’Extended Key Usage (EKU) du certificat serveur. Le magasin de certificats Windows ne contient pas cette information mais grâce au logiciel XCA vous pouvez déterminer cette valeur en important le certificat serveur 2_vpn.monsite.com.crt dans une base de données XCA, en cliquant sur le certificat serveur puis en vous rendant dans l’onglet Extensions. Vous trouverez les détails de l’EKU dont le paramètre TLS Web Server Authentication :

  • verify-x509-name : vérifie le nom commun du certificat serveur. Depuis l’Explorateur Windows, double-cliquez sur le certificat serveur 2_vpn.monsite.com.crt et le champ Objet indique le commonName dans l’onglet Détails. Dans cet exemple, le nom commun du certificat serveur est vpn.monsite.com. Le nom du certificat serveur doit toujours être suivi du paramètre name :
  • reneg-sec : une valeur de renégociation de la connexion à zéro signifie que c’est celle du serveur qui sera prise en compte

Client OpenVPN

Lancez le client OpenVPN et une icône de notification apparait sur la barre de tâche. Click droit sur cette icône et cliquez sur Connecter :

Choisissez le fichier de configuration pc_config et saisissez les infos du compte autorisé par le Serveur VPN du NAS (menu Privilège du VPN Server du NAS) :

Et vous voilà connecté au serveur OpenVPN du NAS Synology !

Vous pouvez maintenant accéder à vos fichiers stockés sur le NAS Synology en toute sécurité directement depuis l’Explorateur Windows.

Client OpenVPN iOS

Installez l’App OpenVPN Connect sur votre iPhone ou iPad depuis l’App Store.

Certificats

Les certificats nécessaires sont les mêmes que ceux installés pour le PC :

  • Le certificat client et sa clé privée au format PKCS#12 : prenom.nom@monsite.com.pfx
  • Le certificat d’autorité racine : ca.crt
  • La clé d’authentification SSL/TLS : ta.key

Le certificat d’autorité racine et la clé d’authentification OpenVPN seront installés en même temps que le fichier de configuration (voir le chapitre suivant).

Pour le certificat client et sa clé privée, envoyez le fichier PKCS#12 (.pfx) par mail puis sélectionnez-le pour l’installer :

Appuyez sur le bouton Installer puis entrez le code de verrouillage de votre terminal :

Appuyez sur le bouton Installer :

Appuyez sur le bouton Installer :

Saisissez la passphrase du certificat PKCS#12 puis appuyer sur Suivant :

Appuyez sur OK pour finaliser l’installation :

Pour passer le certificat client de Non signé à Vérifié dans le magasin de certificats du terminal (Réglages – Général – Profils), installez les nouveaux certificats d’autorité racine StartCom Certification Authority G3 et StartCom Certification Authority ECC, avec la même procédure que le certificat client.

Retrouvez ces deux certificats dans le magasin de certificats StartSLL, téléchargez-les et renommez-les en “.crt” avant des les installer.

Configuration OpenVPN

La configuration est quasi identique à celle du PC.

Les points qui changent :

  • supprimer la directive cryptoapicert c’est directement dans l’App OpenVPN que sera précisée le certificat client utilisé
  • supprimer les directives tun-mtu, fragment et mssfix car toutes ces directives ne sont pas interprétées par le client OpenVPN iOS

Client OpenVPN

Une fois les certificats et le fichier de configuration prêts, il faut les télécharger sur le smartphone ou la tablette en connectant le terminal sur votre PC et en lançant iTunes.

Sélectionnez votre terminal et cliquez sur l’onglet Apps. Dans la section Partage de fichiers, sélectionnez l’application OpenVPN et ajoutez les 2 certificats, ca.crt et ta.key, et le fichier de configuration ios-config.ovpn :

iTunes va alors transférer les fichiers sur votre terminal et l’App OpenVPN Connect va vous signaler qu’un nouveau profil OpenVPN, vpn.monsite.com/ios-config, est disponible :

Appuyez alors sur le bouton + de couleur verte pour ajouter ce nouveau profil :

Sélectionnez le certificat en appuyant en face du libellé Certificate sur None selected puis saisissez les infos de connexion de l’utilisateur :

Et vous voilà connecté au serveur OpenVPN du NAS Synology !

Pour accéder à vos fichiers stockés sur le NAS Synology en toute sécurité, je vous conseille l’App FileBrowser
 

Références

http://riaschissl.bestsolution.at/2015/01/openvpn-extended-verification-of-x-509-client-certificates/
http://robert.penz.name/21/ovpncncheck-an-openvpn-tls-verify-script/
http://www.monlinux.net/2015/03/openvpn-notify-email-connexion-utilisateur/
http://thisishow.info/synology-nail-send-mail-from-command-line-using-gmail/
http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Capability_rules
https://github.com/clinton-hall/nzbToMedia/wiki/Download-Station
https://support.microsoft.com/fr-fr/kb/2696547
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://www.lowendtalk.com/discussion/40099/why-openvpn-is-so-slow-cool-story
https://forums.openvpn.net/viewtopic.php?t=15826
https://community.openvpn.net/openvpn/wiki/Gigabit_Networks_Linux

Code Javascript xkcd :
http://preshing.com/20110811/xkcd-password-generator/
https://www.rempe.us/diceware/#french
http://hilog.co/fonction-javascript-de-separateur-de-milliers-63.html
http://www.toutjavascript.com/source/formater.html

Droit d’auteur de l’image à la une : kentoh / 123RF Banque d’images