Sécurisation de l’accès externe à un NAS Synology

Introduction

Heureux utilisateur d’ un NAS Synology depuis quelques temps pour y stocker ma musique dématérialisée, j’ai décidé d’ y stocker mes photos et films de famille. Autant le dire tout de suite: des documents hautement sensibles 🙂 Plus sérieusement, ce sont les seuls fichiers auxquels je tiens vraiment! J’ai donc cherché à savoir comment protéger mon NAS tout en me permettant d’ y accéder de n’ importe où: ça fait toujours plaisir de pouvoir montrer aux potes les progrès de ses bambins 🙂 Protéger son NAS me semble d’autant plus souhaitable que certaines version du DSM (l’ interface web fournie sur les NAS Synology) ont été vulnérables à certains cryptolocker…

Les captures d’écran et autres informations de cet article ont été obtenues sur un Synology DS216Play avec DSM 6.1-15047, mais depuis, j’ai effectué la même chose sur d’ autres modèles des séries DS218play, DS218+, DS220+. Ce que je raconte ici est commun à la plupart des versions du DSM, du moment que les outils comme OpenVPN sont disponible pour votre modèle de NAS Synology.

Après avoir parcouru le site officiel de Synology https://www.synology.com/fr-fr/knowledgebase/DSM/tutorial/General/How_to_add_extra_security_to_your_Synology_NAS et d’autres pages telles que https://news.infomaniak.com/securiser-acces-synology/, j’ai retenu les points suivants pour en améliorer la sécurité:

  1. Création d’un nouveau compte admin, et désactivation de celui par défaut (la base).
  2. Activation de la double authentification.
  3. Paramétrer les règles concernant la « force » des mots de passe au maximum.
  4. Désactivation de QuickConnect (on ne sait pas vraiment à quoi tient sa sécurité).
  5. Modification des ports par défaut (nous utiliserons ici 6809 pour http et 6810 pour https)
  6. Activation de https et redirection http->https (ceci a un impact important sur la suite).
  7. Désactivation de tous les services inutiles et sécurisation des utiles (ftp, sftp, ssh, etc.)
  8. Activation de la protection DoS
  9. Désactivation de DSM dans iFrame
  10. Désactivation de l’IP V6, à moins que vous en ayez réellement besoin…
  11. Configuration du parefeu du NAS (notamment pour restreindre les IP sources à des IPs françaises par exemple si vous résidez en France et bloquer les autres).
  12. Mettre à jour dès que de nouvelles versions de DSM sont disponibles.

Avec ces réglages, le seul moyen natif d’accéder à votre NAS est par l’ intermédiaire de son interface web, sur le port choisi au point 5 (6809 ou 6810 dans notre cas). Il me semble qu’ alors, on peut y accéder à distance avec une relative sécurité, à condition bien sûr, de rajouter une règle de NAT sur le parefeu de votre modem/routeur afin de rediriger le port d’écoute vers le port du NAS.

Cependant, je reproche à cette solution plusieurs points:

  1. Le NAS est en permanence directement visible sur tout l’internet (sauf restriction effectuée ci-dessus au point 11).
  2. Son port d’écoute peut être attaqué et des failles de DSM peuvent être exploitées.

1.Première amélioration possible

Dans le cas où on dispose d’un accès à un serveur en ligne, disons sous GNU/linux. On peut alors imaginer qu’ au démarrage du NAS un tunnel SSH soit mis en place vers notre serveur en ligne. Ensuite, lorsqu’ on a besoin d’ accéder à l’ interface DSM du NAS à distance, depuis votre ordi préféré ou celui d’un pote, il suffit de se connecter au serveur en ligne, d’ ouvrir un second tunnel et d’utiliser votre navigateur préféré vers le serveur en ligne. Même chose pour utiliser les applications DS Audio/ DS Photo etc. sur votre tablette Android. Détaillons…

1.1.Première étape: à réaliser une fois pour toutes

Mise en place d’un tunnel ssh du NAS vers un serveur en ligne.

Pour les besoins de cette étape, il est nécessaire d’ activer le service ssh de votre NAS et de choisir, arbitrairement, un numéro de port disponible sur votre serveur en ligne. Il est important de le choisir supérieur à 1024 et inférieur à 65535, cela laisse du choix. Nous avons choisi ici, le numéro 6565, mais nous aurions tout aussi bien pu prendre 7777 ou 55555. Ci-dessous, les commandes à taper en ligne de commande démarrent après le caractère ‘>’, mais cet article s’ adresse à des lecteurs auxquels je n’ ai pas besoin de le préciser 🙂

  • Se connecter à votre NAS via ssh et passez en root (commande sudo bash) et créez-vous un couple de clés ssh publique/privée via la commande:

    root@mon_nas:~> ssh-keygen -t dsa

    N’ indiquez pas de mot de passe pour votre clé.
    ssh-keygen
  • Une fois les clés générées dans /root/.ssh, copiez la clé publique sur votre compte de votre serveur en ligne via la commande

    root@mon_nas:~> scp ~/.ssh/id_dsa.pub mon_user@mon_serveur.fr:~

    L’ intérêt de cette opération est d’ éviter à votre serveur en ligne de vous demander un mot de passe à chaque fois que vous lancerez votre tunnel…

  • Connectez-vous sur votre serveur en ligne via ssh/putty/fireSSH sur mon_user@mon_serveur.fr et ajoutez la clé aux clés autorisées:

    mon_user@mon_serveur:~> cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

    puis supprimez le fichier devenu inutile, toujours sur votre serveur en ligne:

    mon_user@mon_serveur:~> rm ~/id_dsa.pub

  • Sur DSM, dans le ControlPanel (Panneau de Configuration), puis TaskScheduler (Planificateur de tâches), créer une nouvelle ‘TriggeredTask’ (Tâche déclenchée)  avec le nom de votre choix: ‘tunnel ssh’, puis comme user: root et comme événement de lancement: boot-up (démarrage). Puis, dans les réglages de la tâche: /bin/ssh -fNR 6565:localhost:6810 mon_user@mon_serveur.fr. Ainsi, à chaque démarrage du NAS,  il créera un tunnel ssh du port 6810, le port d’écoute de DSM (défini au point 5 ci-dessus) vers le port 6565 de votre serveur en ligne.

1.2.Deuxième étape:à chaque fois que vous souhaitez accéder à votre NAS

Vous êtes n’importe où dans le monde avec un accès internet, par exemple chez votre tatie, et vous voulez lui montrer comment le petit dernier exerce ses talents de peintre abstrait sur le mur du salon…

  • Vous utilisez son ordi relié au net et vous vous connectez à votre serveur en ligne (via putty par exemple si par malheur vous n’êtes pas sous GNU/Linux), ou via le module fireSSH de FireFox. Une fois sur votre serveur en ligne, vous établissez un second tunnel (*), là encore, vers un port de votre choix. Ici, nous avons arbitrairement choisi le port 30000:

    mon_user@mon_serveur:~> ssh -gNL30000:localhost:6565 mon_user@mon_serveur.fr

    Cette commande peut bien-sûr être scriptée, voire lancée automatiquement à chaque connexion à votre serveur en ligne, dans ce cas, l’ option -f peut s’ avérer indispensable (*). Tous les raffinements possibles sont envisageables. La seule chose importante est de choisir un port externe valide (entre 1024 et 65535, non utilisé, et surtout, NON FILTRE par le parefeu de votre serveur en ligne.
  • Maintenant, et tant que ce tunnel est en place (*), vous pouvez utiliser votre navigateur sur https://mon_serveur.fr:30000 et vous vous retrouvez alors sur l’interface DSM de votre NAS! Il ne vous reste plus qu’ à saisir les identifiant et mot de passe de votre compte pour montrer les photos à votre tatie! Attention, car le port 30000 est ouvert sur la machine mon_serveur.fr et n’ importe qui sur le net peut tenter d’ y accéder tant que le tunnel est en place. Mais dés que la commande ssh ci-dessus ayant établi le tunnel est tuée, alors l’accès est impossible et le port 30000 est refermé.
  • De même, si vous utilisez les applis Synology DS Audio, DS Photos, etc. Il vous suffit de configurer l’ accès à mon_serveur.fr:30000, de cocher la case https et de renseigner vos identifiants et mots de passe de votre compte. Vous pourrez alors utiliser ces applis pour naviguer comme si vous étiez connectés en local à votre NAS.

(*): si vous ajoutez l’option -f à la commande ssh, cela lance le tunnel en tâche de fond et vous rend la main. Pour le fermer, il faudra tuer le processus correspondant.

Bon, tout ça c’est bien, mais gros inconvénient: il faut un accès à un serveur en ligne… D’autre part, un autre inconvénient est que selon que vous êtes sur votre réseau local (disons que votre NAS est en 192.168.1.1) ou à distance (mon_serveur.fr:30000), il faudra utiliser la bonne adresse de votre NAS qui sera différente, du moins dans les outils DSAudio, DSFile, DSPhoto, etc. Jongler entre les deux peux être vite rébarbatif.

2.Deuxième amélioration possible

Si vous n’ avez pas un accès à un serveur en ligne pour réaliser un tunnel ssh la solution précédente ne convient pas. Il faut autre chose et si possible permettant une activation/désactivation à la demande afin de ne pas laisser le NAS vulnérable à plein temps. Ayant un peu d’ expérience sur OpenVPN, grâce à mon boulot, je me suis demandé s’ il n’ était pas possible d’ utiliser cette possibilité… Bingo! A condition que la version de votre NAS Synology supporte l’ application VPN Server, ce qui me semble être le cas de la plupart des modèles. Une autre condition requise est de disposer d’une adresse IP publique fixe ou bien d’un service de nom de domaine (dyndns par exemple) afin d’accéder à votre NAS de l’extérieur de votre réseau.

2.1.Première étape: préparation

  • Depuis le gestionnaire de paquets DSM, installer le package VPN Server:
  • Sur l’onglet Settings->OpenVPN, il faudra ensuite exporter la configuration en cliquant sur le bouton Export Configuration:
  • Ensuite, une fois l’ archive openvpn.zip téléchargée et dézippée, il suffit d’ éditer le fichier VPNConfig.ovpn et de modifier la ligne remote YOUR_SERVER_IP 1194 en remplaçant YOUR_SERVER_IP par votre ip publique statique ou votre nom de domaine pointant sur votre ip publique fixe ou dynamique. Ensuite, il faudra configurer votre client VPN avec ce fichier de config uniquement (le ca.crt fourni dans l’archive est déjà inclus dans le fichier .ovpn). A noter aussi que j’ai eu besoin d’ajouter l’option « client-cert-not-required » (comme mentionné ici), afin d’éviter que l’application android se plaigne de l’absence d’un certificat. Les clients VPN que j’ ai utilisé avec succès sont les suivants:
    • OpenVPN Connect pour Android
    • OpenVPN GUI pour Windows
    • OpenVPN pour GNU/Linux
  • Ensuite, il faut bien sur ouvrir le port 1194 (port par défaut d’ OpenVPN que je recommande de modifier) en UDP sur votre modem/routeur et le rediriger vers l’ IP de votre NAS.

2.2.Deuxième étape: utilisation

Une fois votre serveur VPN, et vos différents clients configurés, on peut passer à l’ utilisation. Il suffit de lancer la connexion de votre client. Le serveur est accessible par défaut à l’ IP 10.8.0.1. Une fois la connexion établie vous pourrez alors naviguer sur l’ interface DSM en faisant pointer votre navigateur sur https://10.8.0.1. De manière similaire, vous pourrez utilisez les applications habituelles de Synology: DS Audio, DS Photo, etc. en configurant l’accès à 10.8.0.1:6810 + https. Ainsi, le seul port ouvert visible de l’ extérieur de votre réseau, est celui du service VPN (1194 par défaut), et non celui du NAS (6809 dans notre cas). Il reste cependant l’inconvénient vu au point 1. concernant les changements d’adresses IP dans les applications DSAudio, etc. En effet, selon que vous êtes à distance derrière le VPN, vous devrez utiliser l’IP VPN de votre NAS: 10.8.0.1, alors que chez vous, sur le réseau local de votre NAS, il faudra passer par 192.168.1.1 (en supposant le NAS sur cette adresse). Le paragraphe ci-dessous indique comment éviter cela.

2.3.Amélioration ultime

La solution au-dessus a encore deux inconvénients majeurs. En effet, telle quelle, on peux accéder à distance au NAS, via le VPN. On peut également utiliser les applis DS Photo, Video, Music (etc.) sur son mobile Android connecté au VPN via l’ IP VPN du NAS (10.8.0.1). Or, on ne peux pas accéder à d’autres appareils situés sur le même réseau local que le NAS, à moins de leur installer et configurer à eux aussi un client VPN avec à chacun une IP différente sur le VPN. Ce qui n’est parfois pas possible comme dans le cas d’un ampli audio réseau, d’un téléviseur réseau, etc. De plus, comme vu au paragraphe précédent, si on utilise souvent les applications Android DS Photo, etc., ça va vite devenir pénible d’avoir à changer l’IP du serveur NAS selon que l’on est sur le réseau local du NAS, ou bien à distance via le VPN…

La solution: dans la fenêtre de configuration du serveur VPN, cocher la case ‘Autoriser aux clients l’accès au serveur LAN‘, comme ci-dessous:
Oui j’ai mis du temps à comprendre que c’était l’option que je recherchais depuis un bout de temps. Mais avec ce choix, les deux soucis décrits ci-dessus disparaissent! La seule condition est qu’il n’y ait pas de conflit d’adresses IP entre l’endroit extérieur où vous vous trouvez (sans doute sur un sous-réseau 192.168.1.0 si vous êtes en wifi) et les IPs de votre réseau local chez vous. Pour limiter ce risque, vous pouvez configurer tout votre réseau privé sur une plage peu utilisée, par exemple 192.168.100.0 dans mon cas.

Quelle simplicité alors, d’utiliser les applications DS Photo (etc.) avec toujours la même IP (192.168.100.1 dans mon cas), que l’on soit en local, ou à distance via le VPN! De plus, grâce au VPN, je peux accéder à distance à tous les appareils (qui le supportent), comme mon routeur ou mon PC fixe par exemple, sans avoir eu besoin de leur installer OpenVPN ni d’avoir eu à leur changer leur configuration réseau.

Conclusion

Ces deux systèmes me semblent garantir une très bonne sécurité. En outre, ils peuvent se cumuler. En effet, rien ne vous empêche d’ utiliser un tunnel ssh vers un serveur vpn, mais bon, là ça commence à faire un peu usine à gaz non 🙂 ? Personnellement, je me sers régulièrement de la seconde solution, basée sur OpenVPN depuis mon appareil Android, et elle donne des résultats tout fait convenables en terme de performances. De plus, elle est pratique et simple à utiliser.

J’ espère que votre lecture jusqu’ ici vous aura été utile, n’ hésitez pas à me faire part de toutes vos remarques, questions, corrections, etc.

Liens utiles

https://www.nas-forum.com/forum/topic/54453-tuto-s%C3%A9curiser-les-acc%C3%A8s-%C3%A0-son-nas/

 

 

 

 

Laisser un commentaire

Your email address will not be published.