Tout ce qui a été posté par .Shad.
-
[TUTO]Création d'un Certificat "wilcard" Let'sEncrypt avec la méthode "acme.sh"
@Jeff777 @Mic13710 Je ne suis plus actif en effet, pas mal d'activités me retenant par ailleurs, mais je consulte encore de temps en temps ;) et je lis systématiquement si je suis cité. Je suis franchement étonné que ce script fonctionne encore surtout. Je ne pourrais même plus expliquer pourquoi j'avais codé en dur cette valeur de 90 jours, je sais que ça répondait à une problématique à l'époque et que mes maigres connaissances en scripting ne m'avait pas permis de faire mieux. @Jeff777 Je pense que tu pourrais demander à n'importe quelle IA de te pondre quelque chose de 100x mieux en quelques lignes. D'autant que acme.sh donne la possibilité d'écrire sa propre API : https://github.com/acmesh-official/acme.sh/blob/master/deploy/myapi.sh
-
Synology® dévoile DiskStation® DS225+
S'ils font marche arrière, ça ne sera que partie remise. Leur objectif est d'être entièrement intégré dans le monde professionnel. Comprenons bien qu'un NAS qu'on ne change que tous les 10 ans ce n'est pas une source de revenus suffisante pour eux. Le monde professionnel achète des NAS plus chers, prendra les disques compatibles et paiera une maintenance annuelle. Pour ma part, mon Syno tournera probablement jusqu'à sa mort, suite à quoi je partirai vers TrueNAS ou équivalent pour la partie donnée, et rester sur Debian ou évoluer vers Proxmox pour la partie services et infra.
-
Accès NAS : comment remplacer 'synology.me' par un nom de domaine ?
@Charles 69 Salut, c'est tout à fait possible, tu dois créer un certificat pour ton domaine, l'héberger sur le NAS (ou sur un autre périphérique) et utiliser idéalement un proxy inversé. Qu'as-tu fait actuellement d'un point de vue certificat ?
-
laurentia29
Bienvenue parmi nous 🙂
-
[TUTO] [Docker - macvlan] Pi-Hole (V6)
L'intérêt c'est que si tu redémarres ou éteins ton NAS, l'autre Pi-Hole prenne le relais car il sera défini en DNS secondaire. Aucun intérêt à héberger deux instances sur un même hôte. @Mic13710 Je voulais dire dans le cas où il n'utilise que des DNS publiques. Sinon effectivement, il faut que les zones DNS soient équivalentes pour un comportement consistent en cas de résolution locale.
-
[TUTO] [Docker - macvlan] Pi-Hole (V6)
Est-ce que tu parles des DNS du routeur lui-même ? ou des serveurs DNS envoyés par le serveur DHCP du routeur ? Je recommande de NE PAS mettre l'IP de Pi-Hole comme serveur DNS du routeur, uniquement des DNS upstream comme DNS0.eu, DNS4.eu, FDN, Quad9, etc... Si tu parles des DNS distribués par le serveur DHCP, oui tu devrais ajouter d'autres serveurs DNS, ou créer une 2ème instance de Pi-Hole sur une autre machine, et envoyer les deux IP via le serveur DHCP.
-
[TUTO] [Docker - macvlan] Pi-Hole (V6)
Refonte du tutoriel pour la V6, amélioration du fichier compose et mise à jour des impressions d'écran.
-
[TUTO] [Docker - macvlan] Pi-Hole (V6)
Hello, j'ai aussi fait la migration il y a quelques semaines et ça s'est très bien passé. Je vais essayer de trouver le temps de mettre à jour le tutoriel, je devrais retrouver des disponibilités à partir de fin juin...
-
Domotique et Synology
Je te conseille de passer par Home Assistant, sur Synology ou autre. Apparemment ton alarme utilise Tuya, et tu as une intégration Tuya dans Home Assistant. Tu as aussi Jeedom comme logiciel domotique, mais c'est en perte de vitesse.
-
Synology® annonce le DiskStation DS925+ et l'unité d'extension DX525
La force de DSM pour moi ce sont les applications de sauvegarde, réplication, etc... Pour tout le reste on trouve tout aussi bien voire mieux ailleurs. Ce n'est qu'une question de temps avant que les concurrents n'intègrent aussi ces fonctionnalités.
-
Synology® annonce le DiskStation DS925+ et l'unité d'extension DX525
Beaucoup de gens lorgnent sur ce modèle Ugreen : High-Performance NAS | 4-Bay NAS Storage – UGREEN NAS US Le hardware est apparemment solide, et on peut y mettre l'OS qu'on veut : TrueNAS ou Unraid par exemple pour ne citer qu'eux. Synology gère excessivement mal toute cette shitstorm autour de leurs disques.
- [TUTO] Certificat SSL & reverse proxy via Docker
-
[TUTO] Certificat SSL & reverse proxy via Docker
@CyberFr Je vois plusieurs erreurs d'indentation, version corrigée ci-après. Tu es sûr pour tes PUID et PGID ? Pour un Syno c'est au-dessus de 1026 obligatoirement. EXTRA_DOMAINS c'est pour les domaines qui ne sont pas déjà couverts par ta validation de type DNS pour ton domaine racine. Donc si URL=cyberfr.fr, tu n'as pas besoin d'ajouter access.cyberfr.fr services: swag: image: linuxserver/swag container_name: swag cap_add: # en prévision d'une utilisation de fail2ban - NET_ADMIN networks: macvlan_net: ipv4_address: 192.168.1.145 volumes: - /volume1/docker/swag/config:/config environment: - PUID=100 - PGID=101 - TZ=Europe/Paris - URL=ndd.fr - SUBDOMAINS=www,calendar,homepage,etc - VALIDATION=dns - CERTPROVIDER=ovh # par défaut - DNSPLUGIN=ovh - EMAIL=cyberfr@free.fr #facultatif pour OVH - ONLY_SUBDOMAINS=false # optional - EXTRA_DOMAINS=access.cyberfr.fr - STAGING=false # optional restart: unless-stopped networks: macvlan_net: external: true Le tutoriel date, il y a eu quelques ajouts de variables d'environnement, notamment CERTPROVIDER et PROPAGATION : SWAG - LinuxServer.io
-
[Aide] Monter son Nas
@PiwiLAbruti Oui, le Synology ne sert principalement qu'au stockage, la Debian héberge l'essentiel des applications.
-
[Aide] Monter son Nas
@PiwiLAbruti Très probable, mais là il parlait d'un maison DIY, ou je suis à côté de la plaque ?
-
Accès Apps Synology & OpenVPN
Merci de ton retour, je vais corriger.
-
[Aide] Monter son Nas
@narchymaster Tu as besoin de quel espace de stockage ? Sur mon serveur perso j'ai créé 2 groupes de disques : un RAID1 en SSD pour le système un RAID5 en HDD pour les données Le SSD apporte une réactivité non négligeable sur les applications.
-
[Aide] Monter son Nas
Ca fait mal quand même un RAID1 avec deux disques de 24 To 😄 Pourquoi ne pas partir sur un RAID5 avec 4 disques de moindre taille ? surtout que tu as un Node 804, qui peut accueillir un paquet de disques. 🙂
-
[TUTO] [Pas-à-pas] Sécurisation du NAS - pour DSM 7
Pour qui ? Depuis plusieurs années, ce tutoriel rédigé par @Fenrir est LA référence en matière de sécurisation des accès à un NAS. C'est de loin le tutoriel le plus lu du forum, et c'est une bonne chose, car cela signifie que les utilisateurs de NAS Synology se préoccupent de sécuriser leurs données. Néanmoins, bien que le tutoriel soit toujours d'actualité, certaines sections de DSM sont organisées différemment depuis l'arrivée de DSM 7. En outre, certaines informations importantes se trouvent dans les innombrables pages de commentaires, ce qui ne facilite pas la tâche aux nouveaux venus. A l'usage, on remarque également qu'il peut : parfois aller trop vite sur certains points pour des néophytes être a contrario trop succinct pour des utilisateurs souhaitant aller plus loin dans la sécurisation des accès. Il a donc été convenu de rédiger deux versions du tutoriel : cette version, une version plus pas-à-pas, reprenant l'essentiel du tutoriel original, destinée à permettre une rapide mise en service d'un NAS de manière sécurisée. C'est l'objet du tutoriel que vous allez maintenant suivre. une version plus avancée, pour utilisateurs avertis Le tutoriel s'inspire grandement du tutoriel original, merci encore à @Fenrir son rédacteur. Préambule et recommandations Définition Mais commençons par un peu de vocabulaire, un produit labélisé NAS chez Synology est en réalité un serveur, disposant d'un OS, d'un processeur et de mémoire, permettant : La mise à disposition en réseau de données par de nombreux protocoles : HTTP, HTTPS, CIFS, NFS, SSH, etc... L'hébergement de services divers et variés : nativement (Centre de paquets) par conteneurisation (Container Manager) (plus d'info ici) par virtualisation (Virtual Machine Manager) Dans la suite du tutoriel, nous emploierons improprement le terme NAS par commodité. Cahier des charges Ce que ce tutoriel couvre : La configuration des protocoles utilisés pour les accès au NAS La configuration du pare-feu La mise en place d'un certificat TLS La configuration d'un service de notification La protection des accès utilisateurs La configuration des cartes réseau Ce que ce tutoriel ne couvre pas : La configuration de votre box pour un accès distant La mise en place d'un proxy inversé La mise en place d'un serveur VPN Le chiffrement de volume ou de dossier partagé La sauvegarde et la restauration de données (outre la configuration du système) // IMPORTANT \\ En appliquant ce tutoriel, vous coupez votre NAS de tout accès extérieur. Pour accéder à votre NAS à distance, il existe plusieurs méthodes : Utilisation du relais QuickConnect de Synology, point abordé dans la partie Accès externe. Accès par nom de domaine (point abordé dans la partie Accès externe également) + redirection de ports (avec ou sans proxy inversé) Utilisation d'un serveur VPN sur le NAS pour le transfert de fichiers uniquement : FTP, SFTP, WebDAV, etc... Veuillez vous référez aux liens fournis pour la mise en place d'un accès externe sécurisé. Prérequis et méthode Le vocabulaire dédié au monde du réseau est spécifique, il est conseillé de lire le sujet rédigé par @Kramlech, ces notions seront utiles pour la compréhension de la suite du tutoriel. De plus, ce tutoriel renverra vers d'autres tutoriels pour ceux qui souhaitent aller plus loin. Si une catégorie ou un onglet ne sont pas mentionnés, c'est qu'ils ne présentent pas d'intérêt dans le cadre de ce tutoriel. Lorsque des explications supplémentaires mais non nécessaires sont proposées, elles sont cachées dans des balises spoiler : Lisez ce tutoriel en diagonale une première fois pour avoir une vision globale des modifications que vous vous apprêtez à effectuer La plupart des fenêtres que vous ouvrirez dans DSM possède une aide intégrée, celle-ci est généralement bien documentée et traduite, cela vous permettra de connaître plus en détail les fonctionnalités offertes par les divers champs activables : Précautions Sauvegarde de la configuration Que vous veniez d'installer DSM sur votre NAS, ou que vous ayez déjà une instance de DSM en production, il est impératif de réaliser une sauvegarde de la configuration avant de commencer, pour cela, on va dans Démarrer -> Panneau de configuration -> Mise à jour et restauration -> Sauvegarde de configuration -> Exportation manuelle : Cliquez sur Exporter et sauvegarder le fichier sur votre ordinateur. En cas de problème, il sera possible de restaurer la configuration précédemment exportée en cliquant sur Restauration. J'ai tout cassé Si vous n'arrivez plus à avoir accès à votre NAS suite à un réglage effectué au cours du tutoriel, vous pouvez toujours effectuer un reset mode 1 du NAS. Celui-ci est suffisant dans l'extrême majorité des cas, et il a l'avantage de réinitialiser un nombre limité de réglages qui sont susceptibles de provoquer une perte d'accès à DSM. _________________________________________________________________________________________________________________________________________________________________________________________ Sécurité Cette section sera abordée plus en détail par après, mais dans un premier temps il est impératif de sécuriser les accès à votre NAS. Pare-feu - Accès locaux Par défaut, le pare-feu n'est pas activé, et donc tous les accès sont permis. L'idée générale est d'autoriser les accès depuis le réseau local, et de le fermer aux accès distants. Au fil des années, nous avons pu constater que la pratique habituelle de créer des règles pour toutes les interfaces pouvaient avoir des effets de bord indésirables, notamment dans le cadre de l'utilisation d'un serveur VPN, il est donc plus sécurisé de créer le minimum de règles pour chaque interface séparément. Et c'est la méthode que nous allons détailler. Pour configurer le pare-feu, il faut cocher Activer le pare-feu. Il est conseillé de laisser les notifications du pare-feu tout en les refusant quand elles apparaitront à l'installation de paquets, afin d'être informé des ports utilisés par les dits paquets. On va ensuite cliquer dans la liste déroulante contenant les profils de pare-feu, et cliquer sur Gérer le profil du pare-feu. On va cliquer sur Créer pour créer un nouveau profil, et on le nomme par-interface : On sélectionne l'interface qu'on souhaite configurer, ici pour l'exemple LAN 1. On va tout d'abord ajouter quatre règles garantissant un accès local complet à votre NAS : Pour ce faire, on procède ainsi : On clique sur Créer On coche IP spécifique puis on clique sur Sélectionnez On choisit Sous-réseau et on entre 192.168.0.0 dans Adresse IP, et 255.255.0.0 dans Masque de sous-réseau ATTENTION : si vous le souhaitez, vous pouvez restreindre à votre réseau local. Ici on couvre toute la plage locale possible en 192.168. Par exemple, si le réseau de votre box est 192.168.1.x, alors vous pouvez entrer 192.168.1.0/255.255.255.0 On valide : On répète la même opération pour les deux autres règles, 172.16.0.0/255.240.0.0 et 10.0.0.0/255.0.0.0 On ajoute une règle pour les accès locaux en IPv6 : A elles quatre, ces règles permettent à tous les clients utilisant des IP privées d'accéder à tous les services du NAS (attention, ils sont toujours toutefois soumis aux processus d'authentification, ces règles leur permettent uniquement de ne pas faire se refouler à l'entrée). Dernier point, mais le plus important, on choisit Refuser l'accès comme comportement du pare-feu en cas de requête non déclenchée par les règles précédemment ajoutées : _________________________________________________________________________________________________________________________________________________________________________________________ Notifications Celles-ci sont requise pour certaines fonctionnalités comme l'authentification à deux facteurs ou plus simplement pour que vous soyez prévenu dès qu'un problème survient dans le système. On va dans Panneau de configuration -> Notification : Dans Compte Synology, cochez Recevez des notifications directement dans votre compte Synology lorsque l'état du système change ou lorsque des erreurs se produisent En activant l'option, vous serez invité à vous connecter à votre compte Synology. Cela nécessite la création ou l'association à un compte Synology Dans Email, on clique sur Configurer, et on choisit un fournisseur SMTP ou on configure le sien si on en a un Dans Profils de destinataires, on peut choisir des adresses mail différentes suivant la criticité des événements. On clique sur Ajouter. On utilise la règle Warning et on entre l'email de destination, il peut être le même que l'expéditeur Dans Paramètres d'email, on peut personnaliser le préfixe de l'objet du mail On clique sur Envoyer un e-mail de test dans Profils de destinataires pour vérifier que tout fonctionne. Vérifier votre boîte de spam si rien n'arrive _________________________________________________________________________________________________________________________________________________________________________________________ Services de fichiers On va dans Panneau de configuration -> Services de fichiers SMB Général SMB (ou Samba dans sa déclinaison Linux) est le protocole utilisé par Windows lorsqu'on monte un lecteur réseau dans l'explorateur de fichiers. Mais même sous Linux, il est le protocole à privilégier lorsqu'on se connecte à un NAS. Dans Paramètres SMB, cochez Activez le journal des transferts On coche Masquer les dossiers partagés pour les utilisateurs ne disposant pas d'autorisation Dans WS-Discovery, on coche Activer la découverte de réseau Windows pour autoriser l'accès aux fichiers via SMB : On clique sur Paramères avancés et on définit le protocole SMB minimum sur SMB2 et Large MTU, SMB1 a de nombreuses failles de sécurité et n'est plus nativement par défaut activé dans DSM : Autres On coche les 3 options suivantes : Si on souhaite activer SMB3 multicanal, on doit cocher Activer SMB3 multicanal et Activer la lecture asynchrone, le service est ensuite redémarré. AFP, NFS, FTP, rsync et Avancés N'activez que les protocoles et options dont vous avez besoin, autrement laissez les réglages par défaut. _________________________________________________________________________________________________________________________________________________________________________________________ Utilisateur et groupe Utilisateur / Groupe Ce tutoriel n'aborde pas dans le détail la gestion des groupes et utilisateurs, gardez toutefois à l'esprit que : Rationalisez les permissions. Dans le cas d'utilisateurs similaires, créer un groupe reprenant les permissions partagées est plus élégant que de configurer manuellement les droits de chaque utilisateur Limitez les permissions d'un utilisateur ou un groupe au strict nécessaire Compte administrateur alternatif Lors du passage à DSM 7, ou lors d'une nouvelle installation, vous êtes invités à créer un nouveau compte administrateur si votre seul compte administrateur est le compte "admin". Cela permet d'avoir un compte administrateur avec des accès plus robustes (voir Politique de mot de passe), et de désactiver le compte "admin" par défaut, sur lequel vous ne pourrez plus vous connecter. /!\ CETTE ÉTAPE EST OBLIGATOIRE /!\ Configuration du mot de passe On se dirige vers l'onglet Avancé -> Configuration du mot de passe : Espace personnel de l'utilisateur Au bas du menu Avancé on coche Activer le service d'accueil de l'utilisateur, afin que chaque utilisateur dispose de son propre dossier personnel dans homes (homes n'est visible que des membres du groupe administrateurs). ATTENTION : Il est primordial de ne pas toucher aux permissions du dossier homes (visible uniquement par les administrateurs) et aux dossiers home (pour les utilisateurs non administrateurs). _________________________________________________________________________________________________________________________________________________________________________________________ Accès externe QuickConnect Si vous ne souhaitez pas accéder à votre NAS en dehors de votre domicile, désactivez Quickconnect. DDNS Si vous ne souhaitez pas accéder à votre NAS en dehors de votre domicile, vous pouvez ignorer ce passage. Configuration du routeur Ne cliquez pas ici, ça fait partie des options que Synology devrait vraiment retirer de ses boitiers. C'est très dangereux du point de vue sécurité. Ça sert à ouvrir automatiquement des ports dans votre routeur/box, ça peut paraitre sympa comme ça mais en pratique c'est une faille de sécurité très importante. Deux exemples pour essayer de vous convaincre : pour que cette fonction marche, votre routeur doit gérer l'UPnP, donc tous les équipements de votre réseau pourront faire de l'ouverture dynamique de port, le PC qui vient d'être vérolé pourra automatiquement, sans la moindre notification, ouvrir un port permettant à un attaquant d'entrer dans votre réseau de même, si vous avez configuré des redirections de ports pour plusieurs équipements, ces redirections risquent de sauter si une requête UPnP demande le même port Avancé Un onglet que beaucoup oublient de configurer, il n'est pas obligatoire et pas lié (pas directement du moins) à la sécurité mais ça permet d'éviter de chercher des heures la raison pour laquelle un lien de partage (par exemple) ne fonctionne pas : REMARQUE : si vous utilisez le proxy inversé ou le portail des applications de DSM, il n'est pas utilie de configurer ce menu. _________________________________________________________________________________________________________________________________________________________________________________________ Réseau L'onglet Réseau dans le panneau de configuration permet de régler la connectivité de votre appareil et ses interfaces. Interface réseau IPv4 Dans l'onglet Interface réseau, on sélectionne l'interface qu'on souhaite configurer et on clique sur Modifier : Pour obtenir une IP, deux méthodes existent : Le NAS acquiert son IP grâce au serveur DHCP, généralement votre box ou votre routeur. Pour s'assurer que cette IP ne change pas d'une fois à l'autre, il faut faire ce qu'on appelle une réservation statique d'IP dans votre serveur DHCP. Concrètement, cela signifie que pour une adresse MAC donnée (le numéro d'identité de votre carte réseau en quelque sorte), le serveur DHCP attribuera toujours la même adresse IP. On fixe l'IP du NAS directement sur celui-ci, pour cela on choisit Utiliser la configuration manuelle et on choisit une IP. ATTENTION : il faut que l'IP choisie : soit dans la plage IP de votre réseau local soit hors de la plage DHCP d'attribution de votre box/modem. La première méthode a l'avantage qu'en cas de : changement de box de modification de sous-réseau (passer de 192.168.1.0 à 192.168.10.0 par exemple) de déménagement Le NAS restera accessible car il obtiendra une IP dans tous les cas avec un nouveau modem, il ne vous restera plus qu'à le trouver via Synology Assistant. IPv6 A l'heure actuelle, l'IPv6 est bien plus prise en charge par les FAI qu'au temps de la rédaction du tutoriel original, certains mêmes ne proposent plus que de l'IPv6 nativement. Si vous souhaitez l'activer, choisissez Auto : Général Dans l'onglet Général de la catégorie Réseau : Dans Paramètres avancés : Cochez Répondre à la demande ARP si l'adresse IP cible est identique à une adresse locale configurée sur l'interface entrante, cela permet de faire en sorte que les données sortent par leurs interfaces respectives. Cochez Activer la détection des conflits IP, vous aurez des notifications dans DSM si votre NAS rencontre des problèmes de conflit d'IP. Connectivité Cochez Activer HTTP/2 _________________________________________________________________________________________________________________________________________________________________________________________ Sécurité A n'en pas douter la catégorie la plus importante de ce tutoriel ! Le pare-feu a été configuré pour un accès local en tout début de tutoriel. Général Vous pouvez laisser les réglages par défaut Compte Authentification à deux facteurs (2FA) L'authentification à deux facteurs apporte une couche de sécurité supplémentaire, mais elle n'est en aucun cas un remède palliatif à des accès utilisateurs trop faibles. L'authentification à deux facteurs est également plus contraignante en cas de perte du périphérique sur lequel elle est configurée, s'il s'avérait être le seul. Un code de récupération est fourni par DSM pour y retrouver accès, il est impératif de le noter. Si vous souhaitez activer l'authentification à deux facteurs, suivez les étapes suivantes : Adaptive MFA Cochez Activer l'authentification multifacteur adaptative pour les utilisateurs appartenant au groupe administrateurs (pour version de DSM > 7.2) Protection du compte Cochez Activez la protection du compte : Ajuster les valeurs proposées par défaut à votre convenance. Pare-feu - Accès distant Cette section est restreinte au minimum, car le but est ici de sécuriser les accès à votre NAS. A partir du moment où le NAS est accessible depuis l'extérieur, sa surface d'exposition est bien plus importante. Mais vu que nous allons voir comment obtenir un certificat pour votre NAS, il paraît naturel d'évoquer la mise en place d'un accès distant sur celui-ci, pour en savoir plus, c'est par ici : Protection Cochez Activer le blocage auto, ainsi que Activer l'expiration des blocages avec les réglages suivants : Cliquez ensuite sur Autoriser/Bloquer la liste, sélectionnez Créer -> Ajouter une adresse IP, choisissez Sous-réseau et ajouter les deux entrées suivantes : REMARQUE : Si vous avez mis un sous-réseau et masque plus restrictifs que 192.168.0.0/255.255.0.0 dans vos règles de pare-feu, par exemple pour vous conformer au réseau utilisé par votre box, supposons 192.168.1.0/255.255.255.0, vous pouvez dans ce cas spécifier 192.168.1.0/24 dans le menu ci-dessus. Enfin, cochez également Activer la protection DoS. Certificat La mise en place d'un certificat est utile pour : établir un accès distant sécurisé (chiffré) vers votre NAS la mise en place d'un serveur DNS local la mise en place d'un proxy inversé Si les uns et les autres ne vous sont d'aucune utilité, passez à la section suivante. Avancé Dans cet onglet, nous allons régler le niveau de sécurité de chiffrement des services systèmes : La compatibilité moderne correspond à TLS 1.3 qui est maintenant assez répandu, si vous avez des smartphones relativement récents vous ne devriez pas rencontrer de problème. La compatibilité intermédiaire prend en charge TLS 1.3 et 1.2, c'est le choix qui couvrira le plus de périphériques. Depuis la version 7.1 de DSM, il est possible via le menu Paramètres personnalisés de définir séparément le niveau de sécurité utilisé par les applications. _________________________________________________________________________________________________________________________________________________________________________________________ Terminal & SNMP Avancé Je recommande de cocher Activer le service SSH, cela vous donne une porte de secours en cas de problème d'accès à DSM. Si vous deviez rendre accessible le terminal de votre NAS depuis l'extérieur, je recommande très fortement de ne pas faire une simple redirection de port au niveau de votre box mais d'utiliser un serveur VPN, par exemple via le paquet VPN Server. _________________________________________________________________________________________________________________________________________________________________________________________ Portail de connexion DSM Vous pouvez cocher la case Rediriger automatiquement les connexions HTTP vers HTTPS pour le bureau DSM pour vous connecter automatiquement en HTTPS même si l'adresse entrée commence par HTTP. Il est préférable d'avoir mis en place un certificat avant d'activer cette option pour éviter les avertissements de sécurité du navigateur. REMARQUE : Ne pas activer cette option si vous utiliser un proxy inversé pour accéder à vos services DSM. _________________________________________________________________________________________________________________________________________________________________________________________ Options régionales Pour que l'authentification à deux facteurs fonctionne correctement, il est important que vos périphériques soient synchronisés temporellement. Assurez-vous de régler la synchronisation temporelle du NAS sur une source sure, dans Temps puis Paramètres de l'heure, cochez Synchroniser avec un serveur NTP et entrez manuellement l'adresse fr.pool.ntp.org par exemple si vous résidez en France, ou ntp.fdn.org. La liste complète des serveurs NTP peut se trouver à l'adresse suivante : https://www.ntppool.org/zone/@ _________________________________________________________________________________________________________________________________________________________________________________________ Mise à jour et restauration Mise à jour du DSM On clique sur Options de mise à jour, puis on choisit M'avertir et me laisser décider d'installer la nouvelle mise à jour : Synology est coutumière de déploiements erratiques de ses mises à jour, donc suivez ces quelques conseils : Prenez le temps de lire les notes de patch lors de la sortie d'une nouvelle version de l'OS, il se peut qu'elle n'apporte rien dans votre utilisation du NAS N'appliquez de préférence une mise à jour que si elle est proposée automatiquement par le système (évitez les mises à jour manuelles) Sauf correctifs de sécurité importants, ne vous précipitez pas pour appliquer une mise à jour, laissez le temps aux développeurs et aux autre utilisateurs le soin de se casser les dents dessus, il y en a suffisamment sur le forum. 😉 Sauvegarde de configuration Si vous avez lié votre compte Synology à votre NAS, par le biais de la configuration du DDNS ou via la section Compte Synology dans le panneau de configuration, vous avez la possibilité d'enregistrer automatiquement la configuration de votre NAS dans votre espace client Synology. C'est une option intéressante et je recommande de l'activer : IMPORTANT : Avoir une sauvegarde automatique de la configuration dans le cloud ne dispense pas de disposer d'une version locale de celle-ci. En cas de changement notable dans votre configuration, pensez à faire une Exportation manuelle de la configuration, et à la copier sur un ou plusieurs périphériques : PC, clé USB, disque externe, etc... _________________________________________________________________________________________________________________________________________________________________________________________ Privilèges d'application Pas de recommandation spécifique à ce sujet, vous pouvez décider de restreindre les privilèges accordés par défaut à TOUS les utilisateurs dans cette catégorie, ou bien laisser les autorisations et restreindre au niveau de permissions de groupe et d'utilisateur. A titre personnel, je trouve plus simple de régler de façon granulaire les accès des groupes et utilisateurs dans la catégorie Utilisateur et groupe. _________________________________________________________________________________________________________________________________________________________________________________________ MAJ : 07/11/2023
-
[TUTO] Audio multiroom - Mopidy/Iris/Snapcast
1. Préambule Mopidy est un serveur musical open source et modulaire permettant de streamer localement votre musique, ainsi que d'intégrer un nombre conséquent de services de streaming audio tels que Soundcloud, Youtube, Youtube Music, Tidal, etc... (Spotify n'est plus pris en charge actuellement). Il intègre également de nombreux protocoles de communication : mqtt, json rpc, tcp, etc... et le rend donc adapté à un large panel d'utilisations. Iris est une extension web de Mopidy, qui fournit une interface graphique moderne et l'intégration de différentes extensions de Mopidy et autre protocoles. Snapcast, enfin, qui est un logiciel permettant la diffusion de musique par le réseau. C'est une alternative libre et bon marché à des systèmes tels que ceux proposés par Sonos ou Apple. C'est un tutoriel que j'essaie de rédiger depuis un petit temps déjà, mais : je ne voyais pas comment présenter ça de façon simple et compréhensible par tous je n'étais pas satisfait des images Docker existantes l'intégration de Snapcast avec Iris n'était pas heureuse via Docker Depuis, une image Docker facilitant l'interconfiguration des services a été publiée, et me permet aujourd'hui de vous présenter cette pépite. 2. Objectifs Si vous naviguez un peu sur le site de Mopidy, vous verrez qu'un nombre conséquent d'intégrations sont possibles, de fait, je ne vais pas m'étendre sur tout ce qu'on peut réaliser, mais plutôt sur la fonctionnalité diffusion multiroom, qui n'est pas forcément bien documentée que ce soit sur le Github d'Iris ou de Snapcast. Encore moins dans le cadre d'un NAS, qui est pourtant une idée relativement logique dans le cadre d'un serveur de musique centralisé. Ce qui sera abordé dans ce tutoriel : L'installation et la configuration de deux instances de Mopidy (à multiplier suivant le nombre de flux différents que vous souhaitez pouvoir diffuser) La diffusion de bibliothèque musicale locale La configuration des clients Ce qui sera abordé dans un second temps si engouement pour le sujet : L'utilisation d'un proxy inversé avec Iris => quelques bugs que je trouve personnellement gênants mais certains y tiendront sûrement 😉 L'intégration des différents services de streaming online supportés par Mopidy (voir extensions) => chaque extension possède sa propre manière d'être configurée, voir la doc associée ; dans tous les cas cela passe par la modification des fichiers mopidy.conf et l'ajout de fichiers supplémentaires parfois 3. Principe de fonctionnement Configuration du système : Une seule interface pour accéder aux différentes instances, à laquelle on accède depuis PC, mobile, tablette, etc... Des clients Le NAS, qui hébergera les différents services Remarque : Un client statique est un client de type "headless", qui n'accèdera pas à l'interface d'Iris mais recevra uniquement le flux depuis Snapcast. Un client dynamique peut être le smartphone avec lequel vous ajoutez des morceaux en liste de lecture, il peut également devenir un périphérique recevant des informations de Snapcast. 5. Prérequis Difficulté : Moyenne Un NAS compatible Docker Des clients Ports 1780, 6600, 6700, 6680 et 6780 (si deuxième instance) du NAS accessibles aux clients 6. Hypothèses IP du NAS : 192.168.100.100 FQDN (nom d'hôte avec domaine) du NAS : nas.xxxxxx.synology.me => à adapter à votre domaine utilisé en local (voir tutoriel sur la mise en place d'un serveur DNS local) 7. Installation 7-A. Fichier compose L'installation se fera principalement en SSH. Avec la version 7.2 de DSM, il est possible de rédiger le fichier compose via l'interface de Container Manager (nouveau nom du paquet Docker), restent certaines commandes qui ne peuvent être accomplies que par terminal, à vous de voir ce que vous préférez, si vous savez le faire en lignes de commande vous n'aurez aucune difficulté à le faire via Container Manager. Vous pouvez consulter mon tutoriel introductif à Docker pour plus d'informations sur les étapes qui vont suivre. Et maintenant, c'est parti ! On crée le dossier pour Iris dans le dossier partagé docker : mkdir -p /volume1/docker/iris Puis on crée le fichier compose : nano /volume1/docker/iris/docker-compose.yml Remarques : On regroupe tout dans une seule stack, les services n'ayant pas vocation à fonctionner individuellement On se place sur l'hôte directement, pour faciliter la détection en broadcast sur le réseau local // IMPORTANT \\ On ne peut pas directement monter le dossier partagé "music" dans le conteneur, c'est valable pour tout autre dossier partagé a fortiori. Et ce, pour des raisons de permission : en effet les dossiers partagés ne sont pas soumis aux ACL de DSM Donc par exemple, créer un dossier intermédiaire, "bibliothèque" dans mon cas // IMPORTANT \\ On différencie l'emplacement des playlists qu'on va créer de l'emplacement des musiques car : on va chowner le dossier contenant les playlists Mopidy, on évite de faire ça sur un dossier utilisé par d'autre programmes on va monter notre médiathèque en lecture seule pour éviter toute modification accidentelle, ce qui en revanche posera problème pour des playlists qu'on sera amené à modifier J'ai nommé mes instances "iris-instance1" et "iris-instance2", à adapter à votre guise dans la suite du tutoriel. Je crée un dossier "local" commun, qui contiendra les métadonnées des morceaux scannés, ça m'évitera de devoir scanner pour chaque instance. Si pour une raison ou une autre, vous ne souhaitez pas disposer de la même bibliothèque sur l'une et l'autre des instances, créez deux dossiers "local" dans instance1 et instance2. La variable d'environnement PIP_PACKAGES est utile pour installer des extensions Mopidy supplémentaires, commentée par défaut car intégrations non traîtées ici. 7-B. Préparation des dossiers et fichiers 7-B-1. Dossiers de configuration Pas spécialement adapté pour s'installer sur un NAS, OS base Linux avec ses restrictions, on va créer en amont les dossiers dont les services auront besoin lors de la création de la stack. En SSH, connectez-vous avec un utilisateur disposant des droits d'écriture dans le dossier partagé docker : mkdir -p /volume1/docker/iris/instance1/config \ /volume1/docker/iris/instance1/data \ /volume1/docker/iris/instance2/config \ /volume1/docker/iris/instance2/data \ /volume1/docker/iris/snapserver \ /volume1/docker/iris/local \ /volume1/docker/iris/playlists On va maintenant changer la propriété des dossiers pour respectivement : pouvoir télécharger les métadonnées de nos morceaux, albums, artistes, etc... écrire et modifier des playlists Mopidy ajouter des token d'identification pour les services de stream online (non traîté ici) sudo chown 105:users /volume1/docker/iris/instance1/config \ /volume1/docker/iris/instance1/data \ /volume1/docker/iris/instance2/config \ /volume1/docker/iris/instance2/data \ /volume1/docker/iris/local \ /volume1/docker/iris/playlists Remarque : L'utilisateur d'ID 105 est celui qui écrira dans ces dossiers, or il n'est évidemment pas repris par les ACL DSM, donc pour ne pas toucher aux ACL Synology et garantir l'accès aux dossiers en question, on ne chmod pas mais on chown. 7-B-2. Fichiers de configuration On va créer un fichier de configuration qui écrasera les paramètres par défaut du serveur Mopidy, pour l'adapter à notre besoin. 7-B-2-a. Instance1 nano /volume1/docker/iris/instance1/config/mopidy.conf 7-B-2-b. Instance2 nano /volume1/docker/iris/instance2/config/mopidy.conf Remarques : Dans instance1, on pense à modifier nas.xxxxxx.synology.me par son nom de domaine Dans instance2, on a modifié le port de l'instance pour éviter la collision avec la première, on utilise le port 6780 7-B-2-b. Snapserver On va télécharger le fichier de configuration depuis le Github : wget https://raw.githubusercontent.com/badaix/snapcast/master/server/etc/snapserver.conf -P /volume1/docker/iris/snapserver/ qu'on édite ensuite : nano /volume1/docker/iris/snapserver/snapserver.conf en commentant la ligne (on ajoute un # devant) : source = pipe:///tmp/snapfifo?name=default et on ajoute les lignes suivantes directement à la suite : source = pipe:///tmp/stream1_fifo?name=STREAM1&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me source = pipe:///tmp/stream2_fifo?name=STREAM2&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me%20--mopidy-port=6780 Remarque : On pense à modifier nas.xxxxxx.synology.me par son nom de domaine On va également télécharger le script python faisant le lien entre Iris et Snapcast : wget https://raw.githubusercontent.com/badaix/snapcast/master/server/etc/plug-ins/meta_mopidy.py -P /volume1/docker/iris/snapserver/ 7-B-3. Dossiers de stream On crée un dossier qui accueillera nos fifo de stream Snapcast, et je les rends accessible par tous en écriture : mkdir -p /tmp/snapserver && sudo chmod 777 /tmp/snapserver 7-C. Création de la stack On est prêt, plus qu'à lancer la stack : sudo docker-compose -f /volume1/docker/iris/docker-compose.yml up -d && sudo docker-compose -f /volume1/docker/iris/docker-compose.yml logs -f Les logs devraient donner quelque chose de la sorte : 8. Interface IRIS 8-A. Configuration générale et Instance1 On se rend maintenant à l'adresse http://nas.xxxxxx.synology.me:6680: On se dirige ensuite vers les Settings, catégorie Server, et on renomme l'instance : On va ensuite dans Services configurer Snapcast, on modifie localhost pour le nom d'hôte de notre NAS, et on coche Enabled : On peut également se connecter à LastFM pour récupérer les vignettes des artistes, et à Genius pour que les paroles des chansons défilent pendant la lecture. // IMPORTANT \\ La librairie utilisée pour Mopidy n'est plus supportée par Spotify, évitez donc de vous y connecter. Dans Interface, j'aime bien généralement cocher "Wide scrollbars". 8-B. Instance2 On va maintenant rajouter notre seconde instance, vers laquelle on pourra facilement switcher d'un clic, on retourne dans Server, on clique sur "+ Add New Server" : Si tout s'est correctement exécuté auparavant, vous devriez obtenir le statut Connected, vous remarquerez également que les réglages des autres catégories persistent. 8-C. Exportation et sauvegarde de la configuration sur le serveur Afin d'éviter de répéter la majorité de ces étapes pour les prochains clients dynamiques, on peut aller dans la catégorie Advanced -> Share configuration => Export/share : Vous pourrez dorénavant importer la configuration depuis le serveur (il faut prélablement se connecter à une des instances depuis un nouveau périphérique) en cliquant sur Import from server. Cela ne fonctionne que pour les paramètres généraux, la deuxième instance devra être ajoutée comme initialement. 8-D. Indexation des morceaux On va maintenant lancer l'indexation des morceaux, on peut le faire par l'interface, suivant le CPU ça peut prendre plus ou moins de temps, comptez environ 1m30 par 1000 morceaux. Pour cela, deux méthodes : via le terminal : sudo docker exec -it iris-instance1 mopidy local scan Ou si je veux faire un test avec un nombre réduit de morceaux : sudo docker exec -it iris-instance1 mopidy local scan --limit 100 via l'interface, dans Advanced, on clique sur Start local scan (full scan par contre) : Une fois le scan terminé, je peux aller dans l'onglet Albums, et cliquer sur Refresh tout en haut à droite de la fenêtre : On va faire clic droit sur un album -> Add to queue, les morceaux sont maintenant dans l'onglet Now playing, en attente d'un ordre de lecture. 8-E. Lecture synchronisée Voilà, il ne reste plus qu'à tester, oui mais où ? et bien sur notre périphérique ! on retourne dans Settings -> Services -> Snapcast -> on coche Streaming enabled : Je peux renommer mon groupe, rez-de-chaussée (RDC) par exemple, et lui dire qu'il diffusera le flux Snapcast STREAM1, émis par Instance1. Dans ce groupe, j'ai renommé mon périphérique appelé par défaut "Snapweb client" en PC, plus parlant. Je vais maintenant ajouter un deuxième périphérique, par exemple mon smartphone, je vais donc importer les données de configuration précédemment enregistrées sur le serveur. En cliquant sur Streaming enabled, un nouveau groupe apparaît (j'ai renommé mon périphérique du nom de mon smartphone) : Allons maintenant dans Now playing, et lançons la musique depuis la barre de lecture en bas de page. Si tout se passe bien, vous devriez entendre la musique jouée conjointement, et en parfaite synchronisation, depuis les deux clients ! Pourquoi ne pas, par exemple, les mettre dans le même groupe ? On clique sur Group dans la tuile correspondant au 2ème périphérique (voir impression d'écran ci-dessus), et on choisit RDC. Maintenant, on peut contrôler le volume général du groupe depuis Volume (barre horizontale) et le volume individuel de chaque périphérique sinon (barre verticale). Si je ne veux plus qu'ils soient groupés, je reclique sur Group, puis New Group. Je peux également changer le flux lu par un groupe depuis Stream. Pas tout à fait synchronisés ? la barre de Latency est là pour ça, on peut ajuster le décalage en avance ou retard de phase des périphériques indépendamment. C'est notamment une fonction utile pour les périphériques clients qui diffusent via Bluetooth. 8-F. Playlists 8-F-1. Playlist locale Pour créer une playlist, je clic droit sur un morceau, Add to playlist -> je crée une nouvelle playlist ou j'en choisis une existante. Il faudra ensuite aller dans l'onglet Playlists et cliquer sur Refresh comme pour les albums pour les voir apparaître. 8-F-1. Radios Je vais vider ma liste d'attente, pour cela je clique sur Clear : Dans cette page, je clique ensuite sur Add en haut à droite, je vais ajouter l'URL d'une radio, par exemple M Disney : Je dois cliquer sur + Add à droite avant de cliquer Add en bas, la radio apparaît ensuite dans la liste des morceaux en attente, et je peux cliquer droit (ou ...) pour lancer la lecture ou pour l'ajouter à une playlist. 9. Configuration des clients statiques Nous allons maintenant voir comment configurer des clients statiques, par exemple sous Linux. sudo apt-get install snapclient Puis : sudo nano /etc/default/snapclient # Start the client, used only by the init.d script START_SNAPCLIENT=true # Additional command line options that will be passed to snapclient # note that user/group should be configured in the init.d script or the systemd unit file # For a list of available options, invoke "snapclient --help" SNAPCLIENT_OPTS="--host nas.xxxxxx.synology.me" Je lance le service : sudo systemctl start snapclient.service Je fais en sorte qu'il se lance au démarrage : sudo systemctl enable snapclient.service Entre temps, vous devriez voir un nouveau périphérique parmi les clients Snapcast dans votre interface Iris. 10. Quelques commandes utiles Pour supprimer la base de métadonnées : sudo docker exec -it <nom du conteur iris> mopidy local clear Pour vérifier la configuration utilisée par une instance (celle-ci affichera tous les champs, ceux par défaut et ceux que vous avez écrasés dans votre fichier de configuration) : sudo docker exec -it <nom du conteur iris> mopidy config 11. Conclusion Je ne couvre dans ce tutoriel qu'une petite partie des fonctionnalités disponibles, on peut trier les recherches suivant les sources, ce qui prend son importance si l'on commence à intégrer différents services de streaming. Il existe une extension MopiQTT(non officielle) qui prend en charge MQTT, ou encore la possibilité de créer des webhooks via Commands => Add : Ainsi qu'un module HomeAssistant : https://github.com/bushvin/hass-integrations Pour ceux qui sont un peu initiés, les possibilités domotiques sont énormes. MàJ : 06/06/2023
-
[TUTO] [Zone publique sur DNS Server] Renouvellement automatisé de certificat wildcard
Pré-requis Ce tutoriel s'adresse à ceux qui ont déjà parcouru le tutoriel de @Fenrir sur la mise en place d'un serveur DNS, et qui sont allés jusqu'à héberger la zone publique de leur domaine. On part donc dans l'hypothèse que : vous hébergez votre zone DNS, qu'elle est SOA (Start of Authority). Le NAS hébergeant la zone est un serveur de nom (nameserver ou NS) pour cette zone et ce nom de domaine. vous avez éventuellement (c'est fortement recommandé mais non obligatoire) d'autres serveurs de noms, auto-hébergés (autre(s) NAS), votre registrar (OVH, etc...) ou des hébergeurs DNS (Cloudflare, GoDaddy, etc...). vous êtes relativement à l'aise avec le vocabulaire relatif au DNS. vous avez installé acme.sh sur votre NAS. Préambule L'origine de ce tutoriel vient de la volonté de @Jeff777 de trouver un moyen de mettre en place un renouvellement automatique de son certificat pour son domaine. Merci à lui pour le nombre incalculable de tests qu'il a effectués et pour les feedback complets qu'il m'a procurés. Dans la foulée, on s'est dit que ça pourrait intéresser d'autres personnes, d'où ce tutoriel. 😉 Même si on a bien conscience que le nombre de personnes concernées est très marginal. Actuellement, pour un nom de domaine Synology, DSM inclut la possibilité de renouveler automatiquement un certificat wildcard depuis l'interface dédiée dans l'onglet Sécurité. Pour tout autre nom de domaine, on est tributaire de logiciels tiers comme par exemple acme.sh, un script gérant l'obtention et le renouvellement automatique des certificats. Lorsqu'on héberge sa zone DNS chez un registrar ou un hébergeur DNS connu, on a des grandes chances qu'acme.sh dispose d'un plugin permettant de communiquer avec l'API de l'hébergeur en question. Sous réserve de bien configurer les paramètres du script, tout sera automatisé. Ce n'est évidemment pas le cas lorsqu'on héberge soi-même sa zone. Plusieurs solutions existent : https://github.com/acmesh-official/acme.sh/wiki/DNS-alias-mode : J'héberge sur mon NAS la zone publique maître de mon domaine, mais je dispose d'un autre nom de domaine hébergé chez un prestataire mettant à disposition une API par laquelle acme.sh peut communiquer (par exemple OVH). Je redirige donc les enregistrements _acme.challenge nécessaires pour la validation de notre premier domaine vers le second. Je me sers donc du 2ème nom de domaine pour valider le premier. Facile et malin, à prioriser quand applicable. https://github.com/acmesh-official/acme.sh/wiki/DNS-API-Dev-Guide : développer sa propre API en créant son propre plugin de communication. Clairement pas à la portée de tout le monde, mais sûrement la meilleure méthode qui soit. Développer un script permettant d'extraire les enregistrements TXT _acme.challenge et les ajouter à sa zone pour la validation. C'est cette dernière solution que nous nous sommes attachés à développer. Hypothèses Vous avez déjà installé acme.sh sur votre NAS via ligne de commande, vous pouvez trouver une procédure détaillée dans le tutoriel de @oracle7, à suivre jusqu'au point 2) inclus. J'attire l'attention sur les arguments utilisés lors de l'installation d'acme.sh --home : il permet de définir où est installé le script acme.sh et les fichiers qui l'accompagnent. --cert-home : c'est le dossier dans lequel les certificats sont sauvegardés lorsqu'ils sont générés. Paramétrage du script Maintenant qu'acme.sh est installé, vous pouvez téléchargez le script et le placer où vous le souhaitez dans votre NAS : dsm_public-dns-zone_renewal_automation_15-02-22.sh Il va falloir maintenant le configurer, je l'édite ici directement dans File Station avec le paquet Éditeur de texte dans le centre de paquets Synology. Vous pouvez évidemment l'éditer en SSH avec votre éditeur de texte préféré. Il va falloir attribuer une valeur à certaines variables pour que le script s'exécute sans encombre. Ces variables se trouvent dans la fonction init(), dans la sous-partie titrée VARIABLES TO SET. Par commodité, je reprends certains noms de variables utilisés dans le tutoriel de @oracle7. CERT_DOMAIN : c'est le nom de domaine racine ("root") pour lequel vous souhaitez obtenir un certificat CERT_WDOMAIN : le domaine wildcard ZONE_NAME : le nom de la zone telle qu'elle apparaît dans cet écran : ou via SSH dans le dossier /var/packages/DNSServer/target/named/etc/zone/master/ : RENEWAL_CYCLE : c'est le cycle de renouvellement du certificat tel que : 60 ≤ RENEWAL_CYCLE < 90 (en jours). acme.sh ne renouvellera pas "naturellement" un script dont l'âge est inférieur à 60 jours, l'expiration intervenant au 90ème jour. On peut pour autant, si on le souhaite, forcer le renouvellement en ajoutant le paramètre --force à l'issue et au renew du certificat : acme.sh --force --issue [...] acme.sh --force --renew [...] ACME_DIR : c'est le dossier dans lequel vous avez installé acme.sh en amont de ce tutoriel via --home. CERT_HOME : c'est le dossier que vous avez défini comme répertoire de sauvegarde des certificats via --cert-home lors de l'installation d'acme. REMARQUE : Pour les besoins du script, il est nécessaire de renseigner cette dernière variable, même si c'est le même dossier que celui défini via --home. Ne pas ajouter de / à la fin des chemins renseignés dans ACME_DIR et CERT_HOME. Si l'on souhaite déployer automatiquement le certificat sur le NAS, on va devoir également paramétrer la fonction certificate_deployment_1 un peu plus bas dans le script : Il faut compléter les différentes variables SYNO_, par exemple : SYNO_Scheme='http' SYNO_Hostname='ns.ndd.tld' SYNO_Port='5000' SYNO_Username='admin' SYNO_Password='password' SYNO_Certificate="un_nom_de_certificat" SYNO_DID="" Notes : ns.ndd.tld étant l'objet d'un enregistrement A ou CNAME pointant vers l'IP de mon NAS, qu'elle soit locale ou publique (dans ce dernier cas, ce sera l'IP de la box internet, par exemple dans le cas d'un NAS hors-site). 5000 étant le port HTTP par défaut de DSM (on a choisi HTTP comme protocole en première ligne), à adapter au besoin (en cas de NAS distant, le port DSM (ou 443 si proxy inverse) doit être redirigé vers le NAS). Si vous disposez déjà d'un certificat wildcard pour ce domaine, alors il faut que la variable SYNO_Certificate soit identique au nom du certificat existant (voir cadre rouge ci-dessous). Cela permettra que tous les services qui y sont actuellement associés soient redémarrés lors du déploiement du certificat dans DSM. Si on veut déployer le certificat sur un autre NAS, on s'aperçoit que le script contient une fonction certificate_deployment_2. Il suffit alors de décommenter cette fonction (enlever tous les # devant chaque ligne, de certificate_deployment 2() { à }) et de décommenter les 2 lignes reprises dans le script : On peut ainsi ajouter autant de NAS que l'on souhaite, il suffit de définir autant de nouvelles fonctions certificate_deployment que nécessaire, et d'ajouter juste avant la ligne echo -e "\n### STEP 6 ###" pour chaque NAS un couple de lignes certificate_deployment_N et saved_syno_values_removing. Typiquement, dans le cadre d'un NAS distant, vous utilisez peut-être un proxy inverse pour limiter le nombre de ports exposés, vous pouvez passer par celui-ci pour déployer le certificat, en modifiant les variables suivantes, par exemple : SYNO_Scheme='https' SYNO_Hostname='dsm.ndd.tld' SYNO_Port='443' dsm.ndd.tld étant le nom de domaine pointant vers l'interface DSM sur le NAS. SYNO_DID est à compléter si on utilise la double authentification pour se connecter à DSM, voir le point 5.1) du tutoriel de @oracle7 Il n'y a aucune obligation de procéder au déploiement du certificat, vous pourriez très bien vouloir l'utiliser sur un autre périphérique. Il suffit dans ce cas-là de commenter les lignes certificate_deployment_1 et saved_syno_values_removing qui suit immédiatement (voir impression d'écran ci-avant). Les certificats pourront être récupérés dans le dossier défini dans ${CERT_HOME}/ndd.tld Remarques Dans le cas où vous n'avez pas déjà de certificat pour ce nom de domaine importé sur le NAS, il y aura une étape supplémentaire à réaliser manuellement après la première exécution du script. En effet, les services et applications de votre NAS sont par défaut associés au certificat Synology.com créé à l'installation de DSM, ou à tout autre certificat créé par après. Lorsque le script va s'exécuter et que vous le déployez sur votre NAS, vous verrez apparaître le nouveau certificat dans l'onglet qui les liste. Il sera configuré par défaut, mais les services seront toujours configurés pour le certificat antérieur, exemple (nom de domaine Synology antérieur au nom de domaine OVH) : Il faut donc cliquer sur Configurer, et attribuer les services souhaités au nouveau certificat. Lors du prochain renouvellement, les services associés seront redémarrés et exploiteront le nouveau certificat. C'est donc une opération à ne réaliser qu'une seule fois, dans l'hypothèse où vous n'avez pas encore de certificat pour ce nom de domaine. @bruno78 a développé un script en python3 permettant de transférer les services d'un certificat à l'autre, au besoin consulter le tutoriel de @oracle7 dont le lien a été donné plus avant. Dans le cas où un certificat pour le nom de domaine existerait déjà sur votre NAS, le script redémarrera naturellement les services qui y sont déjà associés, il faut toutefois veiller à avoir le même nom de certificat (déjà expliqué en amont). Lors de l'exécution du script, le fichier de zone original est dupliqué dans le dossier ${CERT_HOME}/ndd.tld/backup_... et un log d'acme.sh est disponible dans ${CERT_HOME}/ndd.tld En cas d'interruption inopinée du script, le fichier de zone original reste accessible. Si le script s'exécute jusqu'au bout, le duplicata de la zone originale et le log sont effacés. En outre, si le script ne s'exécute pas entièrement, vous devrez peut-être amené à supprimer Planification du renouvellement Le script intègre une fonction de vérification de validité du certificat, tant que le certificat n'est pas âgé de plus de RENEWAL_CYCLE jours, le renouvellement sera bloqué en amont. Dès lors, vous pouvez très bien créer une tâche régulière qui vérifiera fréquemment, par exemple toutes les semaines ou tous les quelques jours, si le certificat a besoin d'être renouvelé. On va donc dans Panneau de configuration -> Planificateur de tâches -> Créer -> Tâche planifiée -> Script défini par l'utilisateur : On définit donc une tâche exécutant le script où qu'il se trouve, ici pour l'exemple dans /volume1/scripts/ et on génère un log complet du script dans le fichier /volume1/Certs/log_acme_$(date +"%d-%m-%y").log, ce qui donnera au moment où j'écris log_acme_30-09-20.log On peut demander au planificateur de tâches d'envoyer par mail le résultat du script, pour peu qu'on ait configuré le service de notification de DSM. MàJ : 15/02/22
-
[TUTO] Certificat SSL & reverse proxy via Docker
1. Qu'est-ce qu'un proxy inversé ? Un proxy inversé (reverse proxy) est un type de serveur, habituellement placé en frontal de serveurs web. Contrairement au serveur proxy qui permet à un utilisateur d'accéder à un environnement depuis un point unique, le proxy inversé permet à un utilisateur d'accéder depuis un environnement à des serveurs internes via un point d'entrée unique. Un proxy inversé écoute sur un port donné, sécurisé ou pas, toutes les requêtes à destination de ces services. Au lieu donc d'avoir de multiples portes (les ports des applications auxquelles ont souhaite accéder depuis l'extérieur), on en a une seule qui s'occupera de rediriger les requêtes vers le bon service. 2. Prérequis - Comprendre le fonctionnement de Docker (voir tutoriel introductif) - Savoir se connecter en SSH à son hôte - Savoir rediriger un port depuis sa box - Être un peu curieux Difficulté : Moyenne 3. Pourquoi ? Des solutions de proxy inversé, il en existe des tas, toutes ont leurs avantages et inconvénients. DSM utilise Nginx, mais il existe aussi entre autres HAProxy, Apache, Squid, etc... Dans notre cas ce sera également Nginx, mais via l'image Docker linuxserver/swag, car elle embarque tout un ensemble de fonctionnalités supplémentaires qui agissent en synergie. Cette solution comprend notamment : Certbot : utilitaire permettant l'obtention et le renouvellement automatique de certificats Let's Encrypt. Fail2ban : Script permettant le bannissement d'IP ayant réalisé un nombre donné de tentatives de log infructueuses. Authelia (fichiers de configuration seulement) : Logiciel d'authentification deux facteurs hautement personnalisable et applicable à n'importe quelle application. Nginx : Serveur web qu'on utilise ici pour faire office de proxy inversé. L'intérêt majeur est de pouvoir appliquer des fonctionnalités existantes dans DSM mais réservées à celui-ci, à n'importe quelle application. Et de disposer d'un serveur Nginx entièrement paramétrable a contrario de celui intégré à DSM. ATTENTION : Cette image ne permet pas de déployer automatiquement le certificat obtenu dans DSM à la manière dont le fait acme.sh (voir tutoriel de @Einsteinium pour une utilisation via Docker ou le tutoriel de @oracle7 pour les NAS incompatibles). Vous devrez l'installer manuellement dans DSM si vous souhaitez l'utiliser et le faire tous les 3 mois. Pour ma part je ne m'embête pas, j'utilise l'interface DSM pour obtenir un certificat wildcard avec le nom de domaine Synology qui se renouvelle tout seul tous les 2 mois. Ainsi, j'utilise le nom de domaine Synology pour les services comme Hyper Backup, Drive, etc... tout ce qui est intrinsèquement lié à DSM et qui n'est pas gérable au travers d'un proxy inversé. Tout le reste passe par le certificat OVH que ce conteneur va générer. 4. Hypothèses Pour mieux illustrer le propos, je conviendrai d'un certain nombre d'adresses qui faciliteront l'identification des consignes à l'application du tutoriel : Adressage réseau "physique" : 192.168.1.0/255.255.255.0 (/24 en notation CIDR) Le serveur DHCP ne couvre qu'une partie de la plage 192.168.1.0/24, par exemple 192.168.1.1 à 192.168.1.99 Passerelle (routeur ou modem) : 192.168.1.254 IP (physique, pour utilisation avec réseau macvlan) du conteneur swag : 192.168.1.145 (voir plus loin). IP de l'hôte (le NAS ici, mais ça pourrait être une autre périphérique) : 192.168.1.100 (Je pars du principe que votre hôte a une IP définie en dehors de la plage d'attribution du serveur DHCP, ce n'est pas obligatoire (mais conseillé)). IP virtuelle de l'hôte (voir plus loin) : 192.168.1.200 eth0 est le nom de mon interface physique. 5. Principe L'idée générale de ce que l'on s'apprête à mettre en place peut être résumée de la sorte : Le port 443/tcp (par défaut) est le port d'écoute du proxy inversé. Le port 80 est le port utilisé par Let's Encrypt pour renouveler les certificats si on choisit la méthode de validation HTTP-01 et/ou pour faire une redirection HTTP -> HTTPS. Deux cas de figure se présentent, soit les ports sont libres sur l'hôte, soit ils ne le sont pas : S'ils sont libres, ce qui est le cas si vous décidez d'utiliser SWAG sur une autre machine que le NAS (un Raspberry Pi fait tout à fait le job), alors on peut créer notre conteneur sur un réseau bridge. Dans ce cas-là, la lecture du tutoriel introductif devrait suffire pour la mise en place de swag. S'ils ne le sont pas, ce qui est très probablement le cas sur votre NAS (Webstation installé, Nginx en sous-main) on le rattachera à un réseau macvlan. Un réseau macvlan permet de donner une adresse IP au conteneur sur le réseau physique, par exemple ici 192.168.1.150 Il s'émancipe d'une certaine manière de l'hôte et se comporte globalement comme un périphérique à part entière relié à votre routeur. Il pourra donc utiliser tous les ports dont il a besoin. Au prix d'une impossibilité de communication avec l'IP de l'hôte (limitation intrinsèque au pilote macvlan). Mais il existe une manière de contourner le problème de communication via une interface virtuelle du NAS, vous trouverez plus de détail dans le tutoriel introductif. C'est la méthode que j'ai décidé de privilégier ici, car plus difficile d'accès que via le réseau bridge, et qu'elle permet de ne pas toucher à la configuration du NAS. Je reprendrai principalement ce qu'on peut trouver dans mon tutoriel sur Docker, en l'appliquant à notre cas d'utilisation. En parallèle; n'hésitez pas à parcourir ce magnifique guide, dont ce tutoriel est un bon complément, sur la mise en route de ce conteneur. Vous y trouverez notamment beaucoup plus d'informations sur la partie hébergement de sites, la configuration d'Nginx ; des thèmes que je n'aborderai pas dans le présent tutoriel. 6. Création du réseau macvlan Note : Si vous avez déjà créé un réseau macvlan, rendez-vous au paragraphe 7. Si en plus vous avez déjà créé une interface virtuelle pour la communication NAS <-> conteneur(s) en macvlan, rendez-vous au paragraphe 8. Pour créer le réseau macvlan, il faut définir une portion libre de l'adressage du réseau physique de notre LAN dans laquelle nous pourrons adresser notre (et éventuellement nos futurs) conteneurs. Cet outil est très pratique pour calculer des plages IP, je vois par exemple que si je choisis 192.168.1.144/28, je dispose d'un pool d'IP allant de 192.168.1.145 à 158, ce qui est je pense amplement suffisant, on peut passer le masque à /29 à la place de /28 pour réduire cette plage à 150 au lieu de 158. On peut également décider que ce sera notre seul conteneur en macvlan, pour réduire l'espace à une seule IP il suffit d'utiliser le masque /32. Ici pour couvrir le cas d'utilisation le plus général, on choisira le masque /29. Afin de garder une trace de la configuration du réseau, je vous conseille de créer un fichier macvlan_net.sh. On se rend dans le dossier de notre choix, par exemple chez moi j'ai un dossier networks dans mon dossier partagé docker : cd /volume1/docker/networks touch macvlan_net.sh nano macvlan_net.sh La commande nano est disponible sur vos NAS via les excellents paquets SynoCLI de Synocommunity, en l'occurence SynoCLI Files ici. On entre le script suivant : docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --ip-range=192.168.1.144/29 \ --gateway=192.168.1.254 \ -o parent=eth0 \ macvlan_net On le rend exécutable et l'exécute : chmod u+x macvlan_net.sh ./macvlan_net.sh Une série de caractères s'affiche si tout s'est correctement déroulé. Notes : Pensez à utiliser sudo devant les commandes docker (valable pour toute la suite du tutoriel) si vous n'êtes pas connecté avec l'utilisateur root. ip-range correspond à la plage qu'on a choisie ci-avant. Sur le NAS, si on a activé open vswitch (automatique si par exemple on utilise Virtual Machine Manager), l'interface parente n'est plus eth0 (ou eth1, eth2, ..., ethX) mais ovs_eth0 (respectivement ovs_eth1, etc...). Pour connaître le nom de l'interface physique de sa machine (il varie suivant les machines), en SSH on peut taper : ifconfig | grep -C 3 192.168.1.100 ou ip addr | grep -C 3 192.168.1.100 Il suffit alors de repérer l'interface ayant pour adresse IP l'adresse physique du NAS (ici 192.168.1.100). On peut maintenant vérifier que le réseau existe bien en tapant : docker network ls 7. Création de l'interface virtuelle 7-A. Création du script Comme dit en introduction, il y a un inconvénient majeur à utiliser le réseau macvlan car il n'est plus possible de communiquer entre l'IP de l'hôte, 192.168.1.100 et le conteneur swag dont l'IP sera sur le réseau macvlan. Pour pallier ce défaut, on va créer une interface virtuelle, un autre chemin par lequel le NAS pourra communiquer avec le(s) conteneur(s) sur le réseau macvlan. Cette interface disparaîtra à chaque redémarrage du NAS, on créera donc une tâche planifiée pour la monter automatiquement. __________________ ATTENTION (merci @EVOTk) : L'interface disparaît également lorsque vous : arrêtez désinstallez mettez à jour le paquet Docker. Il faudra donc exécuter ce script manuellement depuis l'interface DSM si cela se produit. __________________ Toute cette procédure est explicitée dans le tutoriel introductif, mais on la reprendra pas à pas ici en personnalisant les commandes à notre besoin. On peut se placer dans un dossier interfaces dans le dossier partagé docker : cd /volume1/docker/interfaces touch mac0.sh nano mac0.sh Puis de manière similaire à ce qu'on a fait pour le script du réseau macvlan, on crée un script pour la création de l'interface : #!/bin/sh # Script permettant la communication entre # un conteneur appartenant a un reseau macvlan et son hote # A lancer au demarrage de l'hote # Temporisation #sleep 60 # Creation de l interface macvlan sur l hote ip link add mac0 link eth0 type macvlan mode bridge # Configuration de l interface avec l adresse reservee ip addr add 192.168.1.200/32 dev mac0 ip link set dev mac0 address AA:BB:CC:DD:11:45 ip link set mac0 up # On fait une route entre les IPv4 du reseau mac0 et l'interface ip route add 192.168.1.144/29 dev mac0 Notes : L'adresse 192.168.1.200/32 correspond à l'IP virtuelle du NAS, le NAS sera accessible et visible également avec cette nouvelle adresse comme avec son IP réelle 192.168.1.100. Mais a contrario de cette dernière, le conteneur peut tout à fait communiquer avec. Vous noterez la présence d'une temporisation commentée de 60 secondes. Si vous rencontrez des problèmes de création de l'interface au démarrage du NAS, n'hésitez pas à décommentez, le script sera décalé d'une minute (ce qui peut permettre d'initialiser la connexion réseau, etc...). On rend le script exécutable et on l'exécute : chmod u+x mac0.sh ./mac0.sh On vérifie maintenant que l'interface est bien active : ifconfig | grep -A 5 mac0 7-A. Création de la tâche On va maintenant créer une tâche planifiée dans DSM pour exécuter ce script à chaque redémarrage du NAS. Direction Panneau de configuration -> Tâches planifiées -> Créer -> Tâche déclenchée -> Script défini par l'utilisateur On est maintenant prêt à passer à la création du conteneur. 8. Création du conteneur 8-A. Fichier docker-compose Il ne reste plus qu'à créer le conteneur, on passera par un fichier docker-compose. La documentation très complète de Linuxserver est disponible à l'adresse : https://github.com/linuxserver/docker-swag Hypothèses : Utilisation d'un nom de domaine OVH Délivrance du certificat par DNS-01 La méthode DNS-01 implique que votre certificat sera validé au niveau de votre hébergeur de zone DNS (OVH par défaut) et non votre NAS comme avec la méthode HTTP-01. DNS-01 est obligatoire en cas de demande d'un certificat wildcard. Si vous souhaitez utiliser la méthode HTTP-01, il faudra prévoir une redirection (NAT) du port 80 de votre box vers l'IP du conteneur. Plus d'information à cette adresse : https://github.com/linuxserver/docker-swag Dans le cadre de nos hypothèses, voici l'architecture du fichier docker-compose : version: '2.1' services: swag: image: linuxserver/swag container_name: swag networks: macvlan_net: ipv4_address: 192.168.1.145 cap_add: - NET_ADMIN environment: - PUID=1026 - PGID=100 - TZ=Europe/Paris - URL=ndd.ovh - SUBDOMAINS=wildcard - VALIDATION=dns - DNSPLUGIN=ovh - DHLEVEL=2048 - EMAIL=mail@ndd.tld - ONLY_SUBDOMAINS=false - STAGING=false volumes: - ./config:/config restart: unless-stopped networks: macvlan_net: external: true Notes : Vous remarquerez que je ne translate aucun port entre le NAS et le conteneur, pourquoi ? N'oubliez pas que ce conteneur sera une machine à part entière sur le réseau physique, dès lors elle n'a pas "d'hôte" à proprement parler. J'aurai simplement mon routeur ou mon modem qui redirigera son port public 443 vers le port 443 de l'adresse IP physique du conteneur (192.168.1.145), comme il le ferait vers n'importe quelle autre machine En amont, une translation de ports depuis le modem/routeur doit être faite pour les ports : TCP 443 pour que le proxy inversé reçoive les requêtes. TCP 80 si vous validez par HTTP-01 OU si vous souhaitez avoir une redirection HTTP -> HTTPS pour vos entrées de proxy inversé (si vous tapez exemple.ndd.tld dans votre navigateur, vous serez rediriger vers https://exemple.ndd.tld). Le PUID proposé correspond à mon utilisateur admin personnalisé, et le PGID de 100 correspond au groupe users par défaut. Vous pouvez définir un utilisateur et un groupe spécifiques qui ne possèderont des droits que sur les dossiers du conteneur. Le paramètre cap_add est utile seulement si vous souhaitez utiliser fail2ban (conseillé), car le conteneur devra modifier ses iptables (pas celles de l'hôte). Notes (2) : Si vous avez utilisé la méthode réseau bridge, il faut penser dans ce cas à faire une redirection des ports sur l'hôte, ça se traduit par l'ajout du bloc "ports" suivant (par exemple entre les blocs "environment" et "volumes") : ports: - 443:443/tcp # Ecoute proxy inverse - 80:80/tcp # Redirection HTTP vers HTTPS 8-B. API OVH Je ne m'attarderai pas sur cette partie, tout est parfaitement décrit dans le tutoriel de @oracle7 sur la génération d'un certificat wildcard par acme.sh J'ajouterai simplement une nuance sur les accès API à donner, ceux-ci me semblent plus restrictifs et préférables : GET /domain/zone/ GET: /domain/zone/ndd.ovh/ GET /domain/zone/ndd.ovh/status GET /domain/zone/ndd.ovh/record GET /domain/zone/ndd.ovh/record/* POST /domain/zone/ndd.ovh/record POST /domain/zone/ndd.ovh/refresh DELETE /domain/zone/ndd.ovh/record/* Également, on peut limiter l'utilisation de l'API à une ou des IP prédéfinies, particulièrement pratique si on dispose d'une IP fixe. En bout de chaîne vous obtiendrez 3 clés permettant un accès à l'API OVH : l'application key, l'application secret et la consumer key. 8-C. Création du fichier ovh.ini Avant la création du conteneur, on va créer en amont le fichier ovh.ini et le préremplir avec vos accès OVH obtenus ci-avant. Ainsi lorsqu'on créera le conteneur, on évitera le message d'erreur comme quoi le conteneur ne dispose pas des accès à l'API. En SSH, connecté avec de préférence l'utilisateur dont on reprendra le PUID/PGID dans les variables d'environnement du fichier docker-compose.yml, on se place dans le dossier destiné à accueillir la configuration du conteneur : cd /volume1/docker/swag Ensuite : mkdir -p config/dns-conf/ cd config/dns-conf/ curl -s https://raw.githubusercontent.com/linuxserver/docker-swag/master/root/defaults/dns-conf/ovh.ini -o ./ovh.ini On édite ensuite le fichier, avec son éditeur préféré (vim, nano, WinSCP, File Station, etc...) et on remplit les champs avec les accès API d'OVH obtenus précédemment : # Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-ovh/certbot_dns_ovh/__init__.py#L20 # Replace with your values dns_ovh_endpoint = ovh-eu dns_ovh_application_key = VALEUR_APPLICATION_KEY dns_ovh_application_secret = VALEUR_APPLICATION_SECRET dns_ovh_consumer_key = VALEUR_CONSUMER_KEY Pour éviter un message lié aux permissions laxistes du fichier, on va le chmoder : chmod 600 ovh.ini Si en revanche vous obtenez plus tard un erreur due à un des permissions insuffisantes, exécutez de nouveau la commande en remplaçant 600 par 640. 8-D. Création du conteneur Une fois le fichier ovh.ini correctement complété, on peut créer le conteneur, on se place dans le dossier où se trouve le fichier docker-compose et on écrit : docker-compose up -d On peut suivre l'évolution de l'initialisation du conteneur via : docker-compose logs --follow (CTRL+C pour arrêter le défilement des logs en direct). Ou alors via le paquet Docker de DSM ou encore Portainer (voir tutoriel). Normalement à ce stade vous disposez d'un certificat fonctionnel dans /volume1/docker/swag/config/keys/letsencrypt. Il sera tout à fait possible des copier les fichiers ou de créer des liens symboliques pour d'autres applications vers ces fichiers. 🙂 Autre possibilité, monter ce dossier en tant que volume pour un service qui nécessiterait ses propres certificats, bref ils sont à vous, faites-en ce que bon vous semble ! Passons à la configuration du proxy inversé. 9. Configuration du proxy inversé 9-A. Configuration d'une entrée Nginx est une application assez dense, et demande de comprendre les procédés à l'œuvre, le tutoriel sur la mise en place d'un VPS comme frontend de @Einsteinium entre plus en détail dans le sujet, dans notre cas, on a la chance que Linuxserver propose dans son image toute une liste d'applications grand public préconfigurées, dirigeons-nous pour cela dans le dossier suivant : cd /volume1/docker/swag/config/nginx/proxy-confs Et voyons ce qu'on y trouve : ls -l On voit tout un tas d'entrée préconfigurées, qui se classent en deux catégories : subdomain et subfolder. Le proxy inversé peut fonctionner soit en fonction du sous-domaine sollicité, soit du "path" (chemin) après le nom de domaine. Dans notre cas on s'intéressera aux entrées de type subdomain, exemple avec une entrée pour Resilio-sync : Faisons un rapide tour des directives, les champs en vert sont ceux que vous êtes a priori susceptibles de modifier : server { => on commence la définition d'une entrée du proxy inversé listen 443 ssl; et listen [::]:443 ssl; => le proxy inversé va écouter sur le port 443 les requêtes en IPv4 et IPv6 de toutes les sources disponibles. server_name resilio-sync.*; => la condition pour que le proxy inversé réagisse est que l'adresse commence par resilio-sync, exemple -> resilio-sync.ndd.ovh. include /config/nginx/ssl.conf; => à l'exécution, nginx va importer tous les paramètres définis dans le fichier ssl.conf, entre autre le chemin du certificat à utiliser, les algorithmes de chiffrement, etc... #include /config/nginx/ldap.conf; => pour ceux qui souhaitent s'authentifier au travers du proxy à partir d'un serveur d'authentification LDAP. Cette image n'embarque pas de serveur LDAP, elle permet juste de l'intégrer facilement au proxy inversé. Commenté par défaut. #include /config/nginx/authelia-server.conf; => permet d'intégrer une authentification deux facteurs ou simple facteur conditionnelle, fera l'objet d'un autre tutoriel. Cette image n'embarque pas de serveur Authelia, elle permet juste de l'intégrer facilement au proxy inversé. Commenté par défaut. location / { : on définit le comportement de Nginx pour la racine ("/") du sous-domaine. Viennent ensuite trois blocs (de la ligne 21 à 30) affiliés respectivement à une authentification http (l'explorateur demandera un identifiant et un mot de passe au chargement de la page), des paramètres liés à l'authentification par LDAP, et des paramètres liés à Authelia. On n'y touchera pas ici. include /config/nginx/proxy.conf; => Importation d'en-têtes (timeouts, transmission des IP, gestion des cookies, etc...) include /config/nginx/resolver.conf; => Le résolveur DNS utilisé sera le résolveur Docker embarqué dans chaque conteneur. La partie suivante est la partie la plus importante, elle définit comment le conteneur swag va accéder à l'application qu'on souhaite dissimuler derrière le proxy inversé. Il faut garder à l'esprit que la façon dont le conteneur accède au réseau peut être bien différente de la façon dont vous, vous accédez à vos applications par le navigateur. Dans notre cas, vu que le conteneur est sur le réseau macvlan, donc sur le réseau physique, comme la machine depuis laquelle vous tentez d'accéder à ces applications. A une différence près, si vous avez bien suivi, c'est que le conteneur ne pourra pas accéder à son hôte via son IP physique, mais seulement par son IP virtuelle, donc dans notre cas 192.168.1.200 au lieu de 192.168.1.100. Voyons la signification des trois champs : 9-A-1. $upstream_app set $upstream_app resilio-sync; Ici c'est très trompeur, ce que vous lisez là, "resilio-sync", c'est le nom du conteneur. Cette résolution par nom de conteneur, donc ici que le conteneur de nom "swag" cherche à contacter le conteneur de nom "resilio-sync" ne peut s'opérer que si les deux conteneurs se trouvent dans le même réseau. Dans notre cas, si on avait bien un conteneur resilio-sync, il serait probablement en bridge sur son hôte. Par défaut inaccessible au conteneur Let's Encrypt sauf si on a translaté le port du conteneur sur celui du NAS. Dans ce dernier cas on peut tout à fait y accéder en entrant l'adresse IP ou le nom DNS du NAS : 192.168.1.200 (rappelez-vous, IP virtuelle). 9-A-2. $upstream_port set $upstream_port 8888; Il s'agit du port tel qu'il sera accessible pour le conteneur SWAG. Si par exemple sur votre NAS vous avez un conteneur Bitwarden, que par défaut l'interface est émise sur le port 8080 dans le conteneur, mais que vous avez décalé le port pour une raison qui vous appartient, disons vers 5080, il faudra alors utiliser 5080 et pas 8080. 9-A-3. $upstream_proto set $upstream_proto http; Le protocole lié au port, souvent http (on évite de chiffrer entre le NAS et lui-même), mais parfois https (certaines applications comme Unifi-controller n'expose leur interface que via HTTPS), à vous d'adapter en fonction du besoin. 9-A-4. Récapitulatif Prenons le cas de l'application Resilio-sync qu'on aurait installé sur notre NAS, via le centre des paquets (sans Docker donc), j'utiliserai la configuration suivante : set $upstream_app 192.168.1.200; set $upstream_port 8888; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; La ligne proxy_pass construit l'URL à partir des variables précédemment définies, on n'a pas à y toucher. D'autres exemples : Moments set $upstream_app 192.168.1.200; set $upstream_port 10004; # Port personnalisé de Moments dans Portail des applications set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; Jeedom auquel j'accède via un nom de domaine local : set $upstream_app raspberrypi.local; set $upstream_port 8088; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; Mon routeur, dont l'interface émet sur le port sécurisé 8443 : set $upstream_app 192.168.1.1; set $upstream_port 8443; set $upstream_proto https; proxy_pass $upstream_proto://$upstream_app:$upstream_port; Une fois toutes nos entrées configurées, on redémarre le conteneur : docker restart swag Et normalement, tout devrait être fonctionnel. 9-B. Redirection HTTP -> HTTPS Par défaut, SWAG écoute sur le port 80. Si vous souhaitez que SWAG fasse une redirection automatique 80 -> 443 pour les requêtes extérieures, il faut faire une redirection du port 80 depuis votre box vers le port 80 de l'IP (192.168.1.145) du conteneur. Si vous aviez l'habitude de faire une demande de certificat depuis DSM via HTTP-01, vous risquez d'être embêté car une seule redirection simultanée du port 80 est possible. 9-C. Validation par HTTP-01 Il se peut que votre hébergeur DNS n'ait pas d'API pour permettre une validation du certificat à son niveau, dans ce cas-là vous pourriez vouloir utiliser un certificat délivré par HTTP-01. Il faut dans ce cas-là rediriger le port 80 de votre box/routeur vers le port 80 de l'IP du conteneur 192.168.1.145 Un fichier docker-compose type pour un renouvellement HTTP-01 pourrait être le suivant : version: '2.1' services: swag: image: linuxserver/swag container_name: swag networks: macvlan_net: ipv4_address: 192.168.1.145 cap_add: - NET_ADMIN environment: - PUID=1026 - PGID=100 - TZ=Europe/Paris - URL=ndd.ovh - SUBDOMAINS=plex,bitwarden,wordpress,dsm, # on liste les sous-domaine, attention à la virgule finale - VALIDATION=http # on remplace dns par http et on supprime la variable DNSPLUGIN - DHLEVEL=2048 - EMAIL=mail@ndd.tld - ONLY_SUBDOMAINS=false - STAGING=false volumes: - ./config:/config restart: unless-stopped networks: macvlan_net: external: true Remarque : Si notre certificat racine (ndd.ovh) est déjà géré ailleurs, mais qu'on souhaite avoir un deuxième proxy inversé sur une autre machine (un VPS par exemple) avec le même domaine, on peut passer la variable ONLY_SUBDOMAINS à true. Ainsi le certificat ne sera généré que pour les sous-domaines. 10. Fail2ban 10-A. Configuration Fail2ban est une application très pratique qu'on retrouve dans DSM, c'est le service qui permet de bannir une personne tentant de se logger plusieurs fois d'affilée de manière infructueuse à un service Synology. Ici, on va pouvoir l'appliquer à ce qu'on veut. Dans DSM c'est configurable dans l'onglet "Blocage". Il y a cependant une condition, fail2ban se base sur la lecture de logs, et en les analysant il va identifier des IP et des résultats de login : échec ou succès. La plupart des logs d'accès sont lisibles par fail2ban, car il embarque tout un set d'expressions régulières lui permettant d'analyser les logs, mais c'est un point à vérifier en amont. Fail2ban se base sur ce qu'on appelle des prisons, ou "jails" en anglais. Allons donc dans le dossier de fail2ban : cd /volume1/docker/swag/config/fail2ban && ls -l $_ filter.d comprend les fichiers de configuration permettant d'analyser et filtrer le contenu des logs en extrayant les informations utiles au moyen d'expressions régulières. action.d comprend les actions à entreprendre quand une analyse répond à un critère de filtrage. Ces dossiers comprennent un grand nombre de fichiers de configuration prédéfinis propres à tout un ensemble d'applications. Remarque : Si l'application que vous souhaitez protéger n'est pas incluse, il faudra alors créer vos propres filtres. fail2ban.sqlite3 est la base de données embarquée. jail.local est le fichier qui nous intéresse en particulier : La section [DEFAULT] définit le comportement global, il peut être écrasé au sein des sections suivantes qui définissent chaque service qu'on souhaite surveiller (maxretry, etc...). Intéressant, et qui n'apparaît pas dans l'impression d'écran, il est possible d'ajouter une directive ignoreip qui permet de whitelister des plages d'IP : ignoreip = 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8 Ici je whitelist les IP pivées qui peuvent vouloir se connecter, pas de risque de me verrouiller du coup. Le fichier jail.local surveille par défaut les 4 services Nginx. On a également un bloc ssh désactivé par défaut. Pour l'activer c'est assez simple : [ssh] enabled = true port = ssh filter = sshd logpath = /log/host_ssh_auth.log Notes : port : ssh représente ici le port SSH par défaut (22), dans les faits si vous avez changé le port SSH sur votre hôte, mettez directement son numéro. filter : cela correspond au nom du fichier .conf qu'on trouvera dans le dossier filter.d, ici on appellera donc le fichier sshd.conf logpath : normalement le contenu des logs SSH se trouve dans /var/log/auth.log, pourquoi ne pas mettre ça ? Si vous écrivez /var/log/auth.log, vous allez surveiller le log d'accès SSH ... au conteneur. A priori ça ne nous intéresse pas, on cherche à lire les logs SSH de l'hôte. Pour que le conteneur y ait accès, il faut les monter via un volume. Il suffit pour cela d'éditer le fichier docker-compose.yml et d'y monter les logs de l'hôte dans un fichier à l'intérieur du conteneur, qu'on définit arbitrairement : version: '2.1' services: swag: image: linuxserver/swag container_name: swag networks: macvlan_net: ipv4_address: 192.168.1.145 cap_add: - NET_ADMIN environment: - PUID=1026 - PGID=100 - TZ=Europe/Paris - URL=ndd.ovh - SUBDOMAINS=wildcard - VALIDATION=dns - DNSPLUGIN=ovh - DHLEVEL=2048 - EMAIL=mail@ndd.tld - ONLY_SUBDOMAINS=false - STAGING=false volumes: - ./config:/config - /var/log/auth.log:/log/host_ssh_auth.log:ro # on ajoute ro pour read-only (lecture seule) restart: unless-stopped networks: macvlan_net: external: true On recrée le conteneur : docker-compose down && docker-compose up -d On aura maintenant fail2ban qui pourra analyser les connexions SSH sur l'hôte. Quelques commandes utiles pour vérifier le bon fonctionnement des prisons : Pour renvoyer la liste des prisons : docker exec -it swag fail2ban-client status Pour afficher le statut d'une prison en particulier, ici ssh : docker exec -it swag fail2ban-client status ssh le terme swag dans les commandes précédentes correspond au nom que vous avez donné au conteneur SWAG. 10-B. Proxy fiable Par défaut, DSM empêche l'identification de l'IP source, sauf si on a précisément ajouter à la liste des proxy fiables l'IP de notre conteneur swag. Pour cela, Panneau de configuration -> Sécurité -> Proxies fiables et on ajoute l'IP du conteneur: On valide, maintenant ce sera l'IP source qui sera lue et non plus l'IP du conteneur SWAG. Ce qui revêt son importance pour fail2ban, sinon vous allez simplement bannir votre proxy inversé, ce serait bête non ? 🙂 Pour ceux qui souhaitent pousser la configuration de fail2ban plus en profondeur : https://www.linode.com/docs/guides/using-fail2ban-to-secure-your-server-a-tutorial/ https://manpages.debian.org/testing/fail2ban/jail.conf.5.en.html (très intéressant) https://github.com/linuxserver/docker-swag#using-fail2ban (commandes utiles) 11. Conclusion Ce conteneur est un package tout-en-un pour la gestion de vos certificats de vos accès externes et internes. Et il est assez facile à manipuler une fois qu'on a compris le principe. Il a surtout l'avantage de ne pas toucher au système, qu'il s'agisse de DSM ou d'une distribution Linux autre. Dans le cas de DSM particulièrement, il est possible de réaliser ce genre de manipulations car DSM utilise Nginx pour son proxy inversé, mais chaque mise à jour de paquet ou d'OS supprimera toutes vos modifications. Il existe un ancien tutoriel de @CoolRaoul pour proxy inversé sur le forum qui explorait justement une solution à ce problème, mais à l'époque le portail des applications DSM n'existait pas encore. 😉 Enfin c'est tout à fait portable, le jour où vous souhaitez héberger le proxy inversé sur un Raspberry Pi, un VPS, ou tout autre périphérique, il n'y aura qu'à copier vos fichiers de configuration d'une machine à l'autre, et faire les quelques adaptations nécessaires (adresses des services internes + redirection des ports). Màj : 22/07/2021