Installation Jeedom sans exposition directe à Internet + zero-touch login

Hello à tous,

Après 10 ans d’utilisation de Jeedom, j’ai eu envie de sécuriser un peu mon accès ET de le rendre bien plus simple d’utilisation, notamment pour la partie connexion. Je me suis dit qu’après quelques heures de boulot, j’allais vous partager le résultat, étant resté bien trop discret dans la communauté ces dernières années.

Objectifs de la mise en place :

  • Ne pas ouvrir de port sur la box Internet
  • Éviter toute exposition directe de Jeedom à Internet (ni en direct, ni derrière un reverse proxy perso)
  • Utiliser une authentification forte via Google (OAuth)
  • Récupérer l’identité de l’utilisateur connecté dans Jeedom
  • Obtenir une expérience fluide et sans mot de passe (zero-touch)

J’ai utilisé l’excellent Cloudflare pour faire tout ça. Ce n’est pas à la portée de tout le monde, mais avec un peu d’habitude des technos web, ça se fait assez rapidement. Disclaimer : c’est mon métier, j’ai peut-être donc un biais.

Voici ce que j’ai mis en place :

  • Jeedom en local sur un Raspberry Pi (un vénérable Pi 3…)
  • Un domaine géré par Cloudflare (domaine : quelques euros par an, Cloudflare : gratuit !)
  • cloudflared installé localement (ou sur une autre machine du LAN)
  • Cloudflare Access (Zero Trust) pour sécuriser l’accès via login Google
  • Injection des headers d’identité dans Jeedom pour activer le SSO

Étapes principales :

1. Jeedom sans aucune ouverture de port

Jeedom est uniquement accessible sur le LAN. Pas de port 80/443 ouvert, pas de reverse proxy, pas de NAT. Le serveur est totalement cloisonné du web.

2. Domaine et DNS

Mon domaine superjeedom.com est géré par Cloudflare, avec proxy CDN activé.

3. Tunnel cloudflared

Installation du binaire selon la doc officielle.

Création d’un tunnel avec liaison entre superjeedom.com et l’adresse LAN de Jeedom (par exemple 127.0.0.1 si cloudflared tourne sur la même machine). Bien cocher l’option Enforce Access JSON Web Token (JWT) validation si on veut que Cloudflare gère bien toute la sécurité à notre place.

4. Authentification via Cloudflare Access

Création d’une application self-hosted dans Cloudflare Zero Trust avec le bon domaine et une politique d’accès restreinte aux emails des utilisateurs de la maison.

5. Authentification via Google OAuth

Pour cela, il faut créer une application dans la Google Cloud Console pour obtenir un client ID + secret OAuth. Gratuit sauf si vous voulez héberger des centaines de Jeedom !

Résultat : l’accès est protégé par un login Google avant même d’arriver sur Jeedom. Jeedom pas à jour, vieux PHP, etc, ne sont plus un problème à partir de la, ce qui est souvent le principal piège du self-hosted (j’en fais depuis 15 ans, je connais ! En tant qu’ancien responsable sécurité, ça devenait primordial pour moi).

6. Récupération de l’identité dans Jeedom

Cloudflare injecte automatiquement le header Cf-Access-Authenticated-User-Email: jean-michel@gmail.com.

Pour le faire reconnaître par Jeedom :

  • Créer un utilisateur dans Jeedom avec comme login : l’adresse email (c’est une des limitations que je n’ai pas réussi / eu le temps de dépasser… Mais bon, si ce n’est que ça…)
  • Aller dans Système > Configuration > Sécurité
    • Activer l’authentification SSO
    • Définir l’entête HTTP à : HTTP_CF_ACCESS_AUTHENTICATED_USER_EMAIL (oui, c’est la partie qui m’a pris 2 heures à debug : Jeedom via sa config Apache semble faire une sacrée magie de réécriture…)

Et voilà. Si l’utilisateur est à la fois autorisé dans Cloudflare ET déclaré dans Jeedom, il est connecté automatiquement, sans mot de passe.

C’est fini ! Bénéfices :

  • Jeedom n’est pas exposé sur Internet.
  • Connexion fluide et sécurisée via Google (et hop, le voisin qui a accès à l’alarme sans qu’on n’ait besoin de lui faire 3 heures d’explication ou qu’il note le mot de passe quelque part qu’il oubliera aussitot)
  • TLS géré automatiquement par Cloudflare
  • Et c’est extensible à d’autres services locaux

N’hésitez pas si vous avez des questions techniques (tunnel, DNS, OAuth, config Apache…) ou si vous voulez des extraits de configuration plus détaillés !

16 « J'aime »

Hello,
Désolé de faire remonter ce « vieux » topic, superbe tuto.

J’ai eu la même envie (=sécuriser mon réseau), j’avais déjà du nginx-proxy-manager pour sécuriser un minimum mon archi, mais je voulais faire « plus simple » en passant par cloudflare.

Ta partie sur le SSO est top.

Néanmoins, j’ai une question : Comment faites-vous pour by passer l’accès pour les applications extérieures qui ont besoin à ce que l’accès se fasse justement sans authentification ? Je pense à JeedomConnect, ou l’intégration Google Home, les appels API extérieures etc…

Car pour l’instant, je vois pas comment faire.

Merci d’avance pour vos retours

Bonjour, j arrive a votre niveau avec un peu de retarde mais je me retrouve avec les mêmes problématiques. avez vous trouvé une solution ? merci