Jeedom SSL avec HAPROXY en passthrough

Bonjour tout le monde,
je viens de changer mon NUC et pour fêter ça, je passe sur une nouvelle VM Jeedom en V4.
Quelle claque par rapport à la V3… :grin: (pourquoi j’ai attendu tant de temps???)

Vu que j’héberge aussi une VM Nextcloud et que j’ai besoin du SSL pour Telegram, j’ai donc mmonté une VM HAPROXY qui renvoie le flux sur mon SNI Jeedom vers Jeedom et le reste vers l’autre VM.

Tout marche à la perfection sauf sur un bémol : je n’arrive plus à avoir la double authentification sur ma page d’accès même lorsque je viens de l’extérieur.
En effet, suite au passage dans HAPROXY, l’ip d’origine est remplacée par celle de mon routeur (donc du LAN) et du coup, Jeedom ne demande plus la seconde authetification.

J’ai bien recherché partout pour forcer HAPROXY à ne pas switcher l’IP mais celà n’est pas possible en passthrough (uniqement en OFFLOADING mais dans ce cas, je perds l’accès Telegram puisque je suis en HTPP entre HAPROXY et Jeedom) .

J’en viens finalement à ma question : es-il possible d’activer la double auth dans tous les cas de figure, soit par le biais d’une option, soit en attendant une prochaine màj du Core, soit en modifiant moi-même le fichier php de la page d’accueil?

Un grand merci par avance pour toute réponse :wink:

Lionel

Salut,
Ton haproxy devrait rajouter un header X-forwarded-for avec l’ip d’origine du client en principe. Et de mémoire le core vérifie entre autre ce header.
Si de fait ton proxy ne fourni pas l’ip client ça va être un problème

Hello Mips,
merci pour ta réponse!

Est-ce que tu parles de X-Fordarded-For?
Si oui, ce header n’est pas utilisable en dehors du mode http.
Le souci est que si je passe en http, je laisse tomber le passthrough et donc Telegram ne fonctionnera plus puisque j’entre dans la VM en http…

A bien avoir retourné le pb, il ne me reste que la solution d’activer la double auth dans tous les cas de figure.

Lionel

Pour Telegram ce n’est pas un problème, tu exposes ton ip publiques en HTTPS via HA Proxy et redirige vers Jeedom en http. De là tu ajoutes les headers que tu veux sans casser la requête.

1 « J'aime »

J’allais dire la même chose : ou termine-tu le ssl Pour l’instant ? Sur jeedom ?

Ça veut aussi dire que pour l’instant tout tes clients ont l’ip de ton routeur (dont l’ip est dans la whitelist de jeedom) ? C’est un problème ça, tu ne sauras pas ban une ip qui spam etc

Telegram n’est pas un problème je confirme.
C’est ma config : NPM qui est en frontal avec tout le https, en internet mon nginx jeedom est en http car zone de confiance.

Oulaaaa, merci à tous pour toutes ces réponses.
En fait j’avais ça par le passé :
HAPROXY installé sur ma (vieille) VM Jeedom en offloading il reçoit tout le traffic https, le décode avec le certificat let’s encrypt puis renvoie en http sur chacune des VM concernées en fonction du suffixe (/ => Jeedom ou /nextcloud => Nextcloud)
Ca marchait très bien pour le https dans Jeedom et Nextcloud et Telegram impecc aussi.

Sauf que maintenant, j’ai mis HAPROXY sur une VM séparée…et là Telegram ne marche plus (il ne récupère plus les clients et j’ai une erreur dans les logs : pas moyen de contacter l’url telegram sous Jeedom avec le token )
De plus Jeedom me dit aussi que la config externe est en erreur

Oui, en effet…j’ai bien les requêtes en provenance du routeur qui arrivent sur Jeedom :frowning:

Finalement, j’ai retenté HAPROXY en offloading avec traitement du flux https via HAPROXY et suivi en http sur le LAN et désormais …
ça marche!

Je ne comprends pas pourquoi ça ne passait pas avant avec Telegram et même sous la conf Jeedom.

Merci à vous tous!

Attention Telegram utilise uniquement les ports 443 ou 8443 pour le HTTPS, si tu ne savais pas.

En effet, je tablais uniquement sur le 443 via le routeur mais je n’avais pas pensé que je pouvais aussi ouvrir le 8443 au besoin.

Merci

Salut, @EFCAugure tu pourrais me montrer ta conf pour Jeedom avec HAPROXY ? Tout marche chez moi mais je ne peux répondre par Telegram je n’ai pas de retour sur Jeedom.

Hello GiDom
Voici mon fichier de conf haproxy :

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend front-https
    bind *:443 ssl crt /etc/ssl/letsencrypt no-sslv3
    mode http
    option httplog
    acl jeedom-https-acl hdr(host) MON_DOMAINE_PUBLIC.fr
    use_backend jeedom if jeedom-https-acl

backend jeedom
    mode http
    option httpchk
    option forwardfor except 127.0.0.1
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server jeedom  IP_LAN_JEEDOM:80/ maxconn 32

J’ai enregistré un nom de domaine et j’ai un certificat Let’s Encrypt qui valide la connexion en entrée sur la même VM que HAPROXY.

C’était vraiment galère pour trouver enfin une conf qui marche…

Lionel

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.