Forum général.général Ignorer une redirection HTTP

Posté par (page perso) . Licence CC by-sa.
Tags : aucun
2
11
août
2019

Bonjour,

Je souhaite accéder à un équipement qui a une interface web.
Lorsque je suis sur le réseau local tout fonctionne bien : http://1.2.3.4/ et j'ai l'interface du bouzin.
Lorsque je suis à l'extérieur, je passe par une redirection PNAT d'un modem/routeur ADSL. Je dirige un navigateur web vers http://example.com:1234 que le PNAT traduit par 1.2.3.4:80

Malheureusement cet équipement effectue une redirection HTTP en précisant son adresse IP locale. Dès la première requête le navigateur est redirigé vers http://1.2.3.4/html/index.html?etc
Du coup ça ne fonctionne pas derrière un PNAT.

L'équipement ne gère pas l'IPv6.
Sur le site de l'équipement il n'y a qu'un Linux embarqué (BusyBox avec ssh, netfilter, netcat. Pas possible d'installer quoi que ce soit).
L'équipement effectue la redirection pour toutes les requêtes, donc pas possible d'obtenir quoi que ce soit depuis l'extérieur même si on change manuellement l'adresse dans la barre d'adresse du navigateur.

La seule solution que je vois est de mettre en place un VPN de type pont (couche 2 du modèle OSI), mais cela m'oblige à ajouter un équipement sur place et à maintenir un morceau d'infrastructure pour ça.
Quitte à avoir un Raspberry sur place, autant utilise Lynx via SSH ou Firefox via VNC, ce sera beaucoup plus simple.

Vous voyez une autre solution ?

  • # Un reverse proxy

    Posté par . Évalué à 3.

    Si tu met un reverse proxy devant l'équipement, Tu peux réécrire la réponse de l'équipement pour remettre le port 1234 dans l'URL.

    Je crois que haproxy fait ça très bien.

    • [^] # Re: Un reverse proxy

      Posté par . Évalué à 3. Dernière modification le 11/08/19 à 19:43.

      Le problème semble plus la redirection vers une IP interne au LAN.
      Peut-être utiliser HaProxy comme mentionné par NeoX, mais en tant que Frontend. Ça signifie que ton NAT redirigera vers ton HaProxy qui lui jouera l'intermédiaire entre ton équipement (qui sera le Backend) et toi.
      HaProxy permet de "fake" le nom de domaine envoyé au Backend il me semble (infos), ceci afin que ton équipement n'envoie pas la redirection HTTP en pensant que tu le contactes bien depuis 1.2.3.4.
      Un autre avantage, si ton équipement n'est accessible qu'en HTTP, tu pourras tout de même utiliser HTTPS depuis ton HaProxy : ainsi la liaison entre toi et HaProxy sera chiffrées (mais pas sur ton LAN entre ton HaProxy et ton équipement).

      🇪🇺

      • [^] # Re: Un reverse proxy

        Posté par . Évalué à 3. Dernière modification le 11/08/19 à 20:13.

        Cette config basique mono serveur devrait faire le boulot.

        listen mon_equipement
                bind *:80
                        # si tu veux disposer du HTTPS, c'est la ligne suivante
        #       bind *:443 ssl crt /etc/haproxy/certs/www.helloworld.com.pem
                mode http
                balance roundrobin
                        # Transmission des infos du vrai clients (ptete pas obligatoire)
                        http-request add-header X-Forwarded-Proto https if { ssl_fc }
                        option forwardfor
                        # On force https (le navigateur du client va passer de HTTP a HTTPS tout seul) - nécésite d'écouter sur le port 443 (voir ligne plus haut)
        #       acl http      ssl_fc,not
        #       http-request redirect scheme https if http
                        # On check la présence en ligne ou non du serveur (suffit de retirer le "check" dans la ligne du serveur pour qu'il n'effectue plus de check). Les check en mono serveur n'ont d’intérêt que si tu veux suivre les statistiques.
                option httpchk GET http://1.2.3.4/html/index.html HTTP/1.0
                        # Gestion des cookies
                        cookie SERVERID insert indirect nocache
                        # Modification du host (le backend croira que le client contacte 1.2.3.4)
                http-request set-header Host "1.2.3.4"
                        # Ton équipement
            server mon_equipement1 1.2.3.4:80 weight 1 check cookie mon_equipement1
        

        La ligne importante c'est http-request set-header Host "1.2.3.4"

        🇪🇺

    • [^] # Re: Un reverse proxy

      Posté par (page perso) . Évalué à 1.

      Si tu met un reverse proxy devant l'équipement

      Si je mets un reverse proxy, alors je dois ajouter un ordinateur sur le site distant. Donc autant mettre un bête Lynx ou Firefox, c'est bien plus facile à configurer (en gros il n'y a rien à faire).

      Si le reverse proxy est à l'extérieur du site, ça ne fonctionne pas puisque l'équipement redirige sans cesse vers son IP locale.

      • [^] # Re: Un reverse proxy

        Posté par (page perso) . Évalué à 2.

        l'équipement redirige sans cesse vers son IP locale.

        J'ai oublié la suite : donc toutes les requêtes HTTP venant de l'extérieur ont comme réponse une redirection, il n'est pas possible d'obtenir autre chose tant qu'on ne fait pas les requêtes directement vers http://1.2.3.4/etc

        • [^] # Re: Un reverse proxy

          Posté par . Évalué à 3.

          AMHA, le problème ne peut être réglé que sur l'équipement en question dans BusyBox. Tu ne peux rien y installer mais peut-être y modifier certaines configurations : BusyBox foruni son propre démon httpd avec un fichier /etc/httpd.conf. Si c'est cela qui est utilisé, il y a sûrement un moyen de modifier cette redirection réécriture.

          • [^] # Re: Un reverse proxy

            Posté par (page perso) . Évalué à 3. Dernière modification le 12/08/19 à 13:31.

            L'équipement a atteindre n'est pas équipé de BusyBox (enfin, je n'en sais rien, il a juste une interface web). C'est un autre truc sur le même site qui a BusyBox.

            Cet autre truc est un Raspberry Pi 3B+ avec OpenMPTCProuter (en gros, pas modifiable sans y passer des heures. Et il faudra refaire la cross-compilation lors de chaque mise à jour).
            Il y a probablement moyen d'utiliser un binaire de Lynx sans dépendances et de le mettre dans /tmp. Cela nécessite juste de faire un scp ou wget lorsque j'en ai besoin, cela ne coûte donc qu'un copié-collé d'une ligne de commande.

  • # Greasemonkey

    Posté par (page perso) . Évalué à 2.

    Est ce que ce sont les liens dans l'interface web qui utilisent l'IP? Si c'est ça, peut être que tu peux bidouiller avec un plugin dans Firefox, du genre greasemonkey, pour remplacer http://1.2.3.4 par http://example.com:1234 à la volée dans le code HTML de la page (pour les liens et les formulaires).

    Un LUG en Lorraine : https://enunclic-cappel.fr

    • [^] # Re: ModHeader

      Posté par . Évalué à 4. Dernière modification le 11/08/19 à 23:43.

      ModHeader et ajouter comme Header Host 1.2.3.4 pour son domaine perso.
      Ne fonctionne que s'il n'y a pas de check de l'IP ni de ré-écriture des URL.

      🇪🇺

      • [^] # Re: ModHeader

        Posté par (page perso) . Évalué à 3.

        Tout simplement.
        Testé à l'instant, ça fonctionne a priori dans tous les recoins de l'interface web.

        • installation de ModHeader
        • ajout d'une règle « Host --> 1.2.3.4 »
        • et c'est tout
        • comme ça modifie tous les en-têtes Host, il faut désactiver la règle pour accéder au reste du web Idéalement il faudrait que je regarde comment filtrer afin que cela n'agisse que vers example.com:1234
        • [^] # Re: ModHeader

          Posté par (page perso) . Évalué à 3.

          comme ça modifie tous les en-têtes Host, il faut désactiver la règle pour accéder au reste du web Idéalement il faudrait que je regarde comment filtrer afin que cela n'agisse que vers example.com:1234

          Ou l'utiliser avec un autre profil/navigateur dédié.

          « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

    • [^] # Re: Greasemonkey

      Posté par (page perso) . Évalué à 3.

      Est ce que ce sont les liens dans l'interface web qui utilisent l'IP?

      Hélas non, c'est une redirection HTTP.
      Comme indiqué plus haut, la seule et unique réponse qu'on a depuis l'extérieur est donc forcément une redirection.

  • # Configurer la UI de l'équipement.

    Posté par . Évalué à 2.

    Vu que ton équipement semble être animé de soft opensource, tu as peut être moyen de modifier le comportement de l'appli web qui pose problème pour qu'elle fasse une redirection vers 1/ une IP configurable ou 2/ vers le contenu du header Host: …

  • # Re-Ignorer une redirection HTTP

    Posté par . Évalué à -1.

    Ignorer une redirection HTTP ? ça c'est de l'info! please, j'aimerai aussi savoir :)

  • # Modifier le header envoyé par le navigateur

    Posté par . Évalué à 2. Dernière modification le 12/08/19 à 13:50.

    Si j'ai bien compris il suffit de modifier le header envoyé par ton navigateur.
    Le champ "Host" doit toujours sortir avec 1.2.3.4:80 alors que sans modification il sort avec example.com:1234

    Par contre je ne sais pas comment faire. C'est avec une extension du navigateur ou avec un proxy.

    Edit : voxdemonix a déjà fait la même réponse, je n'avais pas vu.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.