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


Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Warning: preg_match(): Compilation failed: invalid range in character class at offset 63 in /homepages/3/d257881718/htdocs/numb/wordpress/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php on line 183

Introduction

Heureux utilisateur de ce NAS depuis quelques temps pour y stocker de la musique, 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…

Bien que je cause ici du Synology DS216Play avec DSM 6.1-15047, je pense que ce que je raconte est adaptable à pas mal de NAS et de versions de DSM.

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 il me semble qu’ on peut accéder à son NAS à distance avec une relative sécurité, à condition bien sur 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 (HTTPS/TCP/6810 dans notre exemple).

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.

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…

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

  • Se connecter en ligne de commande sur votre NAS (en ssh par exemple). Passez en root (sudo bash) et créez-vous un couple de clés ssh publique/privée via la commande: ssh-keygen -t dsa. N’indiquez pas de mot de passe pour la 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 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 compte en ligne à mon_user@mon_serveur.fr et ajoutez la clé aux clés autorisées: cat ~/id_dsa.pub >> ~/.ssh/authorized_keys, puis supprimez le fichier devenu inutile sur votre serveur en ligne: rm ~/id_dsa.pub.
  • Sur DSM, dans le ControlPanel, puis TaskScheduler, créer une nouvelle ‘TriggeredTask’  avec le nom de votre choix: ‘tunnel ssh’, puis comme user: root et comme événement de lancement: boot-up. Puis, dans les réglages de la tâche: /bin/ssh -fNR 6565:localhost:6810 mon_user@mon_serveur.fr. Ainsi, chaque fois que le NAS démarre, il crée un tunnel ssh du port 6810, le port d’écoute de DSM défini au point 4 ci-dessus vers le port 6565 de votre serveur en ligne.

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: ssh -gNL30000:localhost:6565 mon_user@mon_serveur.fr
  • 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.
  • 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 il faut un accès à un serveur en ligne, que faire si je n’ en ai pas?

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!

Première étape: préparation

  • Depuis DSM d’ 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 ainsi que le certificat ca.crt fournit dans l’archive. 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.

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 (5000 par défaut).

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.

 

 

 

 

Laisser un commentaire

Your email address will not be published.