Accès à distance freeboxos et proxy inverse

Salut à tous,

En commençant ce message je ne savais pas trop exactement ou j’allais… En fin de compte, ça se termine en un genre de tuto… qui ne marche pas :wink:

Mais je compte bien sur votre aide pour faire marcher mon affaire !!

Etant abonné free, j’ai essayé (c’est peut-être là mon erreur) de tirer au maximum parti des possibilités qui me sont offertes, et donc de me passer de duckdns par exemple.

Bon alors voilà à ce que j’ai fait.

Pre-requis

  1. Faire une demande de mondomaine.freeboxos.fr

  2. Créer sur le routeur freebox un bail DHCP statique pour home assistant (pour avoir une IP fixe sur le reseau local)

  3. Rediriger le port 80 (toutes IP entrantes) vers le port 80 (IP de home assistant)

  4. Installer l’add-on Let’s Encrypt, et le configurer pour mondomaine.freeboxos.fr avec challenge HTTP

  5. Demarrer Let’s Encrypt pour obtenir et installer les certificats SSL (l’add-on doit s’arreter tout seul, et devient inutile à partir de là: ne pas activer le démarrage automatique)

  6. Désactiver la redirection du port 80 (ne pas totalement effacer: il faudra réactiver périodiquement, voir remarques)

Option #1: sans proxy inverse

  1. Rediriger le port 443 (toutes IP entrantes) vers le port 8123 (IP de home assistant)

  2. Configurer les certificats SSL dans configuration.yaml:

http:
# Let's Encrypt certificates
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
  1. Configurer https://mondomaine.freeboxos.fr comme URL externe de home assistant

  2. Redemarrer home-assistant

Notes:

Option #2: avec proxy inverse

  1. Rediriger le port 443 (toutes IP entrantes) vers le port 443 (IP de home assistant)

  2. Installer l’add-on NGINX Home Assistant SSL proxy, et le configurer avec mondomaine.freeboxos.fr

  3. Démarrer NGINX à la main et vérifier dans les log que tout va bien, activer aussi le démarrage automatique

  4. Configurer le serveur proxy dans configuration.yaml:

http:
# NGINX
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
  1. Configurer https://mondomaine.freeboxos.fr comme URL externe de home assistant

  2. Redémarrer home-assistant

Notes:

Remarques

  1. Les deux options sont mutuellement exclusives. On peut s’amuser à jongler entre les deux, mais il faut désactiver l’une avant d’activer l’autre (par example désactiver les redirections de ports, commenter cetaines lignes dans configuration.yaml, etc…)

  2. Pour l’option 1 comme pour l’option 2, on peut choisir d’ouvrir un autre port que le port 443 (port HTTPS part default). En clair on redirige XYZ vers 8123 pour l’option 1 ou bien XYZ vers 443 pour l’option 2. Du coup, l’accès sécurisé se fait par https://mondomaine.freebox.fr:XYZ ce qui cache un peu plus notre affaire…

  3. Il faut périodiquement mettre à jour les certificats SSL qui ne sont valides que pour 90 jours. Il suffit de rouvrir le port 80 (le temps du challenge HTTP), de démarrer l’add-on Let’s Encrypt, et de refermer le port. La mise à jour des certificats peut etre automatisée (voir Blueprint for automatic renewal of a Let’s Encrypt certificate) mais pas l’ouverture/fermeture des ports (autant que je sache…)

Ce qui ne marche pas… encore ?

Pour commencer, j’ai vraiment cru que tout fonctionnait parfaitement. Je pouvais accéder à https://mondomaine.freebox.fr comme espéré.

Sauf que ce n’est pas vraiment le cas. Ça ne fonctionne que depuis une machine qui est sur mon réseau local, par example un smartphone ou un PC connecté en Wifi ou en Ethernet. Tout semble indiquer que l’accès est bien externe (les signaux sortent, puis re-rentrent): si je ferme le port 443, alors l’accès à https://mondomaine.freebox.fr est perdu (comme on peut s’y attendre : ça sort mais ça ne rentre plus)

Par contre sur une machine vraiment externe, depuis un smartphone sans Wifi par example… ça ne marche pas :frowning: Ou est-ce que je me plante ?

La clef du mystère

Pour que ca marche, il faut s’assurer que l’accès extérieur se fasse en IPv4 et pas en IPv6
Plusieurs options (au choix):

  • désactiver IPv6 sur son smartphone ( How to disable IPv6 on Android? )
  • prendre un vrai nom de domaine (pas *.freeboxos.fr) et générer les certificats SSL avec l’add-on Let’s Encrypt.
  • prendre un sous-domaine mondomaine.duckdns.org: en partant de l’option #2, il suffit de pas grand chose pour tout faire marcher. On remplace mondomaine.freeboxos.fr avec mondomaine.duckdns.org à quelques endroits clefs (configuration de NGINX, configuration de l’URL d’acces à HA) et le tour est joué ! Cerise sur le gateau (j’ai mis longtemps à comprendre): l’add-on (pas le service DuckDNS en tant que soi) communique automatiquement l’IP de la freebox à DuckDNS (en cas de changement) et prend aussi en charge la génération et la mise à jour automatique des certificats SSL (et cela sans jamais ouvrir le port 80 !), donc pas besoin de d’inquiéter de ça. L’add-on Let’s Encrypt devient inutile…

En conclusion:

Bah oui… c’était bien là l’erreur :slight_smile:

Références

1 « J'aime »

Alors quelques petites approximation comme lets encrypt attention il faudra le relancer sous 60 jours avant que le certificat expiré au bout de 90 jours , fermer le port 80 ne sert a rien a part t’emmerder lors du renouvellement certificat , tu peux créer une automation qui redémarre_r toutes les semaines l’addon let’s encrypt pour renouveller le certificat avant qu’il expire

Utiliser un port autre que 443 est tout à fait possible mais encore une fois n’apporte pas grand chose

Alors sinon petite subtilité des adresses freeboxos.fr ces domaines exposent l’ipv4 et IPv6 de ta box ,donc si tu disposes d’un smartphone avec une connexion qui supporte IPv6 c’est possiblement le problème qui fait que ton accès externe ne fonctionne pas
Ton smartphone tapant préféretiellement sur l’IPv6

Il est bien plus judicieux d’utiliser un ‹ ‹ vrai › › domaine du style OVH qui coûte quelques euros par ans
Les domaines fezeboxos sont fait pour accéder à la Freebox pas pour faire ce que tu en veux

Tres juste, merci de la petite piqure de rappel :wink:
Je n’ai pas mis mon nez dans les détails, mais j’ai trouvé de bonnes pistes pour automatiser totalement le renouvellement:

Pour automatiser oui sans doute, c’est la poisse.
Par contre d’un point de vue sécurité… Je ne suis pas expert du tout en la matiere, mais ce que je lis un peu partout, c’est que moins on ouvre de ports et mieux c’est. De ce point de vue, la meilleure solution pour un accès externe est le VPN, car il n’y a pas besoin d’ouvrir un seul port… (mais ca condamne l’utilisation des assistants vocaux, qui necessitent absolument un nom de domaine)

Ah tres intéressant, merci !! :slight_smile:
Est-ce qu’il y a moyen de confirmer cette théorie d’une facon ou d’une autre ? Est-ce que je peux désactiver l’acces IPv6 de la box et/ou de mon smartphone ?

aucun soucis car le port est ouvert mais rien n’écoute derrière, donc autant dire que la porte est fermée

ce n’est pas une théorie c’est un fait
un simple nslookup sur ton ndd freeboxos t’en donnera la confirmation

voici sur mon ndd

il doit être possible de désactiver l’ipv6 sur le smartphone

En effet: How to disable IPv6 on Android? | Nordlayer Help

Après ce petit changement… Ca marche :wink:
Merci du coup de pouce… Je pense que sans toi j’aurais pu chercher longtemps !!

par contre je ne le ferai pas à ta place et je prendrais un vrai nom de domaine :wink:

Merci du conseil, je l’accèpte bien volontier !
Deux petites questions bonus par curiosité (sans intention de mettre en pratique, mais juste pour comprendre):

  1. Si je faisais une demande de IP fixe V4 full-stack, est-ce que mondomaine.freeboxos.fr continuera quand meme à exposer une IPv4 et une IPv6 ? (ce qui ne résoudra donc pas le probleme d’accès si je comprends bien)
  2. Y-a-t-il des effets indésirables à désactiver le IPv6 sur mon smartphone ?

oui, comme dit plus haut les domaines freeboxos sont fait pour accéder a la freebox et a ses services

aucunes certitudes, surement pas mais bon, moi je ne le ferai pas justement parceque j’expose certains de mes services en ipv6

Oui c’est ce qu’il y a de mieux a faire. C’est une règle de base en matière de cybersécurité, c’est la logique du moindre privilège, on limite les accroches au seul élément indispensable. Un port ouvert à l’extérieur ça veut dire qu’il est écoutable et répond aux appel (et on est en plus sur le port de base, le 80). Il laisse donc apparaitre des éléments qui peuvent être intéressants. De plus on raisonne pas au coup par coup en cybersécurité mais sur une robustesse permanente (rien ne met à l’abris d’erreur humaine, de configuration, d’attaque opportune…).

En résumé c’est pas une porte fermée mais une porte sans poignée à l’extérieure mais non verrouillée. Donc si quelqu’un installe le levier qui va bien…

il est écoutable pendant le renouvellement du certificat donc 30s tous les 60 jours, puisque le reste du temps rien est en écoute sur ce port
donc la porte est grande ouverte mais elle donne sur un mur

Tu confirme donc une des règles de base de la cybersécurité.

cela sera toujours le cas, ça reste le plus gros danger

Ce sujet a été automatiquement fermé après 2 jours. Aucune réponse n’est permise dorénavant.