User Tools

Site Tools


informatique:hardware:synology_ds415plus

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:hardware:synology_ds415plus [2018/02/10 16:22] – [Virtualisation] pteuinformatique:hardware:synology_ds415plus [2024/03/22 11:05] (current) – [Sécurisation du NAS] pteu
Line 58: Line 58:
  
 <code> <code>
-+ excellentes performances, les meilleures pour des données chiffrées++ excellentes performances mono-tâche, les meilleures pour des données chiffrées
 + petite taille (mais costaud.. ) + petite taille (mais costaud.. )
 + bon rapport qualité/prix + bon rapport qualité/prix
Line 64: Line 64:
 + l'OS DSM bien fini et extensible via les extensions + l'OS DSM bien fini et extensible via les extensions
  
-pas de virtualisation possible, alors que d'autres (Qnap TS-451 par ex.) le font dans cette gamme de prix +il arrive que les disques fassent vibrer le boitier, ce qui génère du bruit 
-les disques font vibrer le boitier, ce qui génère du bruit+- performances multi-tâches limitées
 </code> </code>
  
Line 71: Line 71:
  
 Cette partie traite de la sécurisation (hardening) d'un NAS Synology. Parce qu'il arrive qu'il contienne des données sensibles et qu'il soit connecté à Internet, il faut prendre quelques précautions. Cette partie traite de la sécurisation (hardening) d'un NAS Synology. Parce qu'il arrive qu'il contienne des données sensibles et qu'il soit connecté à Internet, il faut prendre quelques précautions.
 +
 +Sources:
 +  * [[https://www.nas-forum.com/forum/topic/77493-tuto-pas-%C3%A0-pas-s%C3%A9curisation-du-nas-pour-dsm-7/|Sécurisation du NAS - pour DSM 7]] (sur nas-forum.com)
  
 ====système==== ====système====
Line 175: Line 178:
   * **SynoCommunity** (Location=http://packages.synocommunity.com/)   * **SynoCommunity** (Location=http://packages.synocommunity.com/)
   * **cphub** (Location=https://www.cphub.net)   * **cphub** (Location=https://www.cphub.net)
 +
 +====synogear====
 +Certains outils de base des distributions Linux sont installables en CLI avec la commande ''synogear'' :
 +<code bash>
 +# installation, en root (sudo)
 +synogear install
 + download DiagnosisTool 3.0.1-3008 successfully
 +
 +# lister les composants installés
 +synogear list
 +</code>
 +
 +On retrouvera par exemple iperf, dig, iostat, tcpdump, tracepath, tmux etc...
  
 ====Tiny Tiny RSS==== ====Tiny Tiny RSS====
Line 208: Line 224:
  
 Pour qu'un utilisateur puisse utiliser Audio Station, aller dans le Panneau de configuration/Utilisateur ; cliquer sur l'utilisateur puis sur l'onglet Applications, et vérifier les droits. Pour qu'un utilisateur puisse utiliser Audio Station, aller dans le Panneau de configuration/Utilisateur ; cliquer sur l'utilisateur puis sur l'onglet Applications, et vérifier les droits.
 +
 +====Jellyfin====
 +Logiciel de catalogue et lecteur multimédia en mode web. Dockerisable, Jellyfin existe en paquet SynoCommunity plus simple à installer (à accompagner avec le paquet ffmpeg, qui est proposé par l'assistant).
 +
 +Avec DSM 7 il faut octroyer les droits d'accès au répertoire multimédia à l'utilisateur interne sc-jellyfin : pour cela aller dans le panneau de configuration> Dossier partagé ; clic droit sur le dossier> Modifier. Dans la fenêtre, choisir l'onglet Permissions, choisir dans la selectbox "Utilisateur du système interne" et donner les droits en Lecture seule  l'utilisateur sc-jellyfin.
 +{{ :informatique:hardware:syno_droits_jellyfin.jpg |}}
 +
 =====Virtualisation===== =====Virtualisation=====
  
Line 240: Line 263:
  
  
 +=====Docker=====
 +
 +Pour installer Docker, aller dans Centre de paquets > Docker > Installer
 +
 +{{ :informatique:hardware:docker_-_pihole.png?nolink |}}
 +====Installer pihole====
 +
 +Une fois Docker, installer, le lancer ;
 +  * dans **Registre** on peut rechercher une image sur le dockerhub ; rechercher "pihole" et Télécharger l'image **pihole/pihole** (image officielle de pi-hole.net, ~333 Mo)
 +  * une fois l'image téléchargée, elle apparaît dans le menu **Image** sous la forme "<image>/latest", si on n'a pas spécifié de version spécifique. Sélectionner l'image puis cliquer sur **Lancer**. Cela pour effet d'instancier l'image, qui apparaitra, une fois configurée, sous la forme d'un **Conteneur** (dans le menu éponyme).
 +
 +Pour la configuration, procéder comme suit :
 +  * donner un nom au conteneur, par ex "pihole1"
 +  * cliquer sur paramètres avancés
 +    * dans **Volume**, on va partager des répertoires du Syno avec le conteneur, afin d'avoir certains états sauvegardés d'un lancement sur l'autre ; dans mon cas j'ai créer un dossier "docker", puis un odssier par conteneur (dans ce cas-ci, "pihole"). Dedans, je créer un dossier pour la configuration du serveur DNS (dnsmasq.d) et un pour la configuration du pihole (pihole) ; ceux-ci seront montés, dans le conteneur, dans le répertoire ''/etc'' :
 +<code bash>
 +#Fichier/Dossier         Chemin d'accès
 +docker/pihole/dnsmasq.d  /etc/dnsmasq.d
 +docker/pihole/pihole     /etc/pihole
 +</code>
 +    * dans l'onglet **Réseau**, sélectionner "Utiliser le même réseau que Docker Host". Cela aura pour effet d'avoir l'interface du pihole qui répond sur la même adresse que le NAS.
 +    * dans l'onglet **Environnement**, on va préciser les variables d'environnement pour configurer le conteneur ; on va ajouter celles-ci:
 +<code bash>
 +# mot de passe de l'interface web
 +WEBPASSWORD=MDP4cc3sInterfaceWeb
 +
 +# Spécifie au pihole de répondre à tous les clients qui lui demande
 +# Si on n'est pas sûr de ce que l'on veut faire, il vaut mieux préciser "local"
 +# que "all", c'est plus sécure.
 +DNSMASQ_LISTENING=all
 +
 +# port d'écoute de l'interface web du pihole
 +WEB_PORT=8080
 +
 +# bind le serveur web sur toutes les adresses locales du NAS
 +#ServerIP=0.0.0.0
 +
 +
 +# si vous avez configuré un DNS pour votre Syno, vous pouvez le préciser ici
 +VIRTUAL_HOST=pihole.local.perso
 +
 +# dans mon cas j'ai déjà un résolveur DNS, donc je le spécifie ici. Sinon, ne pas ajouter cette ligne
 +PIHOLE_DNS_=192.168.1.65
 +# on peut préciser plusieurs forwarders séparés par un ";", et spécifier le port d'écoute avec #<PORT>
 +PIHOLE_DNS_=192.168.1.65#5353;80.67.169.12;80.67.169.40
 +</code>
 +
 +On clique sur **Action > Démarrer** et c'est parti, on peut logiquement accéder à l'interface web du pihole à partir sur http://IP_DU_SYNO:8080
 +
 +A noter que si on choisit de changer des variables d'environnement après un premier lancement du conteneur, ça risque de planter car il semble qu'elles soient enregistrées dans une base du pihole ; dans mon cas par exemple j'ai voulu ajouter VIRTUAL_HOST à postériori, le conteneur n'a jamais voulu redémarrer en ma crachant le log :
 +<code bash>
 +::: Testing lighttpd config: Error: duplicate array-key: VIRTUAL_HOST. Please get rid of the duplicate entry.
 +</code>
 +Pour contourner cela, sélectionner le conteneur puis : "Paramètres > Paramètre en double". Cela permettra de modifier les variables d'environnement tout en conservant les données partagées sur les volumes.
 +
 +===Mise à jour du conteneur===
 +
 +Globalement la procédure consiste à arrêter le conteneur, le supprimer, supprimer l'image locale, puis à télécharger la dernière image "latest", et enfin recréer le conteneur.
 +Pour automatiser la re-création du conteneur, on peut créer le user-script suivant dans le planificateur de tâche du syno (à lancer en root, et en désactivant la répétition pour ne le lancer que manuellement) :
 +<code bash>
 +docker run -d --name=pihole-new \
 +-e WEB_PORT=3443 \
 +-e WEBPASSWORD=MDP4cc3sInterfaceWeb \
 +-e DNSMASQ_LISTENING=local \
 +-e VIRTUAL_HOST=pihole.local.perso \
 +-e PIHOLE_DNS_=127.0.0.1#1053;192.168.1.65 \
 +-e TZ=FR \
 +-v docker/pihole/dnsmasq.d:/etc/dnsmasq.d \
 +-v docker/pihole/pihole:/etc/pihole \
 +--net=host \
 +--restart=unless-stopped \
 +pihole/pihole
 +</code>
 +
 +Ressources :
 +  * https://github.com/pi-hole/docker-pi-hole#readme
 +
 +
 +====Docs docker====
 +
 +  * [[https://docs.docker.com/docker-for-windows/install/]]
 +
 +=====Hyperbackup=====
 +
 +Mise en place d'une sauvegarde Hyperbackup sur un NAS Synology vers un serveur rsync "compatible" (pas Synology) via SSH (en l'occurence un NAS OpenMediaVault v5).
 +
 +Sur le serveur OMV distant :
 +* créer un nouveau partage "bck-syno" dans Access Right Manager> Shared Folder
 +* activer le SSHd et créer un utilisateur "usr-hbkp" ; l'ajouter dans le groupe SSH
 +* activer le service rsyncd : dans Services> Rsync
 +   * onglet Server : "Activer"
 +   * créer un nouveau Module, déclarer le dossier partagé, activer "Authenticate users" et ajouter l'utilisateur usr-hbkp
 +
 +Sur le NAS Syno source, installer puis lancer "Hyper Backup" ; puis créer une nouvelle sauvegarde : Serveur de fichier/Rsync :
 +  * type : serveur compatible rsync
 +  * chiffrement activé
 +  * saisir l'IP distante, l'utilisateur usr-hbkp et son mot de passe SSH
 +  * choisir le répertoire à sauvegarder
 +
 +Lancer la sauvegarde. Les fichiers **rsyncd.conf** et **rsyncd.secrets** seront créés dans le dossier distant.
 =====Tips===== =====Tips=====
  
 +====Installer les plugins OMV-extra====
 +
 +Vu ici : https://forum.openmediavault.org/index.php?thread/5549-omv-extras-org-plugin/
 +<code bash>
 +wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
 +</code>
 ====Connexion SSH==== ====Connexion SSH====
  
Line 252: Line 381:
 ====Certificat SSL/TLS let's encrypt==== ====Certificat SSL/TLS let's encrypt====
  
-Pour revalider son certificat [[https://letsencrypt.org/|let's encrypt]] (qui n'est valide que 3 mois) : +Pour renouveler son certificat [[https://letsencrypt.org/|let's encrypt]] (qui n'est valide que 3 mois) : 
-  * ouvrir le port tcp/80 vers le syno +  * ouvrir le port public tcp/80 vers le port tcp/80 syno 
-  * lancer en tant que root (login SSH ''sudo -i'')+  * se logguer en SSH avec un compte admin au syno, puis : ''sudo /usr/syno/sbin/syno-letsencrypt renew-all [ -v[v] ]'' ; ex :
 <code bash> <code bash>
-/usr/syno/sbin/syno-letsencrypt renew-all+sudo /usr/syno/sbin/syno-letsencrypt renew-all -v 
 + 
 +DEBUG: Issuer name of certificate. [Let''s Encrypt]->[/usr/syno/etc/certificate/_archive/JjujoD/cert.pem] 
 +DEBUG: Issuer name of certificate. [Synology Inc.]->[/usr/syno/etc/certificate/_archive/lx0mfJ/cert.pem] 
 +DEBUG: certificate is not issued by Let''s encrypt. [/usr/syno/etc/certificate/_archive/lx0mfJ/cert.pem] 
 +DEBUG: start to renew [/usr/syno/etc/certificate/_archive/JjujoD]. 
 +DEBUG: setup acme url https://acme-v02.api.letsencrypt.org/directory 
 +DEBUG: GET Request: https://acme-v02.api.letsencrypt.org/directory 
 +DEBUG: GET Request: https://acme-v02.api.letsencrypt.org/acme/new-nonce 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/new-order 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/new-order 
 +DEBUG: Failed to port map router detect. [1] 
 +DEBUG: failed to open port 80. 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/authz-v3/41127559850 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/authz-v3/41127559850 
 +DEBUG: dns-01 is not support for toto.fr 
 +DEBUG: Setup challenge for toto.fr with type http-01 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/chall-v3/41127559850/iipDBw 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/chall-v3/41127559850/iipDBw 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/authz-v3/41127559850 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/authz-v3/41127559850 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/authz-v3/41127559850 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/authz-v3/41127559850 
 +DEBUG: ==> start new-cert. 
 +DEBUG: generate csr & private key 
 +DEBUG: get new-cert 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/finalize/68533444/32870294000 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/finalize/68533444/32870294000 
 +DEBUG: Post JWS Request: https://acme-v02.api.letsencrypt.org/acme/cert/038012c726f8b4e7d4fa059921e49ffb6546 
 +DEBUG: Post Request: https://acme-v02.api.letsencrypt.org/acme/cert/038012c726f8b4e7d4fa059921e49ffb6546 
 +DEBUG: get issuer-cert 
 +DEBUG: save to files 
 +DEBUG: renew success. [/usr/syno/etc/certificate/_archive/JjujoD].
 </code> </code>
 +(PS : le ''sudo -i'' marche aussi)
 +
 +Et si KO : penser à ouvrir bien grand (permit any any) le firewall Syno, cf anecdote qui suit.
 +
 +====Erreur syno-letsencrypt====
 +
 +<WRAP center round tip 80%>
 +TL;DR : Le problème vient d'un filtrage géographique dans le firewall du Syno. Malgré que celui-ci soit désactivé, il bloque quand même les serveurs de letsencrypt. En créant une règle permissive (genre permit any en HTTP) on  fait tomber le script en marche !
 +</WRAP>
 +
 +Je suis récemment tombé sur un os lors du renouvellement de mon certificat letsencrypt : alors que la redirection tcp/80 était bien en place sur mon routeur, le script se vautre en renvoyant l'erreur suivante :
 +<code bash>
 +sudo /usr/syno/sbin/syno-letsencrypt renew-all -v
 +[..]
 +DEBUG: DNS challenge failed, reason: {"error":108,"file":"challenge.cpp","msg":"Not synology DDNS."}
 +DEBUG: Normal challenge failed, reason: {"error":200,"file":"client.cpp","msg":"new_authz: unexpect httpcode."}
 +</code>
 +
 +Sympa l'erreur : "unexpect httpcode". Bon.
 +
 +On passe en mode Columbo : on désactive le firewall du Syno et on relance le script avec l'option //debug de la dernière chance// (''syno-letsencrypt -vv'') ; on voit que notre Syno génère un fichier de "challenge" et le mettre à disposition des serveurs letsencrypt :
 +<code bash>
 +# morceaux choisis du debug :
 +      "error": {
 +        "type": "urn:acme:error:connection",
 +        "detail": "Fetching http://mydomain.com/.well-known/acme-challenge/YuOX1zXw-\
 +lD20Th6mHJzDNhBDkURHo1ZFBHxh5F-A-0: Timeout during connect (likely firewall problem)",
 +        "status": 400
 +      }
 +</code>
 +
 +Ce challenge permet de valider que :
 +  * c'est bien vous qui avez initié la demande de renouvellement
 +  * c'est bien vous le propriétaire du domaine
 +
 +Ce fichier est mis à disposition en HTTP par le serveur nginx du Syno :
 +<code bash>
 +grep -Ri -A3 "acme-challenge" /etc/nginx/*
 +/etc/nginx/nginx.conf-        location ^~ /.well-known/acme-challenge {
 +/etc/nginx/nginx.conf:            root /var/lib/letsencrypt;
 +/etc/nginx/nginx.conf-            default_type text/plain;
 +/etc/nginx/nginx.conf-        }
 +</code>
 +C'est bourrin mais ça paie : le dossier est bien configuré dans nginx, et il est situé "en vrai" dans **/var/lib/letsencrypt/.well-known/acme-challenge/** !
 +
 +Le dossier existe bel et bien et dispose des bons droits, mais en fouinant dans les logs d'erreur du serveur nginx du Syno, je trouve ceci :
 +<code bash>
 +2018/11/02 15:35:20 [error] 6972#6972: *51124 access forbidden by rule, client: 64.78.149.164, server: _, request: \
 +"GET /.well-known/acme-challenge/56f1J6p6Wf3o-g219MmcZS7tCNufwA1Dj1Dm-ddGy1Y HTTP/1.1", host: "mydomain.com"
 +</code>
 +J'aime les erreurs "access forbidden by rule", ça m'aide beaucoup : je n'ai jamais défini de règle de filtrage dans nginx et il n'y en a pas sur ce dossier...
 +
 +Les fichiers de challenge sont temporaires et supprimés à la fin du script ; aussi on va faire le test avec un autre fichier :
 +<code bash>
 +echo "TEST" > /var/lib/letsencrypt/.well-known/acme-challenge/test
 +</code>
 +
 +Puis, j'appelle le fichier depuis mon navigateur ou un wget :
 +<code bash>
 +wget -d http://mydomain.com/.well-known/acme-challenge/test
 +[..]
 +2018-11-02 16:21:06 (121 KB/s) — « test » sauvegardé [5/5]
 +</code>
 +Et là ça passe !
 +
 +C'est donc un filtrage en fonction de l'IP source ; n'ayant rien à perdre, je réactive le pare-feu de mon Syno et supprime le filtrage géographique (le champ "emplacement" dans la conf du firewall) : en mode "permit any any". Je relance le script...
 +<code bash>
 +/usr/syno/sbin/syno-letsencrypt renew-all -v
 +[..]
 +DEBUG: renew success. [/usr/syno/etc/certificate/_archive/OufCaMarche].
 +</code>
 +... et BIM ça marche !
 +
 +Aussi saugrenu que ça paraisse^W soit, chez Synology quand on décoche la case "Activer le pare-feu", ben ça vaut pas dire que ça le désactive (même après reboot du NAS) ! Par ailleurs vu que c'est de l'iptables, c'est étonnant que cela puisse arriver dans les logs nginx...
 +
 +Mais ma curiosité s'arrête là ; à dans 3 mois !
 +
 +
 +====Erreur find en tâche planifiée====
 +
 +Description du problème : un script utilisant l'outil ''find'', et qui se lance sans problème en CLI, ne s'exécute pas normalement lorsqu'il est lancé en tant que tâche planifiée (pourtant sous le même utilisateur) ; le message d'erreur est :
 +> **find: cannot get current directory: Permission denied**
 +
 +D'après [[https://stackoverflow.com/questions/5791651/find-is-returning-find-permission-denied-but-i-am-not-searching-in|ce thread sur stackoverflow]], cela viendrait de l'implémentation du find sur ce système ; quoiqu'il en soit l'astuce indiquée du ''cd /tmp'' juste avant l'appel à ''find'' fonctionne à merveille pour moi.
  
 =====Liens===== =====Liens=====
Line 263: Line 508:
   * [[http://www.anandtech.com/show/8563/synology-launches-rangeleybased-ds415-dsm-51-beta-goes-live|Review Anandtech]]   * [[http://www.anandtech.com/show/8563/synology-launches-rangeleybased-ds415-dsm-51-beta-goes-live|Review Anandtech]]
   * [[http://www.storagereview.com/synology_ds415_nas_review|Review storagereview.com]]   * [[http://www.storagereview.com/synology_ds415_nas_review|Review storagereview.com]]
 +  * [[https://www.synology.com/fr-fr/knowledgebase/DSM/tutorial/General/Overview_of_LED_indicator_statuses_during_bootup| Interprétation des états des diodes du NAS]] pour diagnostique
 +  * [[https://mariushosting.com/synology-how-to-fix-c2000-flaw-with-100-ohm-resistor/|How To Fix C2000 Flaw With 100 Ohm Resistor]]
 +  * Topics utiles sur HFR :
 +    * [[https://forum.hardware.fr/hfr/reseauxpersosoho/Reseaux/serveurs-synology-page-sujet_5497_1.htm|[Topic R+] Les serveurs NAS Synology]]
 +    * [[https://forum.hardware.fr/hfr/Hardware/Materiels-problemes-divers/reparation-synology-modeles-sujet_1036942_1.htm|Réparation Synology DS415+ et autres modèles sous Atom C2000]]
informatique/hardware/synology_ds415plus.1518279776.txt.gz · Last modified: 2018/02/10 16:22 by pteu