Cloud Drives et sécurité

Au fil du temps nous avons pris l'habitude d'utiliser des Cloud Drives. S'ils ont tous été comparés et décortiqués il reste des aspects souvent laissés de coté. La vraie menace aujourd'hui n'est pas tant de perdre ses fichiers mais plutôt de se les faire chiffrer à ses dépends, et dans ces cas comment les récupérer, et surtout les récupérer rapidement.

La majorité des ces offres permettent la synchronisation sélective (ne synchroniser que ce qui est utile) et surtout le travail en ligne avec des web apps. L'avantage de travailler ainsi est qu'aucun crypto virus ne pourra venir vous chatouiller.

Je ne vais pas faire le tour de toutes les offres mais me concentrer sur celles que je connais bien et me pencher sur les environnements Windows et MacOS.

Microsoft OneDrive

Depuis SkyDrive cette offre a beaucoup évoluée. Il existe en fait deux offres, l'une grand public (qui fait partie de l'offre Outlook grand public) et l'autre à destination des professionnels et des entreprises (qui fait partie de l'offre tentaculaire Microsoft 365, et n'est pas achetable à part). Techniquement l'usine qui est derrière est différente, mais dans sa manie habituelle Microsoft les appelle du même nom, et cette pratique confuse n'est pas nouvelle. 

Dans la pratique les deux offres proposent un historique des versions de tous les documents, on peu donc considérer que si un document est vérolé par un crypto virus, il sera toujours possible de restaurer la version précédente. Cette opération peut bien sur être fastidieuse, et là ou Microsoft va plus loin c'est qu'il offre la possibilité de restaurer l'ensemble des fichiers à une date donnée. Ainsi il sera possible de restaurer rapidement tout le contenu. C'est un vrai plus.

Pour la version Entreprise le client permet également de synchroniser localement des librairies de groupe, par ailleurs accessibles via Teams. Et dans ce cas il est également possible de faire une restauration complète à une date donnée.

Google Drive

Chez Google il existe également deux offres. La première pour tout le monde (Google One) et la seconde à destination des professionnels et des entreprises (Google WorkSpace). Le client Sauvegarde et Synchronisation est utilisable sur les deux offres, il permet entre autre de synchroniser localement son drive, mais également de sauvegarder en continu des répertoires de l'ordinateur. C'est ainsi que ma fille, traumatisée par la perte d'une partie de ses cours sur OneDrive Business (sous Mac) les sauvegarde sur Google Drive... Une autre application réservée aux entreprise permet d'utiliser son drive comme un disque supplémentaire. Dans l'offre professionnelle il est également possible de créer des drives partagés qui pourront être accessible aux utilisateurs de la solution gratuite.

A ma connaissance il n'existe pas d'option permettant de restaurer l'ensemble des documents à une date donnée sur l'offre grand public. Par contre l'historisation des fichiers fonctionne sur les deux offres.

Attention : les des offres Google Drive sont en pleine mutation des de nouvelles fonctionnalités sont prévue pour fin avril début mai.

Infomaniak KDrive

Cette offre suisse est à considérer pleinement car full RGPD, US Cloud Act free et avec la garantie que vos données ne seront jamais exploitées. Plus jeune et encore perfectible elle propose comme les autres une offre gratuite et une offre payante plus complète. Une historisation plus ou moins évoluée est au rendez vous mais sans possibilité d'une restauration globale.

A noter que sur les offres de groupe il n'est pas possible à l'administrateur d'accéder aux drives des autres utilisateurs et ainsi les sauvegarder. Donc ok dans un groupe d'indépendants ou la confidentialité de chacun est assurée, mais pas en entreprise.

Un des gros plus de KDrive est toutefois d'être full compatible WebDav, donc accessible sans client et par un Synologie pour par exemple une sauvegarde... (One drive également, mais il faut passer par Internet Explorer, c'est fastidieux, antique et plutôt décourageant...).

Le produit est plus jeune mais vraiment prometteur.

Dropbox

Ca existe encore ? Oui bien sur, mais il y a longtemps que je n'ai pas testé.

Box

Idem

Ice Drive

Un petit nouveau prometteur que je suis en train de tester.

Synology Drive et autres...

Un simple NAS, si possible hébergé, peut constituer une possibilité de cloud drive full privé. Ca fonctionne très bien. Il existe d'autres offres dans ce genre, NextCloud par exemple, mais ce n'est pas l'objet de la réflexion d'aujourd'hui.

Apple Cloud

Un autre monde.

Sauvegarder son / ses cloud drives

Comme on l'a vu tous ces cloud drives offrent des garanties de moyens pour assurer la sécurité de vos données. Mais aucune de ces solutions n'est infaillible et en cas de désastre (un crypto par exemple) la restauration risque d'être fastidieuse. Donc s'agissant de données critiques ou d'utilisateurs exigeants il va falloir s'assurer coté IT d'outils de restauration rapides et faciles à mettre en œuvre. Il en existe une multitude, Par exemple Veeam propose une solution qui nécessite un serveur Windows pour l'exploiter, une autre alternative consiste à utiliser un NAS Synologie et Active Backup pour Office 365 ou GSuite. Ce NAS peut être dans l'entreprise, ou par exemple loué chez Infomaniak qui le propose et ou les débits seront en adéquation avec cet usage. Une sorte d'assurance anti stress pour le responsable IT.

Clients alternatifs

Toutes ces offres proposent leur client propriétaire. Avec le temps ces clients fonctionnent plutôt bien, même s'il reste des lacunes. Que dire de OneDrive toujours en 32 bits là ou Microsoft prône du 64 bits ? Que dire du client Mac OneDrive qui fonctionne enfin (je touche du bois) après des années pour le moins catastrophiques ?

Bref, si on a un usage particulier, ou si on utilise plusieurs services en parallèle, il est tout à fait possible de passer par des clients alternatifs comme MountainDuck (Mac et Windows) ou RaiDrive (Windows). Ce n'est pas un conseil, mais une alternative possible. Il en existe d'autres bien sur, et les plus barbus s'orienteront naturellement vers RClone.

 

Sauvegardes & Stockage Cloud

Il aura suffit d'un incendie ravageant un des data centers d'OVH pour que tous les IT de France dorment mal et que s'engagent de longues discutions de comptoir sur ce sujet. Il y a aussi les vautours opportunistes qui en profitent pour proposer leurs alternatives. Je ne vais pas ici vous expliquer si OVH est en faute, à mal fait ou bien fait son travail d'hébergeur, je n'en ai ni les moyens ni toutes les compétences. Je suis juste content de ne rien avoir chez eux et je compatis avec mes collègues qui sont dans la panade. Je vais donc juste vous parler de ce que je connais, sachant qu'il existera toujours un delta entre les meilleures pratiques et ce que l'ont peut s'offrir, techniquement et financièrement.

Il n'en reste pas moins qu'en matière de sauvegarde il y a des règles. La première veut qu'on dispose d'au moins 3 copies, les logiciels modernes le font très bien, ensuite que ces copies soient sur plusieurs support (NAS, Bandes), et surtout que l'on dispose d'au moins une copie externalisée. La fameuse sauvegarde de la sauvegarde.

Que veux t'on sauvegarder ?

PC isolé :

Premier conseil, on mets tous les documents dans un cloud drive (Google, Dropbox, Onedrive, KDrive) et on le configure pour qu'il sauvegarde le bureau et les documents. On peut aussi faire ça avec son cloud privé à base de Synology Drive ou autres logiciels de cloud privé comme NextCloud, enfin, quand on maitrise...

Mais on peut également vouloir sauvegarder ailleurs : Il existe une multitude logiciels qui vont savoir faire des sauvegardes incrémentales chez un fournisseur. On peut également vouloir faire une sauvegarde de type image, c-a-d un clone de sa machine. Dans ce cas le plus simple est d'utiliser Veeam Agent (gratuit) et de sauvegarder sur un disque externe, un second disque interne sur un desktop ou un NAS sur le réseau. Possible également de le faire vers OneDrive. Avantage, historisation et restauration intégrale en cas de besoin (ne pas oublier de créer la clé USB de boot....).

Site web

Un site web hébergé est généralement composé de fichiers et parfois d'une base de donnée (Wordpress par exemple). Les offres sont très disparates et on sauvegarde généralement les pages en FTP ou via des options proposées. Le FTP est universel et le minimum à faire lors de chaque mise à jour. S'il y a DB (WP par exemple) le process de sa sauvegarde est intégré dans une copie en FTP. Tout cela est un peu archaïque et il faut trouver un moyen pour l'automatiser ou s'imposer une véritable discipline...

VPS

Un VPS (Virtual Private Server) est rarement sauvegardé par l'hébergeur. Donc selon l'O/S c'est à vous de le prévoir et cela dépendra de ce que vous voulez sauvegarder (RClone, FTP).

Serveur dédié

Que votre dédié soir chez un hébergeur ou dans votre bureau, c'est pareil. C'est à vous de gérer les sauvegardes en fonction de sa criticité. Et si hyperviseur, voir plus loin.

Instance cloud managée

Managée veut dire que la notion de sauvegarde est intégrée. En général plusieurs options sont proposées et le tarif varie en conséquence. De base le fournisseur doit garantir la disponibilité. Il faut lire les contrats. On ne parle pas vraiment de sauvegardes mais de disponibilité, pour résumer si le data center brule, l'instance doit toujours être disponible car elle est censée être répliquée sur un autre site géographique. Enfin, c'est ce qui se passe chez Azure, AWS, etc... et l'expérience à démontrée que chez d'autres ça peut être plus hasardeux. Donc dans tous les cas, mettre en place une sauvegarde de secours pour les datas (base SQL par exemple) chez un fournisseur tiers n'est pas forcément un luxe !

NAS

Un NAS sert souvent des destination de sauvegardes, mais également pour partager des fichiers. Donc si la maison brule il n'y a plus rien. Il faut donc externaliser une sauvegarde à l'aide des logiciels fournis (HyperBackup sur Synology par exemple) qui fonctionne avec tous les fournisseurs de stockage. Et ne pas confondre synchronisation (CloudSync) ou on réplique des données même si elles sont vérolées, et sauvegarde (HyperBackup) ou on historise des sauvegardes. Synology propose C2 qui est également une bonne alternative intégrée.

VM et Hyperviseurs

Ici on creuse dans le dur et en général il y a un IT qui sait faire son boulot. S'il est possible de pratiquer des sauvegardes au niveau VM comme sur un serveur physique, la sauvegarde s'effectue en général au niveau de l'hyperviseur avec des outils tels que Veeam Backup&Recovery (il y a de la concurrence et même des produits gratuits). Idéalement on sauvegarde sur un stockage local (un gros NAS par exemple) et en parallèle on externalise vers un fournisseur de stockage externe. Bien sur la taille de l'infrastructure est un facteur décisionnel. Et pour des données critiques rien n'empêche de mettre en place une sauvegarde spécifique à l'intérieur des VM.

A ce stade on pense également PRA. En effet rien ne sert de sauvegarder si on ne dispose pas de quoi restaurer après une catastrophe... Mais c'est un autre sujet.

Fournisseurs de stockage

Un bon principe consiste comme souvent à ne pas mettre tous ses œufs dans le même panier.

Le choix de l'hébergeur est fait en fonction de la criticité de ce que l'on héberge et des moyens dont on dispose. Pour un résultat apparemment identique les tarifs peuvent s'étaler de 1 à 10, voire plus. Donc si vous êtes une entreprise riche et peu regardante sur sur le CloudAct et autres RGPD, visez Azure ou AWS, ce sont les meilleurs. Dans le cas contraire faites attention ou vous mettez vos datas et lisez bien les contrats. Une fois bien que vous aurez choisit votre fournisseur il faudra penser à une solution de stockage indépendante pour la fameuse seconde sauvegarde. Et attention à ne pas utiliser pour cette seconde sauvegarde une solution qui serait hébergée chez ce même fournisseur mais dans une offre concurrente. En gros savoir ou sera physiquement hébergée la sauvegarde de secours.

Pour le stockage et l'hébergement il faut également prendre n compte le niveau de certification du data center (Tiers 3/4, etc...).

Une sauvegarde externe c'est aussi la disponibilité d'un protocole qui sera utilisé par les logiciels de sauvegarde. Il vaut mieux éviter les protocoles exotiques ne fonctionnant qu'avec tel ou tel logiciel.

  • FTP : un peu old school mais adapté et utilisé sur les petits sites. Peu performant et peu adapté aux gros volumes.
  • SMB et NFS : pourquoi pas, mais je déconseille sur internet. Et SMB 1 on oublie, même en local, c'est une passoire que les marchands de copieurs forcent à réactiver.
  • S3 : Créé par Amazon AWS c'est un standard supporté par de nombreux logiciels, Veeam par exemple.
  • Swift : Alternative plus ouverte que l'on peut comparer à S3.

Je ne vais pas ici faire le tour de tous les fournisseurs de stockage, mais uniquement de ceux que j'ai testés.

  • Azure Backup : couteux et compliqué. Pas adapté aux TPE, à considérer dans un environnement d'entreprise structurée. A noter que s'il est possible de sauvegarder facilement un NAS Synology vers de l'Azure Backup, vous ne connaitrez pas à l'avance le montant de la facture...
  • AWS S3 : idem
  • OneDrive : utilisable avec Veeam Agent (tuto ici) pour sauvegarder des images de PC. On peut également s'en servir avec RClone si on a un barbu dans ses potes.
  • Google Drive : Synology et tout ce qui est à base de RClone : Ca peut être intéressant coté tarification dans un cadre GSuite. Débits très rapides.
  • Wasabi : véritable alternative à AWS S3, ce fournisseur ne fait que du stockage et il le fait bien, et à des tarifs très concurrentiels (5 € / mois / TB sans frais de transfert). Localisation des DC aux Etats Unis, Japon et Europe à Amsterdam. Protocole S3 exclusivement, avec un accès admin de secours en FTP. Je m'en sert depuis quelques années.
  • Scaleway : je vais éviter car j'héberge mes serveurs chez eux. Leur offre Object Storage est moins couteuse que les GAFAM mais plus que Wasabi par exemple. Par contre leur offre C14 (Cold) est certainement la plus intéressante du marché pour de l'archivage. Mais c'est un autre sujet : sauvegarde = usage à la demande, archivage = conservation légale et usage différé.
  • OVH : Swift et depuis peu S3. Tarifs abordables. Mais bon, OVH ces temps ci ça fait un peu peur...
  • Swiss Backup : Infomaniak est un des plus gros hébergeurs suisses, non content de proposer une véritable alternative GAFAM, ils offrent une solution de sauvegarde très complète (5 € / TB avec une tarification dégressive). Support S3, Swift et FTP, mais également ne offre Acronis pour les PC et Macs ainsi que le support des mobiles avec la possibilité de partager un même compte entre divers usages en affectant des quotas... Et puis la Suisse c'est rassurant !

Sauvegarder est une chose, mais il est important de pouvoir accéder à ses sauvegardes en tous temps et et parfois autrement qu'avec le logiciel qui a servi à les faire. Ces logiciels utilisent en général un format propriétaire, de plus quand on sauvegarde chez un tiers on prend soin de chiffrer les sauvegardes un minimum.

En cas d'un crash, et le temps que l'infrastructure soit remontée / rétablie, on peu avoir besoin de façon urgente de certains fichiers. Dans tous les cas attention à bien disposer des mots de passe et autres certificats ayant servi au chiffrage.

  • Pour les sauvegardes en clair (FTP, RClone, etc...) c'est simple et il suffit d'aller chercher le fichier.
  • Veeam Backup&Recovery et ses clones : il faudra disposer du logiciel dans une version identique. Environnement d'entreprise, donc le même logiciel installé dans un PRA en attente. Au pire monter le logiciel rapidement sur une machine de secours.
  • Synology HyperBackup : Facile en C2 en web. Si on ne dispose pas d'un NAS de rechange, HyperBackup Explorer sur un PC il faudra pouvoir accéder à la sauvegarde. Deux solutions, un montage CloudDrive sur du S3 ou Swift, fonctionnel avec Wasabi et Scaleway, mais pas avec Swiss Backup pour l'instant (ticket ouvert). Alternative : télécharger la sauvegarde avec CyberDuck (Swift) ou S3 Explorer de CloudBerry (S3) afin de pouvoir l'explorer en local.

Voilà pour ce petit tour d'horizon. N'hésitez pas à partager vos expériences, je mettrais à jour cet article.

 

NextDNS, une bonne alternative

Traditionnellement, et encore aujourd'hui, la grande majorité des utilisateurs se servent du DNS de leur fournisseur d'accès sans vraiment savoir de quoi il s'agit. Certains plus aguerris l'ont changé, enfin ceux qui peuvent car certains fournisseurs comme par Orange (lamentable sur ce point) rendent ce changement impossible sur les LiveBox. Mais il y a toujours moyen de contourner sur les appareils connectés ou mieux les navigateurs. Depuis peu les navigateurs modernes permettent de configurer un DNS sécurisé (DNS over HTTPS, DoH), et d'ailleurs dans les dernières version celui ci est déjà plus ou moins configuré.

Les choix :

  • Google : ça reste le premier choix alternatif que l'on retrouve. Donc au cas ou Google aurait loupé un de vos pas, il se rattrape en fournissant un DNS gratuit.
  • Cloudflare : on ne présente plus, certainement le plus rapide.
  • Quad9 : une autre initiative suisse, plus transparent et qui assure un filtrage de domaines malveillants...
  • La liste est longue et vous la retrouverez ici.

Pour aller un un peu plus loin on peut également utiliser un DNS filtrant à installer (et maintenir) sur son propre réseau. Il en existe principalement deux, Pi Hole et AdGuard Home. Je ne suis pas fan du premier, mais j'aime bien Adguard. L'inconvénient est qu'il faut une infrastructure minimale (VM, Docker, etc..) et que cela ne fonctionnera que sur un site. J'ai longtemps utilisé AdGuard, et comme tous les DNS filtrants on se retrouve parfois avec des faux positifs qui au final peuvent ralentir les flux.

L'intérêt d'utiliser un DNS filtrant réside principalement dans les points suivant :

  • Protection de la vie privée : confidentialité des requêtes, protection contre les trackers, suppression des publicités intrusives,
  • Sécurité : protection contre les menaces qui utilisent le DNS,
  • Contrôle parental,
  • Supervision.

NextDNS

Enfin, si je vous parle de tout ça c'est pour vous présenter NextDNS.

NextDNS est une offre hébergée qui combine les avantages d'un AdGuard Home et d'un DNS rapide accessible partout. L'avantage étant que je vais pouvoir l'utiliser sur plusieurs sites ou je me déplace, mais également en situation de mobilité.

Pour en profiter il est possible de changer (quand on peut) le DNS affecté au DHCP sur le routeur ou la box par ceux proposés par NextDNS. Mais pas que. Il est également possible de configurer DoH sur les navigateurs et les O/S Mobiles de façon très simple afin d'en profiter en situation de mobilité, sans pour autant avoir à modifier la configuration à chaque usage. Et pour ceux qui sont réfractaires à la technique, les service propose des applications pour tous les systèmes avec des guides très clairs proposés sur le panneau de contrôle de NextDNS.

Et oui car panneau de contrôle il y a, et c'est un gros plus offert par NextDNS. Outre les diverses configurations possibles on vas y retrouver des statistiques ainsi que la liste des requêtes que l'on a fait. Bien sur ces options sont facultatives, ces données ne sont présentes que pour vous et si on le souhaite NextDNS n'enregistrera simplement rien. Mais laissez les au moins un temps, histoire de vous faire peur en voyant le nombre de requêtes faites par vos appareils, ainsi que votre dépendance aux GAFAM's, c'est juste effarant ! (le graphique qui suit c'est juste 24 heures chez moi...).

Navigateurs

Si DNS over HTTPS fonctionne très bien sur Opera, Edge (Chromium MS) ou Firefox, la fonctionnalité est par contre bloquée sur ma machine avec Chrome et brave au motif que ces navigateurs seraient managés par une organisation. Ce n'est pas le cas, hormis le fait que ce PC fait partie d'un domaine Active Directory, sans toutefois de policies spécifiques à navigateurs. Pas de problème par contre sur MacOS ou sur d'autres PC hors domaine. Un point à creuser.

Aller plus loin en entreprise

Dans le cas d'un réseau d'entreprise ou d'utilisateur avancé on va donc aller changer le DNS sur le routeur ou le serveur DNS. Et si on est sur un domaine Active Directory, ce qui est mon cas, le DNS Windows est un passage obligatoire. Et là c'est le bug, car si Microsoft commence timidement à introduire DoH sur Windows 10, le DNS de Windows Server sur lequel repose Active Directory n'est toujours pas adapté à DNS over HTTPS ou DNS over TLS au niveau des redirecteurs (forwarders).

La seule solution est donc de passer en clair entre le DNS du serveur Windows et les IP de NextDNS. Et justement passer en clair est une des choses qu'on ne veut pas faire. Pour contourner ça NextDNS propose une sorte de proxy DNS sur lequel on pourrait faire pointer nos forwarders, une version graphique qui installe un driver TAP (en 2021 sérieux ?) et un client CLI qui ferait bien l'affaire mais ne fonctionne pas correctement. Clairement chez NextDNS Windows c'est pas leur truc et les explications et réponses aux questions que l'on trouve sur leur forum ou le GitHub en témoignent.

Pour l'expérience j'ai donc monté un AdGuard transparent dans un Docker qui pointe sur https://dns.nextdns.io/xxxxxx en DoH. Ca fonctionne en faisant pointer dessus le sforwarders de mon serveur DNS sous Windows Server. Je suppose que j'aurais pu faire la même chose avec un petit Linux et le client CLI, mais mon but était démontrer que ça tourne dans un environnement Windows d'entreprise. Après avoir perdu pas mal de temps à chercher des informations je me suis dit que ce CLI n'avait peut être jamais été testé sur Windows Serveur 2016/2019 et qu'il fonctionnerait peut être sur une vieille version de Windows, et banco ça fonctionne sur un Windows 2008R2 vintage... Sérieux ? Donc :

nextdns install -config 71fc72 -report-client-info -listen 0.0.0.0:53

Et ensuite on fait pointer du DNS Windows sur l'IP de ce serveur et c'est transparent pour les utilisateurs.

Une alternative pourrait consister à changer de DNS sur les clients (via le DHCP) et à les faire pointer sur le proxy DNS en précisent que les requêtes du domaine Active directory local pointeront bien sur le DNS AD. C'est possible, mais ce n'est pas ce que je conseillerais.

nextdns install -config 71fc72 -report-client-info -listen 0.0.0.0:53 -forwarder canaletto.fr=192.168.10.10

Dans l'absolu ce petit CLI est très bien fait, il est juste un peu bâclé en ce qui concerne l'environnement Windows. Par contre il s'installe en mode service et sera donc persistant.

Bonus

NextDNS permet de faire de la réécriture de DNS, une fonction qui sera intéressante quand on utilise un VPN/SDN comme Zerotier car cela de permettre de résoudre des nom de hosts internet sur des adresses IP privée, ce qui est théoriquement contraire aux RFC sur un DNS public (bien que certains come CloudFlare l'acceptent, ce n'est jamais une bonne idée de documenter ainsi une architecture interne).

Conclusion

Je ne vais pas détailler tout ce que les autres sites ont pu écrire, pas même insérer un lien d'affiliation qui pourtant existe.

Ce service est un peu jeune, mais il avance rapidement. il est le fruit de deux Français expatriés aux Etats Unis. Personnellement je suis séduit et je vous invite à le prendre en main.

NextDNS est un service qui peut être gratuit pour un usage Soho limité à 300.000 requêtes, ça peut être suffisant dans pas mal de cas, en ce qui me concerne j'en suis à 150.000 en 24 heures, mais il faut dire que j'ai un peu poussé la chose dans ses retranchements. La tarification est très accessible (2 € par mois ou 20 € par an pour l'utilisation que j'en ai) et il existe des offres destinées aux entreprises et à l'enseignement.

Enjoy ;-) (je mettrais à jour cet article au fil du temps... N'hésitez pas à revenir).

Sources

 

Télétravail, RDP & VPN

Par les temps qui courent, le télétravail est de mise, mais tout le monde n’est pas placé à la même enseigne. Il y a les grandes entreprises ou les cadres sont équipées d’ordinateurs portables et ou les infrastructures de sécurité existent et ou il suffit juste d’extrapoler pour les salariés qui ne sont pas équipés. Et puis il y a les petites entreprises, voire très petites ou rien n’existe et ou bien souvent le salarié sera contraint dans l'urgence de travailler sur son ordinateur personnel.

Et dans ce cas on peu se retrouver dans des situations très précaires, en termes de sécurité ou de praticité, car l’ordinateur familial est généralement utilisé par d’autres personnes, souvent les enfants, ce qui peut rapidement poser des problèmes. On pourrait bien sur isoler une session, mais c’est ingérable et par définition l’intervention sur le PC personnel que l'on réalise en avec une prise de contrôle à distance doit se limiter au strict minimum.

La solution bien souvent utilisée conste à permettre au télétravailleur de travailler distance en se connectant à son ordinateur de bureau, et ainsi conserver son environnement habituel. Pour ce faire on pense d’abord aux solutions de type AnyDesk, TeamViewer, voire VNC, solutions simples à mettre en œuvre mais qui offrent peu de confort à l’usage. La seule vraie solution confortable est d'utiliser le bureau à distance qui fonctionne avec le protocole RDP. Le problème du RDP c’est sa sécurisation car ce protocole directement exposé sur internet est une véritable passoire dont les méchants hackers sont friands si on se content de simples redirections de port. Microsoft ne s’est jamais occupé de ce problème pour cet usage, la seule solution proposée est RDS (Remote Desktop Services), une usine à gaz certes efficace mais totalement inadaptée aux TPE. Royal TS Gateway peut constituer une alternative (il y en a d’autres), mais pas pour de très petites entreprises qui n'ont que peux d'infra et généralement pas d'IT.

L’autre alternative reste l’utilisation d’un VPN en équipant les postes clients. Il y a plusieurs façons de faire, mais je voulais quelque chose de transparent, facilement administrable, ne m’imposant pas d’intervention ultérieure sur le poste client et ne nécessitant pas l’installation d’un serveur. Je vais donc une fois de plus utiliser Zerotier qui répond à mon besoin et qui est gratuit jusqu'à 50 clients.

  • Pas de serveur à déployer
  • Installation minimale sur le poste client
  • Gestion des ACL centralisée

Ce n’est pas la façon de faire la plus sécurisée (le port RDP est ouvert entre le client et son PC de bureau), mais on va limiter le risque avec un bon équilibre risque / coût / praticité.

Zerotier

Je vais faire l’impasse sur la mise en œuvre, j’en ai déjà parlé. Ici on va installer le client sur les deux postes à associer et leur figer une IP sur la console d’admin (Zerotier supporte Windows, MacOS, Linux et même Android et IOS). Ensuite on va s’assurer que seul le trafic RDP du poste client soit autorisé à se connecter au PC de bureau en utilisant les règles dans la console.

# Allow only IPv4, IPv4 ARP, and IPv6 Ethernet frames.
drop
	not ethertype ipv4
	and not ethertype arp
	and not ethertype ipv6
;
accept ipprotocol tcp and dport 443 or dport 80;

accept dport 3389 and ipsrc 10.147.1.20/32 and ipdest 10.147.1.30/32; # André
accept dport 3389 and ipsrc 10.147.1.21/32 and ipdest 10.147.1.31/32; # Carole
accept dport 3389 and ipsrc 10.147.1.23/32 and ipdest 10.147.1.33/32; # Bernard

drop chr tcp_syn and not chr tcp_ack; # No new TCP connections
;
# Drop TCP SYN,!ACK packets (new connections) not explicitly whitelisted above
break                     # break can be overridden by a capability
  chr tcp_syn             # TCP SYN (TCP flags will never match non-TCP packets)
  and not chr tcp_ack     # AND not TCP ACK
;
cap superuser
  id 2000 accept;
accept; # Accept what's left, returning RDP traffic

Coté poste au bureau on s'assure que le PC ne se met pas en veille (veille et verrouillage de l'écran uniquement) et on autorise RDP (le bureau à distance) sur le poste. Pour ça il faut un Windows Pro (mise à niveau à envisager parfois car les TPE qui vont acheter leur PC à la Fnac ou sur Amazon se retrouvent souvent avec une édition Famille de Windows).

Le client RDP

Do coté du poste client, après s'être assurée que la machine est à jour (on ne fait pas ça sur un vieux PC sous XP) et pas vérolée, il va nous falloir un client RDP et surtout interdire la mémorisation du mot de passe afin que n'importe qui ne puisse pas se connecter. Pour ça il y a une stratégie (Policie) à configurer ou une modification de registry, sauf que le PC personnel est une édition familiale il faudra ruser pour avoir accès aux stratégies...

Registry Hive HKEY_CURRENT_USER
Registry Path SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
Value Name DisablePasswordSaving
Value Type REG_DWORD
Enabled Value 1
Disabled Value 0

Tant sur Windows que sur Mac il existe plusieurs clients RDP proposés par Microsoft avec des possibilités inégales.

  • Client RDP de base Windows : Il supporte les redirections d'imprimantes, mais visiblement il est impossible malgré la stratégie d'interdire la mémorisation du mot de passe de session.
  • Client RDP enrichi que l'on peut télécharger sur le Windows Store pour Windows ou Apple Store MacOS : Il ne supporte pas la redirection des imprimantes, par contre il prend bien en compte la stratégie d'interdiction de mémorisation du mot de passe.

Tout ça se passe plutôt bien bien si le PC personnel est sous Windows, par contre si c'est un Mac vous imaginez bien que Microsoft ne s'est pas préoccupé du mappage du clavier qui est différent sur chez Apple. Et ça c'est juste insupportable à l'usage. Me voici contraint de chercher une alternative, alternative que je vais finalement utiliser sous Windows également car elle est plus sécurisée et bien plus fonctionnelle.

Royal TS/TSX

Royal TS (ou TSX sur Mac) est un client multi protocoles que j'utilise depuis des années pour gérer des douzaines de serveurs. Il inclus bien sur le RDP et une multitude d'options dont le mappage du clavier entre un Mac et un PC, la gestion des imprimantes et la possibilité de lancer des commandes avant et après une session. Et autre avantage il va être possible de chiffrer toutes les informations contenue dans ce client. De plus le fichier de configuration peut être partagé entre un PC et un Mac via un drive.

Royal TS/TSX n'est pas gratuit pour gérer une multitude de serveurs, mais cerise sur le gâteau il existe une version gratuite limitée à 10 connections. Juste ce dont on a besoin ici.

On installe sur le PC du salarié, on crée le profil (que l'on peut créer à l'avance) correspondant à son poste de travail avec l'option plein écran, on redirige les imprimantes et sur un Mac on gère le mappage. On n'hésite pas à enregistrer les identifiants car ici c'est le mot de passe de chiffrage de l'application qui sécurisera toutes les connections enregistrées.

A partir de là le salarié lance Royal TS/TSX, saisit le mot de passe de l'application et a accès à son PC de bureau. A noter qu'il est également possible de lui donner accès dans cette même application à d'autres environnements (RDP, VNC, SSH, PS, Terminal, ou des web apps sois IE ou Chromium). Et comme on peut batcher des process avant et après une ouverture de session on peut même imaginer de lancer et désactiver Zerotier avant et après.

Autre avantage de cette solution, il est possible de créer des fichiers de configuration chiffrés et facilement déployables (envoi par mail par exemple).

Voilà, ce n'est pas parfait, mais dans le contexte actuel rien n'est parfait. Et cette solution permettra le télétravail à peu de frais avec un minimum de sécurité et de confort.
 

Installer Ghost sur aaPanel avec Docker

Il y a quelques semaines je vous avait vaguement expliqué comment installer aaPanel pour gérer un linux. Avec aaPanel on peut installer en quelques clics un site web, un Wordpress ou un autre CMS. Le hic c'est que celui que je veux tester n'est pas dans la liste, mais heureusement aaPanel gère les container Docker et justement Ghost est disponible préinstallé dans ce mode.

Je prends ici l'exemple de Ghost, mais ce qui suit s'applique à n'importe quel container d'application web.

Docker

Dans aaPanel vous pouvez ajouter Docker Manager depuis l'AppStore, celui-ci s'avèrera suffisant pour installer quelques containers, mais trop léger pour faire la majorité des manipulations. L'avantage à l'installer c'est que ça ajoutera au serveur tout ce qui est nécessaire de base pour Docker/

L'alternative consiste à installer Portainer qui lui offre une interface complète pour Docker, dans un container (il existe des alternatives).

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Mais au final le plus simple est encore Docker Compose ou d'y aller directement en SSH, ou plus simplement avec le terminal intégré à aaPanel.

Il y a plusieurs choses importantes à paramétrer pour utiliser Ghost dans un Docker :

  • Le port que l'on restituera ou pas sur le host (la machine qui supporte Docker). Si on ne le configure pas Ghost sera uniquement accessible en local via l'IP du container (http://172.17.0.2:2368 par exemple) et non sur le réseau local et non sur le réseau local qui héberge le serveur. Sur une machine isolée, un VPS par exemple, ce n'est pas gênant car on servira de NGINX pour accéder au site en reverse proxy au passage gérer le certificat Lets'Encrypt. Par contre si le point d'entrée passe par un firewall sur une autre IP du LAN, il sera important d'exposer un port sur le host afin d'éviter le passage par un NGINX local, inutile dans ce cas.
  • Le second point consiste à paramétrer le répertoire qui contiendra les données (db, images, etc...) de notre site. Si on ne le fait pas Docker va créer un répertoire arbitraire pour y stocker les données du container tel que cela aura été défini par celui qui a créé le Docker (dans l'absolu ces données pourraient très bien rester dans le container, mais ce ne serait pas du tout une bonne idée). Sur un VPS on peut par exemple faire en sorte que les données soient dans un sous répertoire de l'utilisateur.
  • Enfin, et si l'on veut éviter d'avoir à le faire plus tard, il faut définir l'url du site que l'on va créer. C'est un point important car comme dans Wordpress, Ghost à besoin de connaitre l'url sur lequel il tourne pour la navigation. Si on ne le précise pas et que l'on redirige le site via un reverse proxy (par exemple : https://www.domain.tld > http://172.17.0.2:2368) cela semblera fonctionner mais certains liens seront incorrect puisqu'ils pointeront sur l'IP du container.

Mise en pratique

Création du container minimaliste :

docker run -d --name ghost ghost

Création du container avec la gestion des ports et de l'url :

docker run -d --name ghost -e url=https://www.domain.tld -p 3001:2368 ghost

Création du container avec la gestion des ports, de l'url en précisant du répertoire contenant les données, une option de redémarrage et une image particulière (pour l'exemple car idéalement on utilise celle par défaut qui est la dernière :latest) :

docker run --name ghost -p 3001:2368 -e url=https://www.domain.tld -v /home/lionel/ghost/content:/var/lib/ghost/content --restart=always -d ghost:1.21.1-alpine

En fait cette dernière possibilité, bien que proposée ne fonctionne pas, ou plus, au niveau de l'url. Je vais donc créer mon docker sans l'url et en profiter pour mettre mes données dans un répertoire un peu plus parlant. Pour ça je vais au préalable créer un volume.

docker volume create canaletto_data
docker run --name canaletto -p 3001:2368 -v canaletto_data:/var/lib/ghost/content --restart=always -d ghost

Tout ça c'est bien beau si on a qu'un seul container et que l'on ne veut pas exposer les ports. Le problème dans cette configuration c'est que mes containers vont s'attribuer par défaut des IP par ordre de démarrage. Par défaut le host docker à 172.17.0.1 et le premier container à être lancé prendra la suivante et ainsi de suite... Sauf que mon reverse proxy aura besoin de connaitre une IP fixe.  Il me faut donc trouver la solution pour figer leur IP. Simple il dit lui ! J'ai fini par trouver une méthode simple qui semble faire le job :

On crée un nouveau réseau Docker que je vais appeler my_bridge :

docker network create --subnet=172.18.0.0/16 --gateway=172.18.0.1 my_bridge
docker network ls  (ls pour voir les réseaux, rm pour en supprimer un)

Ensuite on crée le container en spécifiant le réseau à utiliser et l'IP à lui affecter et cela permet également d'isoler les container entre eux (entre temps j'ai bien sur crée une image de mon précédent container pour ne pas le perdre) :

docker run --name Ghost-2 --net my_bridge --ip 172.18.0.10 -p 3010:2368 -v canaletto_data:/var/lib/ghost/content --restart=always -d ghost:2

Ensuite je vais aller éditer le fichier de configuration Ghost qui se trouve dans le docker.

docker ps pour repéréer l'ID
docker container exec -it b23f1490ccfb /bin/bash

Et une fois dans le docker

apt-get update
apt-get install nano
nano config.production.json

Et là je vais modifier l'url qui se présente ainsi "url": "http://localhost:2368", en "url": "https://ghost.canaletto.fr",. Attention à bien sortir avec un exit si vous souhaitez y revenir... (ce point sur l'url n'est pas clair dans ma tête).

Une fois notre docker installé on a plusieurs choix possibles pour y accéder

  • En direct si on a exposé le port 80 ou sur le port 2368 qui est le port par défaut de Ghost dans le container, et à condition d'ouvrir le port dans aaPanel. C'est clairement plus que déconseillé car d'une part il n'y aura pas de SSL et d'autre part la sécurité minimale impose un reverse proxy et votre site exposé directement risque de se faire rapidement descendre. De plus ça limiterait à un site par IP.
  • Via le reverse proxy d'un autre firewall sur le LAN. Dans mon cas j'utilise pfsense avec HAProxy et Acme pour gérer les certificats. Je vais donc faire pointer HAProxy sur l'IP et le port exposée sur mon host Docker (https://www.domain.tld > http://192.168.1.10:3001 (IP LAN de mon serveur Docker qui est dans une VM))
  • Enfin si on est par exemple dans un VPS on va y accéder via un site créé avec NGINX, dans lequel on va gérer le certificat via Let's Encrypt et configurer la partie reverse proxy qui va pointer sur l'IP et le port du container. C'ets ce que l'on va voir dans le chapitre suivant.

NIGNX

On va ici faire les choses via aaPanel qui nous sert d'interface. Mais ceux connaissent peuvent bien sur éditer les fichiers de configuration idoines. NIGNX s'installe via l'App Store de aaPanel en un clic. Ensuite on va aller créer un site via le menu Website avec le nom de domaine que l'on souhaite utiliser, ici ghost.canaletto.fr sur le port par defaut qui est le 80. On associe pas de FTP (on pourra le faire plus tard et ainsi le faire pointer sur le répertoire des données Ghost, pas de Database car elle est gérée par Ghost, pas de PHP car c'est ici inutile. Pour le SSL il faudra de toutes façons renseigner plus tard la méthode (vérification par fichier ou par DNS via l'API CloudFlare si le DNS du domaine est géré par eux).

Ensuite on va aller ajouter un reverse proxy dans NIGNX et ainsi rediriger les requêtes vers l'IP et le port du container qui contiens Ghost en n'oubliant pas de préciser le nom du domaine utilisé. Attention, pour je ne sais quelle raison il faut configurer le certificat avant de mettre en place le reverse proxy. C'est probablement une limitation (autre nom pour un bug) liée à aaPanel.

A ce stade Ghost est normalement accessible et on peut commencer à le configurer via l'url https://www.domain.tld/ghost. La suite coule de source et est expliquée dans la documentation Ghost par ailleurs très complète.

Bonus

Le gros avantage de Ghost est que l'on peut lui injecter du code. Soit dans l'admin pour des fonctionnalités globales, soit dans une page ou un article, par exemple pour y ajouter directement un bouton Paypal si l'article présente un produit que vous vendez, ou encore un formulaire ou une vidéo externe.

Au niveau global on peut injecter du code dans deux parties, Site Header et Site Footer.

Zoom

Imaginons que je veuille agrandir les images en cliquant dessus. Je vais alors utiliser ce composant (il en existe d'autres) et ajouter deux scripts dans la partie "footer". Le premier le chargera via un CDN tandis que le second permettra son exécution.

<script async src="https://cdn.jsdelivr.net/gh/coreysnyder04/[email protected]a01/fluidbox-ghost-blog-plugin.min.js"></script>
<script>
    window.fluidboxGhostConfig = {
      theme: 'image-backdrop', // Options: light, dark, image-backdrop, hsla(262, 100%, 82%, 0.6)
      showCaption: true, // Sets whether to capture the caption and show it below the image when expanded
    }
</script>
Le code

Comme je publie régulièrement du code je vais ajouter Prism afin d'obtenir une présentation élégante des différents langages affichés. Je commence par le header et on termine par le footer. Au passage je vais également chercher une police chez Google et j'ajoute des modification de style pour la présentation du code (au début) mais également afin d'utiliser ma nouvelle police à la place de celle proposée par le thème par défaut. Et au passage dans le footer je vais également ajouter de quoi numéroter les lignes de mon code et ouvrir les liens dans une nouvelle fenêtre.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/themes/prism-okaidia.min.css" integrity="sha256-Ykz0nNWK7w4QWJUYR7OraN4773aMB/11aMt1nZyrhuQ=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/plugins/line-numbers/prism-line-numbers.min.css">

<link href='https://fonts.googleapis.com/css?family=Encode+Sans:300&display=swap' rel='stylesheet'>

	<style type="text/css" media="screen">
        .post-full-content pre strong {
            color: white;
        }
        .post-full-content pre {
            line-height: 0.9;
        }
        .post-full-content pre code {
            white-space: pre-wrap;
            hyphens: auto;
            line-height: 1.6;
            font-size: 0.7em;
        }
        pre[class*=language-] {
        	margin: 1.75em 0;
    	}
        .post-template p {
 			text-align: justify;
		}
  
  		p { 
            font-family: 'Encode Sans', sans-serif; 
        }      
		li { 
            font-family: 'Encode Sans', sans-serif; 
        }      
        blockquote {
            font-family: 'Encode Sans', sans-serif; 
        }      

    </style>
<script>
    window.addEventListener('DOMContentLoaded', (event) => {
        document.querySelectorAll('pre[class*=language-]').forEach(function(node) {
            node.classList.add('line-numbers');
        });
        Prism.highlightAll();
    });
</script>
<script type='text/javascript'>
  $( document ).ready(function() {
  	$(".post-content a").attr("target","moredetail");
  });
</script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/prism.min.js" integrity="sha256-NFZVyNmS1YlmiklazBA+TALYJlJtZj/y/i/oADk6CVE=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-markup-templating.min.js" integrity="sha256-41PtHfb57czcvRtAYtUhYcSaLDZ3ahSDmVZarE0uWPo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-javascript.min.js" integrity="sha256-KxieZ8/m0L2wDwOE1+F76U3TMFw4wc55EzHvzTC6Ej8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-css.min.js" integrity="sha256-49Y45o2obU1Yv4zkYDpMDyAa+D9sgKNbNy4ZYGRl/ls=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-php.min.js" integrity="sha256-gJj4RKQeXyXlVFu2I8jQACQZsii/YzVMhcDT99lr45I=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-sql.min.js" integrity="sha256-zgHnuWPEbzVKrT72LUtMObJgbwkv0VESwRfz7jpdsq0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-yaml.min.js" integrity="sha256-JoqiKM2GipZjbGjNyl62d6qjQY1F9QTLriWOe4N76wE=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-sass.min.js" integrity="sha256-3oigyyaPovKMS9Ktg4ahAD1R6fOSMGASuA03DT8IrvU=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-json.min.js" integrity="sha256-18m89UBQcWGjPHHo64UD+sQx4SpMxiRI1F0MbefKXWw=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-bash.min.js" integrity="sha256-0W9ddRPtgrjvZVUxGhU/ShLxFi3WGNV2T7A7bBTuDWo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-python.min.js" integrity="sha256-zXSwQE9cCZ8HHjjOoy6sDGyl5/3i2VFAxU8XxJWfhC0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/components/prism-ruby.min.js" integrity="sha256-SGBXZakPP3Fv0P4U6jksuwZQU5FlC22ZAANstHSSp3k=" crossorigin="anonymous"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.16.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
Edition

L'éditeur de Ghost fonctionne en Markdown qui est devenu un standard de fait. Mais il est également possible de créer ses articles avec un éditeur externe comme Zettlr! ou zNote (il en existe plein d'autres). Personnellement je préfère TinyMCE à Markdown, mais c'est surement parce que je suis vieux et que j'ai été lobotomisé par Word...

Traduction

Ghost est livré en anglais. Mais il est prévu pour être traduisible. Pour autant la chose n'est pas forcément simple et va demander un peu de patience. Cela se fait au niveau du thème, et donc chaque traduction est propre à chaque thème. C'est plutôt bien expliqué ici et on trouve des thèmes (payant) qui sont traduits. Dans l'absolu il est même possible de traduire le backoffice, de même qu'il sera possible de configurer Ghost en multi langage (ça c'est plus compliqué).

J'ai commencé à traduire le thème de base, Casper. Donc on commence par faire une copie du thème, on ouvre le .zip et on le renomme. Ensuite il va falloir ajouter une répertoire /locales dans le thème et y ajouter à minima un fichier fr.json (qui suit). Le plus fastidieux sera d'aller dans les templates ajouter {{t à gauche des tous les textes et de terminer par }} (donc Page suivante devient {{t page suivante }}). Fastidieux mais pas énorme non plus.

Explications à venir... (ajout des autres ficjiers)

{
    "Back": "Retour",
    "Newer Posts": "Articles plus récents",
    "Older Posts": "Articles plus anciens",
    "Page {page} of {pages}": "Page {page} sur {pages}",
    "Subscribe": "S’abonner",
    "Subscribe to {blogtitle}": "S’abonner à {blogtitle}",
    "Subscribed!": "Abonné !",
    "with the email address": "avec l’adresse e-mail",
    "Your email address": "Votre adresse e-mail",
    "You’ve successfully subscribed to": "Vous vous êtes abonné avec succès à",
    "A collection of posts": "Une catégorie d’articles",
    "A collection of 1 post": "Une catégorie avec un article",
    "A collection of % posts": "Une catégorie avec % articles",
    "Get the latest posts delivered right to your inbox": "Recevez les derniers articles directement dans votre boîte aux lettres.",
    "Go to the front page": "Aller sur la page d’accueil",
    "Latest Posts": "Derniers articles",
    "Message:": "Message :",
    "<a href='{url}'>More posts</a> by {name}": "<a href='{url}'>Plus d’articles</a> par {name}",
    "No posts": "Aucun article",
    " (Page %)": " (Page %)",
    "Read More": "En savoir plus",
    "Read <a href='{url}'>more posts</a> by this author": "Lire <a href='{url}'>plus d’articles</a> de cet auteur",
    "Ref:": "Réf. :",
    "See all % posts": "Voir les % articles",
    "Share this": "Partager",
    "Stay up to date! Get all the latest & greatest posts delivered straight to your inbox": "Restez à jour ! Recevez tous les derniers articles directement dans votre boîte aux lettres.",
    "This post was a collaboration between": "Cet article est une collaboration entre",
    "[email protected]": "[email protected]",
    "1 post": "Un article",
    "% posts": "% articles",
    "1 min read": "1 min de lecture",
    "% min read": "% min de lecture"
}
Les intégrations

Ghost supporte beaucoup d'intégrations de base et il est possible d'en ajouter simplement en modifiant le code. Par exemple si on souhaite ajouter des commentaires Disqus il suffit d'ajouter ce code dans le thème à l'endroit idoine :

<div id="disqus_thread"></div>
<script>
    var disqus_config = function () {
        this.page.url = "{{url absolute="true"}}";
        this.page.identifier = "ghost-{{comment_id}}"
    };
    (function() {
    var d = document, s = d.createElement('script');
    s.src = 'https://EXAMPLE.disqus.com/embed.js';
    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
    })();
</script>

Mais si on préfère que les commentaires soient gérés par Telegram et être notifié par ce canal on configurera cette app et on collera le script au même endroit. Il existe d'autre solutions comme Cove ou mieux Commento qui lui devra être installé localement, dans un autre container Docker par exemple), mais qui présente l'avantage de l'autonomie et de ne pas partager les données des commentateurs.

Pour le reste il est bien sur possible de créer ses propres intégrations en codant un peu... La documentation et l'importante communauté via le forum seront des bonnes sources.

Epilogue

Voila, je cherchait à m'affranchir du mammouth (Wordpress que je déteste) et je crois que j'ai enfin trouvé avec Ghost la bonne solution alternative. En plus comme Ghost est multi auteurs on va peut être en faire un blog communautaire. L'exemple est ici https://ghost.canaletto.fr ! Pour l'instant j'utilise BlogEngine pour ce site et peut être qu'un jour je tenterait la migration, d'autant plus que certains l'ont fait et qu'il existe des convertisseurs.

Enjoy !

Sources

 

Windows Terminal & SSH

Après nous avoir vanté pendant des décennies l'avantage d'un O/S Windows ou tout se passe en mode clic clic, force est de constater ces dernières années que le CLI revient en force, et ce notamment avec PowerShell. Et puis ces dernières années Microsoft nous a pondu Windows Terminal (ou mieux celle-ci) qui supporte bien sur PowerShell, Dos, mais également le client SSH maintenant intégré (timidement) à Windows.

Et c'est celui ci qui m'a intéressé pour remplacer mes anciens clients SSH (j'utilisait Putty ou Bitvise SSH) avec des mots de passe. Sauf que ce client SSH calqué sur ceux que l'on trouve sur Linux (OpenSSH) ne permet bien sur pas de stocker les mots de passe. Et c'est normal. Il va donc falloir apprendre à générer et utiliser des paires de clés SSH, ce qui avec ma culture Windows n'a pas été une mince affaire.

Si ce n'est pas fait on installe le client SSH après avoir installé Windows Terminal (le client SSH peut aussi fonctionner seul, et tout ce qui se rapporte ici à SSH n'est bien sur pas lié à Windows...).

PS C:\> Add-WindowsCapability -Online -Name OpenSSH.Client*

On va donc commencer par générer une paire de clés. Idéalement on se place dans le répertoire .ssh qui se trouve dans le répertoire utilisateur. Cela nous évitera d'avoir à saisir un chemin, car au final les clés devront se trouver dans se répertoire pour simplifier la suite. Il est possible de protéger les clés par une phrase de passe, ou pas.

PS C:\Users\Lionel> cd .ssh
PS C:\Users\Lionel\.ssh> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\Lionel/.ssh/id_rsa): test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test.
Your public key has been saved in test.pub.
The key fingerprint is:
SHA256:vAwnkX2iNyxyqFBVnNVHpzPbdvy6g1VoE/RU8o7+hJ0 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    .o.o.. ...+ +|
|   .  oo  . .o.= |
|  .   o o ..+  oo|
| .   . = o   =++.|
|.   o * S   ..+o+|
| . . o B o   o.+o|
|  .     o    ooE+|
|            . .+ |
|              oo.|
+----[SHA256]-----+

On dispose maintenant de notre paire de clés, test qui est la clé privée et test.pub qui est la clé publique. Si je ne l'avais pas nommée ainsi on se serait retrouvé avec id_rsa et id_rsa.pub qui est le nom de la clé par défaut. Peu importe le nommage, ce qui compte c'est de bien identifier ces deux fichiers.

A partir de là il va falloir installer la clé publique sur le serveur de destination.

A ce stade il est donc nécessaire que le service SSH soit activé sur le serveur distant avec la possibilité de se connecter avec un mot de passe, voire en root (je sais c'est pas bien). Pour cela on édite le fichier qui va bien avec sudo nano /etc/ssh/sshd_config et on redémare le service :

On remplace PermitRootLogin prohibit-password par PermitRootLogin yes 
On remplace PasswordAuthentication no par PasswordAuthentication yes

A noter que quand on a installé une surcouche comme aaPanel, celui ci se charge du SSH au dessus de l'O/S, et on peut télécharger la clé privée à utiliser coté client directement depuis l'interface, et le cas échéant désactiver l'authentification par mot de passe. Inconvénient, pour l'instant aaPanel ne gère que le root qu'il convient donc de sécuriser.

Et c'est là que ça se complique, car si sous Linux il existe le petit outil idoine pour faire ça :

ssh-copy-id [email protected]_host

Rien de tel sous Windows et il va falloir faire avec ce sont on dispose, donc le client SSH et voici la méthode que j'ai trouvée pour installer la clé publique sur le serveur :

PS C:\> cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Une confirmation sera demandée (pour ajouter ce nouveau host à la liste locale) ainsi que le mot de passe SSH du serveur distant. 

A ce stade il est possible de se connecter avec notre clé et il sera possible de désactiver (sans se précipiter) l'authentification par mot de passe en éditant le fichier sshd_config comme vu précédemment.

PS C:\> ssh [email protected]

Et si j'ai plusieurs clés destinées à plusieurs serveurs ?

C'est possible, de deux façons, la première en cli :

PS C:\> ssh -i ~/.ssh/ma_cle_perso [email protected]

Ou plus simplement :

PS C:\> ssh MonServeur

A condition d'avoir créé un fichier config dans /.ssh

Host MonServeur
  User root
  HostName 192.168.20.20
    Port 22
  IdentityFile ~/.ssh/ma_cle_perso

Intégration au menu Windows Terminal

Windows Terminal dispose d'un menu facilement paramétrable auquel on va pouvoir ajouter des raccourcis vers nos serveurs favoris. En cliquant sur paramètres on va directement ouvrir le fichier de paramètres et ajouter une entrée correspondant à un nouveau serveur SSH distant (attention le GUID doit être unique et on peut en générer sur plusieurs sites comme ici).

   {
     "guid":  "{232b7eac-3f44-4560-9250-eee6e97ca4e3}", // Random GUID
       "hidden":  false,
     "name":  "MonServeur",
  "icon":  "c:/users/lionel/pictures/terminal/ps.png", // facultatif
     "commandline":  "ssh 192.168.20.20"
   },

Ainsi il sera très facile d'accéder à un serveur. Dans ce fichier il est également possible de modifier tous les paramètres, mais pour ça je vous laisse lire les mes sources ci-dessous. Et comme il y a du Windows dans l'air, certains n'ont pas pu résister à ajouter des icones dans le terminal...

C'est bien sur anecdotique, mais je suis sur que ça va en amuser certains, voici la marche à suivre :

  1. On télécharge ces polices et on installe la police Caskaydia*
  2. Dans PowerShell on exécute Install-Module Terminal-Icons -Scope CurrentUser
  3. Toujours dans PS : code $profile, et on ajoute cette ligne Import-Module Terminal-Icons
  4. Avec RegEdit : Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont: 000=CaskaydiaCove Nerd Font
  5. Dans les paramètres de Windows Terminal on ajoute "fontFace": "CaskaydiaCove Nerd Font" dans profiles > defaults.

Bonus

Si vous êtes vraiment allergiques à Microsoft (que faites vous sous Windows), il y a une très bonne alternative, Fluent Terminal.

Voilà ! Je n'ai rien inventé et cet article a surtout pour but de me permettre de mémoriser tout ça. Et si ça peut vous aider.... Et si d'aucune ont quelque chose à y ajouter, n'hésitez pas !

Enjoy ;-)

Sources

 

Gérer son serveur Linux avec aaPanel

Comme beaucoup ici le savent à la base je n'ai pas une culture Linux/Unix mais plutôt Windows depuis que j'ai reçu une pile de disquettes Windows 1.03. Et très très longtemps j'ai cru que c'était le graal au point de ne pas trop regarder ce qu'il se passait à coté. Hors si je reste encore convaincu que Linux a peu de chances coté desktop (j'essaie régulièrement), Linux s'est au fil des années affirmé coté serveur, malgré le combat acharné des lobbyistes de Redmond pour laisser penser le contraire et nous laisser croire qu'ils soutiennent l'open source. On ne va pas relancer le débat, ce n'est pas l'objet.

Du coup sous Linux bien souvent je tâtonne pour des choses qui sont pourtant simples. Au fil du temps je suis devenu le roi du copié / collé SSH, tout en essayant de comprendre, ce qui n'est pas toujours évident (au passage je vous conseille vivement Windows Terminal (initiative de quelques convaincus chez MS) qui pour moi est le meilleur client SSH/PS sous Windows).

Bref, pour la faire courte je trouve que Linux manque d'interface. Je ne parle pas d'interface graphique, ce qui alourdirait pour rien un serveur, mais d'interface pour installer et superviser. Alors bien sur il y a cPanel que l'on retrouve chez certains loueurs de VPS, mais d'une part ce n'est pas gratuit et d'autre part pas le plus simple à installer sur un petit serveur isolé.

Et puis un jour j'ai découvert aaPanel. aaPanel c'est une sorte de cPanel minimaliste gratuit et open source, mais qui va permettre de faire en quelques clics de souris les choses essentielles sur un serveur Linux (installer un serveur web, un Wordpress, un FTP, cron, surveillance, etc...). Pour installer aaPanel, une seule ligne de commande suffit et je vous recommande de le faire dès le début sur une Install Linux clean ou rien n'a encore été déployé. Ca prend quelques minutes et vous trouverez plus de détails, notament pour d'autres distributions ici.

Ubuntu :

wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel

Debian :

wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh aapanel

A partir de là ça va mouliner un peu et le système vous donnera les informations de connexion (à changer), et la suite se passera bien sur dans votre navigateur préféré :

Je vous laisse explorer l'interface qui est plutôt intuitive. Je vais juste prendre un exemple. Imaginons que je veuille installer un Wordpress. Il me suffit d'aller dans l'App Store et de choisir One Click Deployement et de sélectionner Wordpress et aaPanel fera le reste après avoir choisit quelques options de personnalisation :

Ensuite il me sera conseillé de créer une destination de sauvegarde (GDrive, S3, FTP...) et de faire un cron de sauvegarde. De même qu'en deux clics je vais pouvoir gérer mes certificats Let's Encrypt. Bien sur il est possible d'héberger  et de gérer plusieurs service sur une même instance aaPanel, que ce soit en direct, voire dans des container Docker. C'est donc la solution idéale à installer sur un VPS...  aaPanel est une solution qui s'enrichit de semaines en semaines. Et si vous voulez poser des questions, il y a bien sur un forum dédié.

Vous allez me dire que ce n'est pas avec ça que je vais apprendre à tout faire en CLI ! Ce n'est pas mon but, et tout ce qui peut me faire gagner du temps, je prends. Et surtout ça va me permettre d'être moins dépendant et ainsi de faire facilement des choses que j'étais obligé de confier à des collègues, tout en comprenant mieux ce que je met en œuvre. Enjoy !

 

 

Calibre Web & Docker...

J'utilise Calibre pour gérer une bibliothèque libre d'ouvrages numériques. Pour la partager avec mes enfants j'avais jadis monté sur un Synology Calibre Web sous Docker, sans trop savoir de quoi il en retournait, mais bon ça fonctionnait depuis deux ans. J'ai donc décidé d'aller plus loin et de monter ça sur une VM Ubuntu

Installer la VM et Docker n'est pas un soucis et il existe plein de tutos. Installer le container Calibre Web n'est pas non plus un problème, par contre ce que j'ai mis des jours à essayer de faire fonctionner c'est relier ma bibliothèque restée sur le Nas. Naturellement j'ai essayé de monter un volume NFS, voire CIFS, si je parvenais bien à lire et écrire dans ce volume depuis le container Calibre-Web, je n'ai jamais réussit à ce que Calibre Web puisse ainsi fonctionner. Il se passe quelque chose que le développeur de cette image ne sait expliquer, et encore moins moi. Mais en informatique, quand on ne sait pas faire quelque chose, on essaie de trouver un contournement, et je me suis donc dit que si le volume NFS monté dans Docker n'était pas exploitable, ça pourrait peut être fonctionner avec un volume NFS monté directement sous Linux. Et banco !

Explications...

Alors on commence par mettre à jour et installer NFS

> sudo apt update
> sudo apt install nfs-common

Puis on crée les deux répertoires locaux que l'on va utiliser pour nos montages :

> sudo apt update
> sudo apt install nfs-common

Et on mappe nos ressources distantes :

> sudo mount 192.168.20.22:/volume2/Public/Books/calibre /nfs/books
> sudo mount 192.168.20.22:/volume2/Public/Books/calibre-web /nfs/books-config

On crée nos répertoires de travail qui seront utilisés par Calibre Web, ça va nous permettre de vérifier que ça fonctionne :

> sudo mkdir -p /nfs/books.config/config
> sudo mkdir -p /nfs/books.config/app
> sudo mkdir -p /nfs/books.config/kindlegen

Et ensuite on édite le fichier /etc/fstab afin de rendre la chose persistante :

. . .
192.168.20.22:/volume2/Public/Books/calibre /nfs/books   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.20.22:/volume2/Public/Books/calibre-web /nfs/books-config    nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Bon, je n'ai bien sur rien inventé et les détails sont par exemple ici.

Maintenant je vais pouvoir créer mon Docker calibre-web après avoir adapté la config à ma sauce, c-a-d que tous mes répertoires de travail seront sur mon Nas :

> docker create --name=calibre-web --restart=always \
-v /nfs/books:/books \
-v /nfs/books-config/config:/calibre-web/config \
-v /nfs/books-config/app:/calibre-web/app \
-v /nfs/books-config/kindlegen:/calibre-web/kindlegen \
-e USE_CONFIG_DIR=true \
-e SET_CONTAINER_TIMEZONE=true \
-e CONTAINER_TIMEZONE=Europe/Paris \
-e PGID=65539 -e PUID=1029 \
-p 8083:8083 \
technosoft2000/calibre-web

J'aurais pu faire ça avec Portainer par exemple, mais c'est finalement bien plus simple de le faire en CLI, surtout avec la masse d'essai que j'ai du faire... D'autant plus que ça ne fonctionne pas, Calibre Web ne fonctionne pas avec le répertoire de config distant. Je me suis donc résolu à le laisser en local, mais pas dans le container mais un répertoire local au cas ou je casserait le container...

> docker create --name=calibre-web --restart=always \
-v /nfs/books:/books \
-v /var/lib/docker/data/calibre-web:/calibre-web/config \
-e USE_CONFIG_DIR=true \
-e SET_CONTAINER_TIMEZONE=true \
-e CONTAINER_TIMEZONE=Europe/Paris \
-e PGID=65539 -e PUID=1029 \
-p 8083:8083 \
technosoft2000/calibre-web

Voilà ! Et comme je ne pense pas pouvoir récupérer mon ancienne configuration, il ne me reste plus qu'à reconfigurer et à créer mes utilisateurs.

Sources

 

 

Unifi Dream Machine Pro

Chez les afficionados de la marque on a généralement tous commencé par un AP WI-FI. Et puis comme ça fonctionnait bien et que c'était beau on s'est laissé aller pour un USG, et là c'était beau, mais pas exempt de bugs et surtout limité en CPU pour exploiter une fibre ou DPI/IPS. Il y a bien eu l'USG Pro, pas vraiment beaucoup plus puissant. Sur tous ces modèles le VPN n'a jamais été le point fort et quant à faire de la publication il n'y a rien d'autre qu'une possible translation de ports entrants comme sur un vulgaire routeur grand public, si cela pouvais se comprendre sur les modèles précédents, on aurait aimé un reverse proxy sur la machine censée nous faire rêver !


(source Unifi)

Mais il n'en est rien, il faut considérer l'UDM Pro, et c'est son positionnement marketing, comme un routeur d'accès avec des services (Contrôleur Unifi, Unifi Protect, contrôle d'accès, téléphonie IP, etc..). Si l'on souhaite publier des services on regardera plutôt du coté de pfsense ou autres Appliance qui font ça très bien. Et si on veut faire du VPN,  ce qui est par contre dans la cible du produit, ce sera IPSEC ou OpenVPN. Zerotier ayant été porté sur la gamme Edge, il y a des chances que quelqu'un fasse le portage sur l'UDM Pro, voire qu'Unifi le fasse, à moins qu'ils ne se laissent tenter par WireGuard...

A 319 € (HT) l'UDM est un produit intéressant qui combine donc plusieurs fonctions : 

  • un USG performant avec fonctionnalités de firewall avancées (IPS/IDS, DPI)
  • un switch 8-port Gigabit et un port 10G SFP+, un port WAN Gigabit et un second port WAN en 10G SFP+ (de quoi y raccorder les nouveaux produits en 2.5 GB et 10 GB actuellement en Early accès et profiter des offre fibre en 2.5 GB ou 10 GB proposées par certains FAI).
  • un contrôleur UniFi (= CloudKey ou CloudKey Gen2+).
  • un NVR UniFi Video avec emplacement disque dur 3.5″ ou 2.5".
  • d'autres contrôleurs à venir (contrôle d'accès, téléphonie IP, et certainement quelques autres projets dans les cartons...).
  • et enfin comme tous les Gen2 de la marque on est en présence d'un petit écran de contrôle en face avant. Petit gadget pour doigts de fée !

Si le contrôleur Unifi intégré pourrait très bien trouver sa place ailleurs (VM, Cloud, ...), l'enregistreur vidéo (Unifi Protect), qui est identique, mais plus puissant que celui que l'on trouve sur le CloudKey 2+, constitue un vrai plus si on veut gérer un grand nombre de caméras et stocker jusque à 14 TB de vidéos de surveillance. A noter qu'il existe chez Unifi un autre NVR plus puissant avec le support de 4 disques.

Le NVR

Ca c'était le bla bla marketing annoncé. Dans la pratique Unifi Protect sur l'UDM Pro me semble bien bogué pour un produit sorti il y plus de six mois. Ca commence avec le disque dur, quelque soit le modèle installé parfois il le voit, parfois pas, et quand il le voit il ne l'exploite pas (impossibilité d'enregistrer). Certains conseillent de le retirer et de le formater en ext4, pas mieux, de juste supprimer les partitions, là il est visible mais non exploitable. Pas très normal qu'on ne puisse pas lancer l'initialisation/formatage depuis l'interface. Et je passe sur les paramètres des caméras qui sont pris en compte depuis l'application mobile mais impossible depuis le portail web qui lui répond que la caméra n'est pas reconnue, alors qu'elle l'est bien sur... A cette heure je regrette ma CloudKey 2+ !

Le routeur

Le routeur d'accès qui lui remplacera l'USG reste à apprécier à l'usage, Ca remplace mais ça reste un USG dont je ne vais pas reprendre le détail ici, un une partie qui mériterais de la part d'Unifi quelques évolutions, avec notamment l'intégration à l'interface de tout ce qui n'apparait pas mais reste faisable en CLI.

2 ports WAN, mais un seul en 10 G !

A noter que le WAN1 qui est en 1 GB est toujours le port principal WAN et que si on souhaite faire du failover on le fera avec le WAN 2 qui lui est en 10 GB (SFP+) ou en 1 GB en utilisant un adaptateur UF-RJ45-1G. C'est d'autant plus bête qu'en utilisation normale on peut imagine une grosse fibre sur le WAN principal et un xDSL en secours. Ca reste du soft, et on peut imaginer une évolution du firmware, et pourquoi ne pas banaliser tous les ports en WAN/LAN comme le fait Cisco depuis plus de 10 ans sur des produits SMB de la gamme RV.

Dans tous les cas, sur le papier, on reste sur de l'agrégation ou du failover utilisable en sortie, et pour l'instant c'est failover only (La seule solution intégrale d'agrégation via un tunnel restant l'OTB d'OVH ou sa version open source openMPTCP).

Quand au WI-FI contrairement à l'UDM, l'UDM Pro qui se place dans un rack n'intègre logiquement pas d'AP. Alors on est tout de même en droit de se demander pourquoi sur un produit qui est censé gérer des AP et des caméras en POE, on ne trouve aucun ports POE ? Je pense simplement qu'à la conception la question a bien du se poser, le marketing l'a emporté en argumentant que cela ferait vendre des commutateurs POE, produits sur lesquels la marge est certainement bien plus importante. C'est dommage car avec quelques ports POE l'UDM Pro aurait été presque parfait ! Business is business !

Un firmware intégré...

Contrairement aux habitudes prises avec Unifi, ici le firmware intègre tout, le firmware de la machine de base proprement dite (USG), le contrôleur Unfi Network, le contrôleur Unifi Protect et les autres applications... Si la bonne idée est de simplifier, on va voir que dans la pratique ce n'est pas si simple tant les versions sont évolutives chez eux...

Coïncidence, mon UDM Pro est arrivé le lendemain du jour ou j'ai mis à jour (par erreur) ma CloudKey 2+ avec le contrôleur avec 6.0.20. Mal m'en a pris car cette version, tout comme la suivante en 6.0.22 est tellement buggées qu'on peut aisément penser qu'elle a été lâchée en release par erreur (un stagiaire ?). Problème, la 6.0.x n'existe pas sur l'UDM Pro qui est en firmware 1.8 qui intègre le contrôleur en 5.x. Dès lors impossible de migrer une installation en 6.x vers du 5.x ! (il ne s'agit pas vraiment d'un process de migration mais une simple opération de backup/restaure, il faut donc que la source ait un niveau de release inférieur ou égal au contrôleur de destination).

Alors j'ai cherché, j'ai fini par installer la 1.8.1 RC3 qui n'apporte hélas pas de contrôleur en 6.x ... et pour finalement découvrir qu'il était possible de mettre à jour le contrôleur d'UDM Pro en SSH. Et pourquoi pas avec un bouton upload ? On a parfois l'impression qu'il y a chez Unifi pas mal d'ingés de l'ancien monde, ceux pour qui le CLI est et reste la seule option possible... Ce qui n'est pas très logique pour un constructeur qui se démarque avant tout par ses magnifiques interfaces !

ssh udm ...
unifi-os shell
cd /tmp
curl -o "unifi_sysvinit_all.deb" https://dl.ui.com/unifi/x.xx.xx_version/unifi_sysvinit_all.deb
dpkg -i unifi_sysvinit_all.deb 
rm unifi_sysvinit_all.deb 

Et comme je n'ai pas reçu ce produit du service de presse pour le tester, mais que je l'ai acheté pour l'utiliser, me voilà donc en principe dans la possibilité de migrer. Je fait un export du contrôleur et un export du NVR depuis la CK 2+ (je ne me pose pas la question d'exporter les vidéos de la CK 2+, mais il parait que c'est possible...). Ensuite je débranche l'USG et la CK 2+, c'est important. A partir de la il me suffira en principe d'importer le backup du contrôleur sur l'UDM Pro et ensuite le backup du NVR.

Dans la pratique c'est un peu plus compliqué. Si l'importation se passe bien le redémarrage annoncé ne s'opère pas. Je le fais manuellement au bout d'une heure. Mais au retour je ne peux me connecter localement, ni sur l'ancienne l'IP (192.168.1.1), ni sur l'IP de configuration importée (192.168.210.1). Par contre je peux le faire à distance (à noter que c'est un nouveau portail d'administration). Et là en fouillant je constate deux choses :

  • Le port 11 (SFP) qui assure la liaison avec mon USW-48 a perdu sa configuration en 1 GB FDX (et non il n'est pas auto sense...)
  • Que si l'IP LAN a bien été importée dans la configuration, c'est toujours l'ancienne IP qui répond, et de fait le système ne voit pas les autres équipements importés (SW, AP).

Réactiver le port SFP en FDX est facile, pour que l'IP LAN soit bien prise en compte j'ai finalement rentré l'ancienne à la place de la nouvelle, appliqué la configuration, et ensuite remis la nouvelle, et oh merveille ça fonctionne. Oh merveille mon cul, car c'est vraiment n'importe quoi.

A ce stade tout semble fonctionner, bien que dans cette version non finalisée (6.0.22) certaines choses sont à faire dans la nouvelle admin (VPN) tandis que pour d'autres actions il faudra revenir à l'ancienne interface. beta bug beta bug ! Enfin, tout sauf que si le WAN2 sait bien fonctionner en failover, contrairement à l'USG il est ici impossible de la basculer en agrégation (pas de réponse à ce sujet pour l'instant).

Il y a également depuis le 6.0.x des équipements WI-FI qui décrochent. C'est par exemple systématique sur les ampoules Xiaomi/Yeelight, j'ai tout retourner sans trouver de contournement. Et pour mémoire, quand on migre d'une 5.x vers une 6.0.20 il y a un Vlan only network - 0 qui se crée, je pense que c'est lié à la nouvelle façon de gérer le WI-FI Guest, en attendant il empêche toute connexion WIFI normale et il faut donc l'effacer ou le le changer d'ID (en 100 par exemple). Sur le 6.0 le WI-FI est géré différemment et on peu créer plus de 4 SSID, ce qui est par exemple plus souple pour les différencier en 2 ou 5 Ghz. et en isoler certains (IoT par exemple).

Domotique

Pour information les intégrations Unifi et Unifi Protect que l'on utilise dans Home Assistant fonctionnent et reconnaissent bien l'UDM. Petit hic il faut les réinstaller car je n'ai pas trouvé (pas trop cherché non plus) la façon de changer l'IP du contrôleur et du NVR (dans HA). Le résultat est que certaine entités peuvent changer de nom et qu'il faudra s'adapter.

Accéder au contrôleur depuis l'extérieur

Le plus simple pour administrer le contrôleur intégré à l'UDM est bien sur de passer par le cloud Unifi et l'application. Mais on peu vouloir y accéder directement depuis le port WAN. Pour cela on va commencer par suivre ces recommandations et ainsi créer une règle WAN Local :

Action : Accept
IPv4 Protocol : TCP
Rule Applied : Before pre-defined rules
Destination : Create a new port group with port 443 in the group

A partir de là on peut accéder au contrôleur sur son port par défaut (443) depuis l'extérieur. Sauf que le port par défaut n'est pas une bonne idée et on peut vouloir en faire autre chose. On va donc créer une règle dans Port Forwarding qui redirigera par exemple le port 8443 sur l'IP LAN du contrôleur, et ainsi on y accède via ce port. Au même endroit on peut créer une autre règle pour rediriger le port 443 vers une autre IP du LAN, et si on en a pas besoin on la redirige sur 127.0.0.1 afin de bloquer l'accès externe via le 443... Je sais c'est un peu tordu par les cheveux mais je n'ai pas trouvé mieux ! En ce qui me concerne j'en ai eu besoin pour cette solution de backup. Attention toutefois à verrouiller cet accès sur des IP sources pour plus de sécurité.

Conclusion

Par la force des choses je me retrouve :

  • en prod avec du matériel qui tourne intégralement sur des versions beta. Une pratique à éviter.
  • avec un enregistreur qui n'enregistre plus rien...
  • des équipements WI-FI qui décrochent.
  • avec une foule de bugs dont une agrégation de ports inopérante.

Vous l'aurez compris, la machine à rêver ne m'a pas fait rêver mais perdre beaucoup de temps et me retrouver dans une situation très instable !

  • EDIT 22/09/2020 14:00 : la v6.0.23 du contrôleur est sortie et ça règle bien plus de choses qu'annoncé. Dont mes déconnections avec les ampoules Xiaomi/Yeelight. En fait non, mais ça tient quelques heures au lieu de 5 minutes...
  • EDIT 22/09/2020 17:30 : S'agissant de l'enregistrement sur détection de présence (Protect) et de l'enregistrement il semblerait qu'un paramètre n'ait pas été pris en compte lors de la migration ou qu'il soit nouveau (sur chaque caméra, Recording/Motion Events/Motion Algorithm), il faut faire un choix et aucun des deux n'était sélectionné. Dès lors qu'un disque dur est bien reconnu on a donc bien les enregistrements.
  • EDIT 23/09/2020 04:37 : Il est possible d'intervertir WAN1/WAN2 afin que WAN1 (le principal) profite de l'interface 10 GB sur WAN1 (et sans passer par SSH). Par contre pour l'instant seul le support du mode Failover, pour le Load Balancing (supporté sur l'USG) il faudra repasser plus tard.
  • EDIT 23/09/2020 18:22 : En parlant de plus tard, le SNMP, un peu la base sur un routeur, est caché (New Seetings + search snmp), mais pour autant il ne fonctionne pas. Il parait que apt-get ... etc... On se marre !
  • EDIT 23/09/2020 19:30 : Passage de la 6.0.23 en release et sortie de la 6.0.24 en beta. Ca turbine chez Uniquiti, il faut dire que ça grogne partout ! Nouveaux firmwares UAP/USW. Nouvelles déconnexions sur les ampoules Xiaomi.
  • EDIT 29/09/2020 17:17 : S'agissant des ampoules Xiaomi, j'ai essayé tous les paramètres possibles et imaginable ainsi que les version beta de firmware sans obtenir de résultat. J'en conclu que quelque chose a vraiment changé dans cette version qui a plus une allure de beta que de release. J'ai donc honteusement ressorti un vieil AP Netgear...
  • EDIT 29/09/2020 17:17 : A la version 1.8.4 du firmware les choses sont rentrées dans l'ordre.

J'espère pouvoir échanger avec Unifi et qu'ils sauront m'apporter des réponse satisfaisantes à tous ces problèmes. Je mettrais bien sur à jour cet article énervé en fonction de.

Sources

 

Configuration automatique POP/IMAP

Quand on configure sous Outlook un compte Exchange, Office 365, Google et quelques autres fournisseurs, celà se fait tout seul, il suffit de rentrer son adresse mail et son mot de passe et un obscur mécanisme nommé AutoDiscover se mets en place et le tour est joué. Vous imaginez qu'il y a un peu de mécanique derrière cette automatisation. Que ça utilise MAPI ou EAS, votre fournisseur le fera pour vous et si vous gérez votre propre serveur Exchange on premise vous trouverez plein de documentation en ligne sur ce sujet.

Et en POP3/IMAP4 ?

C'est pareil, certains gros services de mail proposent cette automatisation (Google par exemple), par contre si vous gérez votre propre serveur de messagerie ou que vous utilisez votre nom de domaine sur les serveurs de Gandi ou OVH par exemple, il y a peu de chances que celà se fasse tout seul et il faudra que vos utilisateurs renseignent manuellement les noms de serveurs IMAP/POP/SMTP, les différents ports en SSL/TLS, etc... C’est fastidieux, d'un autre âge et c'est également pitoyable que des fournisseurs tels OVH ou Gandi laissent leurs services de mail en l'état, ils ne proposent d'ailleurs toujours pas de connexion EAS pour les mobiles.

Il ne reste donc plus qu'à faire le travail.

La première solution consiste à aller déposer un fichier /autodiscover/autodiscover.xml sur un serveur que l'on adressera dans le DNS avec un CNAME du genre autodiscover.domain.tld. Ça peut suffire dans certains cas, mais à cause d'un bugg dans Outlook on ne récupérera que le username sans le domaine. Et si le serveur l'exige il faudra alors terminer la configuration manuellement. Ce n'est pas très propre et tant qu'à automatiser autant aller au bout des choses.

La seconde solution consiste à mettre un peu de code et la façon la plus simple que j'ai trouvée, j'y ai tout de même passé 8 heures..., est de le faire en PHP. On monte un petit serveur web avec du PHP, on crée un enregistrement DNS autodiscover.domain.tld qui pointe dessus et on le configure avec un certificat valide (un Let's Encrypt par exemple). Ce point est important car sans SSL Outlook ne reconnaîtra rien. On teste que ça fonctionne et que le certificat est valide. Dans la racine on crée un fichier autodiscover.php, en gros c'est surtout un XML, la partie PHP ne servant qu'à récupérer l'adresse mail pour la transformer en LoginName. Bien sur on adapte aux besoin, POP/IMAP, etc...

<?php
//get raw POST data so we can extract the email address
$data = file_get_contents("php://input");
preg_match("/\<EMailAddress\>(.*?)\<\/EMailAddress\>/", $data, $matches);

//set Content-Type
header("Content-Type: application/xml");
?>
<?php echo '<?xml version="1.0" encoding="utf-8" ?>'; ?>

<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
    <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
        <Account>
            <AccountType>email</AccountType>
            <Action>settings</Action>
            <Protocol>
                <Type>IMAP</Type>
                <Server>mail.gandi.net</Server>
                <Port>993</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName><?php echo $matches[1]; ?></LoginName>
                <SPA>off</SPA>
                <SSL>on</SSL>
                <AuthRequired>on</AuthRequired>
            </Protocol>
            <Protocol>
                <Type>SMTP</Type>
                <Server>mail.gandi.net</Server>
                <Port>465</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName><?php echo $matches[1]; ?></LoginName>
                <SPA>off</SPA>
                <Encryption>TLS</Encryption>
                <AuthRequired>on</AuthRequired>
                <UsePOPAuth>off</UsePOPAuth>
                <SMTPLast>off</SMTPLast>
            </Protocol>
        </Account>
    </Response>
</Autodiscover>

Ensuite on va faire en sorte que le serveur retourne le contenu XML nécessaire à Outlook quelque soit l'URL ou la casse utilisée. Si dans le monde Windows il n'y a pas de différence entre les majuscules et les minuscules, ce n’est pas le cas sous Linux. Et Microsoft à codé en dur dans ses clients de messagerie tantôt en majuscule tantôt en minuscule, voire souvent la première lettre en majuscule, il va falloir ajuster... Pour y palier on va utiliser la fonction REWRITE et coller ça dans un fichier .htacess si on utilise un serveur Apache :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ autodiscover.php [NC,L]

Ou le convertir (ici) et le placer dans le fichier de configuration si on utilise un serveur Nginx :

if (-e $request_filename){
	set $rule_0 1;
}
if ($request_filename ~ "-l"){
	set $rule_0 1;
}
if (-d $request_filename){
	set $rule_0 1;
}
if ($rule_0 = "1"){
#ignored: "-" thing used or unknown variable in regex/rew 
}
	rewrite ^/.*$ /autodiscover.php last;

Il ne reste plus qu'à tester sous Outlook ou Courrier (Mail) sous Windows 10.

Attention toutefois, sous Outlook 2016/2019 Microsoft a changé les règles du jeu. Le pernicieux but est certainement de pousser les clients vers Office 365, ce système s'appuie sur la fonction Simplified Account Creation introduite après le rachat de la société Acompli (Outlook mobile). Ce système gère les domaines Microsoft, ceux enregistrés sur Office 365 et quelques autres selon leur importance et de façon plus ou moins obscure. On ne trouve nulle par le moyen d'ajouter un domaine à ce service et certaines discutions qui en parlaient sur les forums Technet sont maintenant effacées. On peu donc penser à des ajouts de gré à gré pour les sociétés sous contrat avec Microsoft.

il ne faut donc pas ajouter un compte depuis Outlook mais contourner la chose en passant par l'ancien panneau de contrôle (WIN+R+Control) tant qu'il existe. C'est d'autant plus curieux que ça fonctionne très bien sous l'application Courrier de Windoiws 10, qui au passage s'est bien améliorée. Il existe toutefois un moyen simple de désactiver Simplified Account Creation via le registre ou par GPO.

Et si j'ai plusieurs domaines ?

Dans tous les cas il faudra un serveur web par fournisseur de messagerie. Par contre ayant plusieurs domaines chez Gandi je vais pouvoir tout concentrer sur un seul serveur. Pour y parvenir, deux solutions :

Avec un enregistrement SRV par domaine

Je crée un serveur web générique, par exemple avec comme adresse

autodiscover-gandi.domain-gen.tld

(SSL activé) et dans le DNS de mes domaines je crée un enregistrement SRV de type

_autodiscover._tcp 1800 IN SRV 10 10 443 autodiscover-gandi.domain-gen.tld. 

La résolution sera un peu plus longue car c’est la dernière chose que recherchera Outlook, mais ça fonctionnera.

Avec un certificat multiple sur le serveur

Dans ce cas je fais pointer tous mes domaines sur le même serveur, par contre j'ajoute tous ces domaines (autodiscover.domain1.tld, autodiscover.domain2.tld...) au certificat du serveur, ce qui du reste est très facile avec Let's Encrypt.

Et Thunderbird ?

Même si plus grand monde utilise ce client, il existe une possibilité (que je n'ai pas testé et je suis preneur de vos retours). Et cette possibilité semble plus simple car elle permet de base de gérer plusieurs domaines que l'on appellera depuis le client avec une url : 

http://autoconfig.domain.tld/mail/[email protected]

Je ne pense pas qu'il soit utile de disposer de PHP, un simple fichier XML faisant l'affaire :

/wwwroot/domains/domain.tld/public_html/autoconfig/mail/config-v1.1.xml

<clientConfig version="1.1">
 <emailProvider id="domain.tld">
   <domain>domain.tld</domain>
   <displayName>%EMAILADDRESS%</displayName>
   <incomingServer type="imap">
     <hostname>mail.domain.tld</hostname>
     <port>993</port>
     <socketType>SSL</socketType>
     <username>%EMAILADDRESS%</username>
     <authentication>password-cleartext</authentication>
   </incomingServer>
   <outgoingServer type="smtp">
     <hostname>smtp.domain.tld</hostname>
     <port>587</port>
     <socketType>STARTTLS</socketType>
     <username>%EMAILADDRESS%</username>
     <authentication>password-cleartext</authentication>
   </outgoingServer>
 </emailProvider>
</clientConfig>

Une dernière chose, pour faire tout ça j'ai utilisé aaPanel, j'en parlerais bientôt mais je vous encourage à découvrir !

Sources

Etant donné que je n'ai bien sur rien inventé, voici de la lecture...