Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/08/2011, à 09:29

Havany

Intégrer une page html d'un réseau local dans une page html "externe"

Bonjour,

    J'ai installé un serveur de streaming vidéo, diffusant les images de ma webcam avec motion. Le problème de motion est qu'il est impossible de protéger l'acces à la webcam par un mot de passe (à part bien sûr pour la confuiguration).
Hors je voudrais diffuser cette vidéos sur mon site web de manière sécurisé.
Pour cela j'ai pensé à intégré cette video dans une page de mon site web, en utilisant <iframe>. Mais le problème c'est que la balise iframe, va demander au client de résoudre elle même le nom de domaine de la page que l'on cherche à intégrer, mais je voudrais que ce soit le serveur qui s'occupe d'effectuer la requête vers cette page et puis qu'il l'intègre à sa page.

Concrètement ce code fonctionne très bien depuis l'extérieur :

<iframe runat="server" frameborder=0 name="cam" target="target" src="http://<adresse externe de mon serveur>:8081" height="1024" width="780" scrolling="no"></iframe>

Mais bien évidemment celui-ci ne fonctionne pas depuis l'extérieur:

<iframe runat="server" frameborder=0 name="cam" target="target" src="http://localhost:8081" height="1024" width="780" scrolling="no"></iframe>

Au final je voudrais donc pouvoir limiter l'accès à "motion" uniquement au réseau local ou carrément à localhost (motion et apache sont sur la même machine) en fermant le port 8081 depuis l'extérieur, et faire en sorte que apache lui même s'occupe de récupérer la page de "motion" pour l'intégrer à sa propre page php, comme ça je pourrais utiliser le système d'authentification de mon site afin d'en limiter l'accès :

le client demande l'affichage de la page "cam" -> le serveur demande à son tour l'affichage de la page de motion en utilisant sont propre système de résolution de nom -> puis il génère la page "cam" en y intégrant le résultat de sa requête à motion -> et il l'envoie au client.

Comment puis-je faire pour arriver à mes fins ?

Je ne suis pas sûr que mon approche soit la meilleure, donc si vous pensez à une toute autre solution que celle-ci, je suis aussi preneur. L'important c'est de ne pas avoir accès directement à la page motion et d'obliger les client à passer par apache pour accéder à la cam.

Merci d'avance...

Hors ligne

#2 Le 01/09/2011, à 05:45

dudumomo

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Pourquoi ne pas tout simplement mettre un user+mdp a la page en question.
Ce qui est du coup ultra simple.


Idipops, le réseau social des prestataires de services !
Tutorial and news on how to host your own server: http://freedif.org
Aidez la recherche avec BOINC et rejoignez la Mini-Team Libristes: http://www.boinc-af.org | http://libristes.boinc-af.net

Hors ligne

#3 Le 01/09/2011, à 08:28

Havany

Re : Intégrer une page html d'un réseau local dans une page html "externe"

dudumomo a écrit :

Pourquoi ne pas tout simplement mettre un user+mdp a la page en question.

C'est ce que j'ai fais dans la page qui affiche le iframe. Mais comme je l'ai dit, cette page reste accessible directement. Un simple scan de port montre que le port 8081 est ouvert, puis en ouvrant une page http://<mon_nom_de_domaine>:8081, on accède directement à la caméra sans authentification. C'est pour cela que je voudrais trouver une balise qui intègre une page en faisant en sorte que le serveur lui même fasse la requête, afin de pouvoir fermer le port depuis l'extérieur.

En attendant j'ai une solution de contournement mais qui n'est pas très propre. J'ai installé un proxy web sur mon serveur, puis j'ai mis dans le iframe l'adresse du proxy + la requête vers l'adresse locale de mon serveur :

<iframe runat="server" frameborder=0 name="cam" target="target" src="http://<adresse externe de mon serveur>/proxy/index.php?q=<requête vers mon serveur local>" height="1024" width="780" scrolling="no"></iframe>

Mais cette solution n'est d'une part pas très élégante et ne résout le problème qu'à moitié. En effet je n'ai pas réussis à protéger la page proxy par mot de passe (les cookies ne semblent pas parvenir jusqu'à la page intégré par la balise iframe) et je voudrais éviter l'utilisation de htaccess. Du coup il suffit d'ouvrir la page du proxy et de connaître le nom ou l'adresse locale de ma machine pour afficher la caméra sans mot de passe.

L'idée du proxy est pas mal mais il faudrait que je comprenne mieux le code (il y a du javascript entre autre :s), afin d'écrire une page php qui ne ferait uniquement la requête vers la page de la cam. Ainsi, ne pouvant transmettre une requête au proxy, ça serait parfait niveau sécurité, mais ça manquerai quand même d'élégance.

Je suis persuadé qu'il existe une manière de faire plus jolie, mais bon si déjà ça fonctionne et que c'est sécurisé, c'est très bien...

Si ce n'est pas très clair il faut lire la page concernant motion, histoire de comprendre le fonctionnement général (même si cela reste assez opaque).

Merci.

Hors ligne

#4 Le 02/09/2011, à 18:18

jcezanna56

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Bonjour,

Je ne suis pas sur d'avoir tout compris mais il me semble que le problème tient à un comportement différent demandé au serveur suivant que l'on est en intra ou en extra ?

Il me semble que le php devrait simplement résoudre cela.
Pour la gestion du mot de passe, il suffit de le mettre dans un fichier en dehors de l'arboresence du serveur http et de gérer le encodage en php de la valeur du mot de passe.
et le mot de passe n'est pas demandé dans le cas 'intra'.

Désolé si je répond à côté.

Bonne journée

Hors ligne

#5 Le 25/05/2012, à 12:31

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Bonjour.

je suis dans la même situation avec le même logiciel.
J'ai écris mon sujet sur :

http://forum.ubuntu-fr.org/viewtopic.php?id=932451

Si le flux provenait de Apache comme ceci :
http://leip:8081, ça serait facile avec htaccess
mais motion n'est pas un serveur Apache.

Il doit y avoir un moyen et je cherche depuis un bon
moment.

Je suis preneur s'il existe une solution.


Ubuntu server 12.04.1

Hors ligne

#6 Le 25/05/2012, à 13:19

Havany

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Bonjour,

En fait comme solution, j'ai téléchargé un proxy en java, que j'ai intégré à mon site puis, je l'ai utilisé pour faire une requete locale à motion. Puis j'ai récupéré la requete (l'adresse comportant la requete), qui est encodée (donc c'est un peu sécurisé vu que l'dresse n'apparait pas en clair). Esuite j'ai modifié le code source du proxy web en java pour qu'il ne puisse pas recevoir d'autre requete (en black-listant tout le reste --> tout interdire sauf telle adresse). Enfin j'ai intégré à ma page web, la requete motion au travers du proxy. Et ça marche !
J'aurais préféré éviter de passer par un proxy web et utiliser une fonction interne à apache, mais malheureusement je n'ai pas trouvé de pareilles fonctions.
Je me demande comment fait google pour intégrer les pages, par exemple quand on cherche une image ?

Ensuite pour m'amuser un peu j'ai créé un script PHP qui lance ou arrete motion :
- Si motion n'est pas démarré, un bouton apparait "lancer la cam"
- Si il l'est alors c'est un bouton "éteindre la cam.
Pour ça il faut que motion soit lancé par www-data.

Si ça peut t'aider, mais par contre je n'ai rien sous la main donc je ne peux pas te donner plus de détails, j'en donnerai ce soir si j'ai le temps...

Bonne journée

PS : Par contre du coup ce n'est pas la page motion qui est protégée par un mot de passe, mais le proxy. Ou du moins dans mon cas il profite de la partie privée de mon site qui est protégée par un mot de passe (via mysql et cookies).

Dernière modification par Havany (Le 25/05/2012, à 13:21)

Hors ligne

#7 Le 25/05/2012, à 13:53

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Oui, ça m'intéresse votre solution Havany.

Entre-temps, j'ai trouvé ce tuto que je vais tenter, je ne sais pas s'il s'agit de la même chose.
un tuto ici

Merci d'avoir répondu rapidement.

Si je trouve une autre solution plus poussée, je l'expose ici.


Ubuntu server 12.04.1

Hors ligne

#8 Le 25/05/2012, à 14:09

Havany

Re : Intégrer une page html d'un réseau local dans une page html "externe"

dancom a écrit :

Entre-temps, j'ai trouvé ce tuto que je vais tenter, je ne sais pas s'il s'agit de la même chose.
un tuto ici

Ben chapeau bas ! Parce que je crois que c'est exactement ce que je cherchais. C'est propre, élégant, parfait quoi ! Je testerai ça dès que j'ai le temps.
En attendant tiens nous au courant si cette solution est bonne, et je mettrai le sujet sur résolu...

Hors ligne

#9 Le 25/05/2012, à 21:01

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Bonjour. J'explique ce que j'ai fait pour résoudre le problème :

1- création d'un certificat ssl auto-signé
2- activer le proxy http

fichier virtualhost du domaine :
ServerName domaine.com
DocumentRoot /home/internet/public_html/domainecom

SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key
SSLEngine on

<Proxy *>
  AuthType Basic
  AuthName "Espionnage de mon chat"
  AuthUserFile /home/internet/public_html/domaine/.htpasswd
  Require user demo
  Order deny,allow
  Allow from all
</Proxy>

ProxyPass /motion/ http://127.0.0.1:8081
ProxyPassReverse /motion/ http://127.0.0.1:8081
ServerSignature off
-------

Le 127.0.0.1 doit être ça. Indiquer à netfilter avec iptables le port 443 à ouvrir et aussi dans le routeur.Faut ajouter l'écoute 443 dans la config de apache Listen 443 et virtualhostname.

domaine.com devient > https://domaine.com
et pour faire fonctionner motion : https://domaine.com/motion/

Donc, ce qu'on fait :

<img src="https://domaine.com/motion/">

dont ton index.php

C'est expliquer vraiment bref. On peut y revenir pour plus de précision.

Pour ce qui est de PHP pour activer motion et le désactiver, ça m'intéresse.

Le proxy_http te permet de lier ton ip de motion. Il n est pas sécurisé mais
il n'est pas accessible sans https://domaine.com/motion/

Il faut activer le module ssl et proxy_http en passant.

C'est vraiment génial ce truc. On peut mettre un mot de passe sécurisé
un peu plus avec DIGEST mais j'ai pas encore approfondi sur cela. Je vais
y revenir. Si le topic reste ouvert.

Bien à toi,
Dan


Ubuntu server 12.04.1

Hors ligne

#10 Le 26/05/2012, à 07:03

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Pour le suivi voici ce que je constate:

Après avoir fait les étapes de cette section:
http://doc.ubuntu-fr.org/tutoriel/secur … 2_avec_ssl

La seule étape que je n'ai pas fait est ceci et je cite:
«On peut créer son certificat SSL auto signé en installant le paquet openssl. FIXME → Il est aussi possible d'installer ca-certificates, mais ça ne semble pas utile dans le cas d'un certificat auto-signé. »

En gros, lors de la connexion avec les navigateurs, ça indique ceci :

a - l'identité de ce site n'a pas été approuvé
b - le certificat du serveur n'est pas approuvé
c - Votre connexion est chiffré ......à 256bits

avec Firefox 3.6 et 12, puis chome 14, ça indique ces avertissements.
avec IE8, ça indique aussi sauf que ça bloque tout simplement la page.

avec IE8, https://domaine.com/motion/ ça fait comme s'il téléchargeait sans fin.
(probablement un problème MIME) je sais pas et j'aimerais bien en connaître la cause.

Donc, 3 questions :

1- Peut-on éviter les avertissements?
2- Peut-on régler le problème MIME (l'entré dans la page-même du sous-domaine, c'est ok)?
3- Le transite sur internet n'est pas sécurisé mais la page elle est vraiment?
4- Les étapes http://doc.ubuntu-fr.org/tutoriel/secur … 2_avec_ssl inclu l'auto signature?
5- comment vérifier que j'ai bien auto-signer le certificat?

Si quelqu'un peut nous expliquer ces questions, ça sera une bonne chose.

Dan


Ubuntu server 12.04.1

Hors ligne

#11 Le 31/05/2012, à 08:14

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Havany a écrit :

Ensuite pour m'amuser un peu j'ai créé un script PHP qui lance ou arrete motion :
- Si motion n'est pas démarré, un bouton apparait "lancer la cam"
- Si il l'est alors c'est un bouton "éteindre la cam.
Pour ça il faut que motion soit lancé par www-data.
(via mysql et cookies).

Bonjour, j'aimerais bien en savoir plus sur ceci.


Ubuntu server 12.04.1

Hors ligne

#12 Le 31/05/2012, à 23:46

yeste64

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Bonjour à vous deux. Je viens d'installer motion et ai moi aussi ma cam en streaming. Cependant, j'aimerais aussi la sécuriser. Je me demandais si on ne pouvait pas simplement indiquer à un htaccess que l'on désire une authentification lors de l'accès au port concerné ?

Excusez-moi si je me plante complètement. Merci d'avance de votre réponse..


Si l'important n'est pas de gagner mais de participer, alors pourquoi compte-t-on les points ?

Hors ligne

#13 Le 01/06/2012, à 01:32

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

yeste64 a écrit :

Bonjour à vous deux. Je viens d'installer motion et ai moi aussi ma cam en streaming. Cependant, j'aimerais aussi la sécuriser. Je me demandais si on ne pouvait pas simplement indiquer à un htaccess que l'on désire une authentification lors de l'accès au port concerné ?

Excusez-moi si je me plante complètement. Merci d'avance de votre réponse..

Bonjour.

Motion est un serveur qui n'est pas Apache pour accepter les fichiers .htaccess et .htpasswd.  Donc, il faut faire un intermédiaire afin d'aller chercher ton serveur qui fonctionnera qu'en local vu que tu ne mettra pas ton port 8081 accessible dans ton routeur.

Apache a un module proxy_http qui te permettra d'aller chercher l'adresse locale avec le port 8081 pour te permettre de diffuser ta cam et d'y placer ton fichier .htpasswd.

Faire le pont entre ton local et apache :

dans ta configuration d'apache httpd.conf (ou fichier virtualhost) :

<Proxy *>
  AuthType Basic
  AuthName "Espionnage de mon chat"
  AuthUserFile /home/internet/public_html/domaine/.htpasswd
  Require user demo
  Order deny,allow
  Allow from all
</Proxy>

ProxyPass /motion/ http://127.0.0.1:8081
ProxyPassReverse /motion/ http://127.0.0.1:8081

Ainsi, sur le net, c'est avec apache que tu vas aller chercher ta cam ainsi :

<img src="http://domaine.com/motion/">

ou simplement directement dans la barre d'adresse. Un mot de passe te sera demandé vu que tu l'exige.

Tu peux sécuriser le transite internet via SSL pour obtenir à la place https pour sécuriser les connexions à distance. J'ai testé mais j'ai pas trouvé que ça me rendait service à cause que le port était accessible à l'adresse ip du FAI chose que je ne voulais pas. Je voulais qui soit accessible que sur un sous-domaine particulier. La partie qui me fait défaut.

En passant, c'est pratique si on ne veut pas diffuser directement un port sur le net tout en passant par un autre. Au lieu de diffuser le port 8081, c'est seulement celui de 80 et seulement ce port qui est ouvert dans le routeur. En local, il va être ouvert mais pas accessible en dehors de ton réseau à cause du routeur.

Précision: un avantage marqué puisque tu peux personnaliser ta page. En passant, Motion arrête de prendre des images si on est pas devant la caméra (inactivité devant la cam). Un autre truc serait de placer le chemin des images dans /etc/tmp/ de manière à pouvoir les récupérer ou les purger lorsque on redémarre la machine. Le seul détail que je ne sais pas, c'est si le /etc/tmp/ se vide sans redémarrage.

Espérant aider.

Dernière modification par dancom (Le 01/06/2012, à 01:40)


Ubuntu server 12.04.1

Hors ligne

#14 Le 01/06/2012, à 06:27

yeste64

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Merci beaucoup pour ta réponse, j'y vois beaucoup plus clair maintenant. Et je pense que ça va servir à beaucoup de monde ce que tu viens d'expliquer.

Si je comprends bien, pour mettre en place le SSL, tu as été obligé d'ouvrir le port concerné sur ta box ? Mais est-ce vraiment nécessaire de mettre en place un SSL si on exige une authentification en htaccess ?


Si l'important n'est pas de gagner mais de participer, alors pourquoi compte-t-on les points ?

Hors ligne

#15 Le 01/06/2012, à 11:41

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Le port 443 doit être ouvert dans ton routeur (box).

Tout ce que tu fais sur le net peut être analysé avec des outils spécialisés. Donc si ta connexion est sécurisé avec SSL, le contenu sera illisible par d'autres. Selon mon test, le https était actif lors de la diffusion du flux de la cam elle-même donc possiblement les images serait sécurisées (je m'avance ici sans vraiment savoir).

Y'a une question de certificat qui sera auto-signé par toi-même ou le navigateur qui se connectera. Si c'est juste pour toi-même, c'est ok. A moins d'avoir accès à une autorité de certification qui normalement est payant ou gratuit limité.

J'ai pas essayé un Tunnel VPN pour la cam. J'imagine que tu n'as pas besoin de proxy et de SSL pour le https. A tester...

http://doc.ubuntu-fr.org/tutoriel/secur … 2_avec_ssl
Si tu veux le faire.


Ubuntu server 12.04.1

Hors ligne

#16 Le 01/06/2012, à 11:52

yeste64

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Je pense que je vais me contenter du proxyreverse sans SSL.

Par contre, je suis obligé d'indiquer pour le proxy "order allow, deny" et "allow from all" pour que ça marche. Je peux ajouter à cela une authentification par login/mdp mais si je n'ajoute pas ces deux lignes, j'obtiens un "access denied"..

Le problème est que j'ai un .htaccess à la racine de mon serveur. Et je ne voudrais pas avoir à me ré-identifier à l'accès au répertoire "/motion/". Or, là je suis obligé. Car si je ne protège pas ce répertoire précisément (via les balises "<proxy>" dans mon config apache), la racine de mon serveur est protégé par le htaccess mais pas le dossier "/motion/".

En espérant trouver la solution, merci d'avance smile


Si l'important n'est pas de gagner mais de participer, alors pourquoi compte-t-on les points ?

Hors ligne

#17 Le 01/06/2012, à 12:17

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

yeste64 a écrit :

Je pense que je vais me contenter du proxyreverse sans SSL.

Par contre, je suis obligé d'indiquer pour le proxy "order allow, deny" et "allow from all" pour que ça marche. Je peux ajouter à cela une authentification par login/mdp mais si je n'ajoute pas ces deux lignes, j'obtiens un "access denied"..

Le problème est que j'ai un .htaccess à la racine de mon serveur. Et je ne voudrais pas avoir à me ré-identifier à l'accès au répertoire "/motion/". Or, là je suis obligé. Car si je ne protège pas ce répertoire précisément (via les balises "<proxy>" dans mon config apache), la racine de mon serveur est protégé par le htaccess mais pas le dossier "/motion/".

En espérant trouver la solution, merci d'avance smile

Si tu essayait ça dans ton .htaccess pour voir :

<Proxy *>
 AuthType Basic
 AuthName "CAM"
 AuthUserFile /home/CHEMINDU/.htpasswd
 require valid-user
 order deny,allow
 allow from all
</Proxy>

ProxyPass /motion/ http://localhost:8081/
ProxyPassReverse /motion/ http://localhost:8081/

On peut avoir accès à ta cam sans passer par ton site, c'est pour ça.

Tu veux protéger ta page d'accueil aussi?

Le SSL c'est juste pour protéger ta connexion en lui-même. Avec ou Sans, ça t'empêche pas
de placer un mot de passe.

Dernière modification par dancom (Le 01/06/2012, à 12:19)


Ubuntu server 12.04.1

Hors ligne

#18 Le 01/06/2012, à 13:22

yeste64

Re : Intégrer une page html d'un réseau local dans une page html "externe"

C'est bon j'ai rajouté ça dans le fichier de conf d'apache (car dans le htaccess ça ne marchait pas).

Et maintenant :
- accès page d'accueil serveur : demande de mot de passe PUIS accès caméra : aucune demande
- accès caméra : demande de mot de passe PUIS accès serveur : demande de mot de passe

En gros, si je m'authentifie au niveau du serveur, il ne me le redemande pas lorsque j'essaie d'accéder à ma cam. Par contre si j'accède d'abord directement à ma cam, que je m'authentifie, puis que je tente d'accéder à l'accueil du serveur, je dois me ré-authentifier.

Ca me va, donc je te remercie beaucoup pour ton aide précieuse.

Je n'avais jamais réussi à mettre ça en place jusqu'ici, j'étais passé par w3cam, zoneminder et autres.. Et là, c'est parfait big_smile

Merci beaucoup. Une prochaine étape serait donc le SSL comme tu dis, mais ça ne me tente pas trop du fait qu'il faille ouvrir un port au niveau du routeur.. Ce serait intéressant d'avoir confirmation que le serveur de motion encode les images qui transitent sur le réseau.


Si l'important n'est pas de gagner mais de participer, alors pourquoi compte-t-on les points ?

Hors ligne

#19 Le 01/06/2012, à 13:47

dancom

Re : Intégrer une page html d'un réseau local dans une page html "externe"

Si tu accède à ta cam en utilisant la balise <img> dans ta page d'accueil, quand tu entre dans ta page d'accueil, ça va demander un mot de passe à cause de la balise en question qui lui fait appel au url de ta cam.  Si tu mets pas de mot de passe et que tu fais cancel, ça va juste ne pas afficher ton image et y'aura un carré vide. Y'a surement un moyen avec PHP pour remplacer l'image de la cam supposé apparaitre normalement par une autre.

Ou bien, tu fais un lien avec une image qui dit cliquer pour voir la cam. Et là, ça te demande un mot de passe si nécessaire. Mais, je ferais plus ça en Ajax pour ne pas changer de page.

L'important, c'est de protéger minimalement l'accès directe via url à ta cam.

Le SSL me posait un problème au niveau du sous-domaine à ouvrir. Si tu as 10 sous-domaine avec le port 80 ça va aller au bon endroit. Mais avec le https (443), ça ouvrait le sous-domaine touché par le port mais à partir de n'importe quel sous-domaine si j'utilisais https.  Un peu embêtant comme situation.

http://site1.com pour aller au site 1
http://site2.com pour aller au site 2 etc..
mais avec https, ça ouvrait tout le temps site1 peut importe l'adresse.

Tu vois le genre de chose pourquoi j'ai pas continué avec https.

Surement une configuration qui me manque. En plus, les premier coup quand j'avais activé Mod_SSL, ça marchait mais après l'avoir désactive. Et réactiver parce que j'avais changé d'idée. Ça marchait plus.

J'ai laissé tombé pour le moment bien sur.

A plus et content de t'avoir aidé :-)


Ubuntu server 12.04.1

Hors ligne