✅ Accès de l’extérieur en HTTPS avec Nginx Proxy Manager

Le protocole HTTPS vous permet d’avoir une connexion sécurisée entre Home Assistant (votre serveur) et le navigateur sur lequel vous êtes connecté (votre client) en cryptant les données qui transitent entre eux. L’utilisation de ce protocole devient de plus en plus indispensable et les navigateurs Web commencent à refuser de se connecter à des sites en HTTP.
Si vous souhaitez utiliser un nom de domaine (NDD) Freebox et le fournisseur de certificats Let’s Encrypt, vous pouvez vous diriger vers l’article Accès de l’extérieur en HTTPS avec un NDD Freebox et Let’s Encrypt, et celui-ci pour DuckDns, nous allons voir ici comment utiliser un autre solution via l’add-on Nginx Proxy Manager.

Niveau requis

  • Débutant / Intermédiaire / Avancé

Matériels nécessaires / Matériels utilisés / Prérequis

  • Version de HA : v2020.12.1,
  • Avoir un nom de domaine que je noterai <mon-ndd> dans la suite de ce tutoriel,
  • connaitre le modèle de son routeur.

L’architecture

Voici un schéma (merci à @Pozzi :wink:) pour expliquer le flux que nous allons mettre en place.

Configuration de Home Assistant

Nettoyage de la configuration

Il faut vérifier qu’aucune autre installation de certificat ne viendra en conflit avec l’installation que nous allons mettre en place. Nous allons vérifier les fichiers de configurations YAML via File Editor (voir Installer File Editor et modifier vos fichiers de configuration)

Via le Menu latéral > File Editor, choisissez le fichier config/configuration.yaml

Si vous voyez les lignes surlignées en bleu, commentez les en ajoutant en début de ligne le caractère # :
image

Si vous avez fait des modifications dans le fichier configuration.yaml, cliquez sur le bouton sauvegarder en haut à droite image

Pour être sûr que votre configuration est toujours valide, dans le Menu latéral > Configuration > Contrôle du serveur > VERIFIER LA CONFIGURATION.

Accès interne

Comme on a pu le voir dans le schéma précédent, il faut pouvoir accéder à Home Assistant via l’URL suivante :

http://<ip_hote_ha>:8123

<ip_hote_ha> étant une adresse IP interne sous la forme 192.168.x.x.

Pour pouvoir accéder à Home Assistant via cette URL, il faut la configurer dans menu latéral > Configuration > Général > URL interne puis cliquez sur ENREGISTRER.

Vérifiez que vous avez accès à votre Home Assistant en ouvrant votre navigateur et en renseignant dans la barre d’adresse :

http://<ip_hote_ha>:8123

En remplaçant <ip_hote_ha> par l’adresse IP du serveur hébergeant votre Home Assistant.

:information_source: Renseigner l’URL externe n’est pas obligatoire puisque c’est Nginx qui sera le point d’entrée du flux HTTPS.

Prise en compte des modifications

Dans le Menu latéral > Configuration > Contrôle du serveur > VERIFIER LA CONFIGURATION.

Si la configuration est valide, cliquez sur REDEMARRER

Routage des ports (NAT)

En suivant le tutoriel Redirection des ports, ajouter les redirections :

  • vers le port 80 de votre hôte de Home Assistant
  • vers le port 443 de votre hôte de Home Assistant

Installation

L’installation est assez simple, si vous maitrisez la langue de Shakespeare, vous pouvez suivre ce tutoriel.
Sinon je vais vous détailler la procédure d’installation.

MariaDB

Il faut installer MariaDB si vous ne l’aviez pas déjà pour autre chose. C’est un prérequis à l’installation de Nginx Proxy Manager (sa configuration est sauvegardée dans la Base de données MariaDB).

Suivez le tutoriel Ajouter une extension Officielle ou Non Officielle sur Home Assistant en installant un add-on Officiel et en remplaçant Mosquitto Broker par MariaDB.

Avant de cliquer sur START, n’oubliez pas de modifier le utilisateur / mot de passe dans la configuration de l’add-on MariaDB en cliquant sur l’onglet Configuration de cet add-on.

mariaDbConfig

Une fois configuré, cliquez sur SAVE puis revenez sur l’onglet Info pour cliquez sur START.

Vérifiez les logs en cliquant sur l’onglet Logs, pour être sûr que tout c’est bien passé. N’hésitez pas à cliquer sur REFRESH en bas à gauche.

Nginx Proxy Manager

Il faut installer le nouvel add-on Nginx Proxy Manager.

Procédez de la même manière que précédemment avec MariaDB.

Aucune configuration n’est nécessaire pour cet add-on, donc une fois installé, vous pouvez cliquez sur START.

Vérifiez bien évidemment les logs pour être sûr que tout se déroule bien.

Une fois installé, revenez sur l’onglet Info, puis cliquez sur OPEN WEB UI.

Renseignez le compte admin@example.com / changeme pour votre 1ère connexion.

Il vous sera demandé de renseigner le compte Admin puis un nouveau mot de passe (surtout ne l’oubliez pas !).

Configuration

Le nom de domaine

Pour accéder à l’interface de Nginx Proxy Manager, il faut soit :

  • passer par Supervisor > Dashboard > Nginx Proxy Manager > OPEN WEB UI
  • si ça ne fonctionne pas, essayez via l’URL http://ip_hote_ha:81/login

Renseignez le compte et mot de passe Admin que vous avez mis à jour dans le précédent paragraphe Installation Nginx Proxy Manager.

Dans l’interface de Nginx Proxy Manager, cliquez dans le menu sur Hosts

proxyManagerHosts

Puis Proxy Hosts

proxyManagerProxyHosts

Puis sur Add Proxy Host.

Dans la nouvelle fenêtre New Proxy Host, renseignez comme suit :

  • Domaine Names : le nom de domaine que vous avez <mon-ndd>, ne pas oubliez de cliquer sur add <mon-ndd>
  • Scheme : http
  • Forward Hostname / IP : l’IP de l’hôte de Home Assistant (voir URL Interne)
  • Forward Port : 8123
  • Websockets Support : coché

proxyManagerNewProxyHost

Cliquez sur SAVE

Testez si vous pouvez accéder à votre Home Assistant via votre nom de domaine en HTTP en cliquant sur le nom de votre domaine dans la colonne SOURCE.

Le passage en HTTPS

Si vous pouvez vous connecter à votre Home Assistant via votre nom de domaine, vous pouvez passer à la suite.

Nous allons maintenant passez votre Home Assistant en HTTPS en cliquant sur les 3 petits points complètement à droite sur la ligne de votre SOURCE.

Cliquez sur Edit,

proxyManagerMonProxyHostEdit

puis sur l’onglet SSL, choisissez Request a new SSL Certificat dans SSL Certificate puis cochez Force SSL, activez I Agree ... puis Save.

Let’s Encrypt va vous fournir un certificat sur votre Home Assistant.

Nettoyage

La redirection du port 80 n’étant plus nécessaire, il est bon de la supprimer.

Depuis la 2021.7

Il est maintenant nécessaire d’ajouter des clés dans la configuration de HA afin d’autoriser l’utilisation d’un reverse proxy.

Dans le fichier de configuration de HA configuration.yaml ajouter :

#configuration.yaml
[...]

http: #si cette balise n'existe pas, ajoutez la, sinon ajouter seulement la suite (pas de duplication)
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.18.0.1
[...]

Si vous avez du mal trouver l’@ip à renseigner, procédez comme suit :

  1. Renseigner l’adresse 10.0.0.1 ou 172.16.0.1 ou 192.168.1.1
    Ces adresses correspondent aux premières @ip privées
  2. Assurez-vous d’avoir accès au log de HA home-assistant.log
  3. Une fois le reverse proxy en fonctionnement, redémarrez HA
  4. Accédez au fichier de log home-assistant.log
  5. Vous verrez apparaitre plusieurs lignes indiquant depuis quelle @ip le reverse proxy est hébergé :
2021-07-10 23:46:36 ERROR (MainThread) [homeassistant.components.http.forwarded] Received X-Forwarded-For header from an untrusted proxy 172.18.0.1
  1. Remplacer l’@IP dans le fichier de configuration par celle que HA vous indique
  2. Redémarrez HA

Voilà, c’est fini

Vous pouvez désormais accéder à votre Home Assistant via https://<mon-ndd> et ce, depuis vos navigateurs, comme sur Home Assistant Companion (en modifiant l’URL dans Configuration de l'application > URL de Home Assistant).

Une question, un problème

Besoin d'aide ? Cliquez ici !

Remerciement(s)

Annexes

Les sources

Suivi des modifications

  • 10/07/2021 : Ajout des clés use_x_forwarded_for et trusted_proxies nécessaire depuis la 2021.7 @Clemalex
  • 30/01/2021 : Passage en article officiel (:hacf_tuto: ) @Sylvain_G
  • 15/01/2021 : Ajout du schéma de l’architecture @Sylvain_G
  • 30/12/2020 : Ajout lien Home Assistant Companion & chapitre Nettoyage, Mise à jour des sources @Sylvain_G
  • 29/12/2020 : Initialisation de l’article @Sylvain_G
7 « J'aime »