[RESOLU] Connexion automatique à une page web depuis IPCop

Forum traitant de la distribution sécurisée montante nommée IP cop et basée sur la distribution Smoothwall. C'est à l'heure actuelle le forum le plus actif du site.

Modérateur: modos Ixus

[RESOLU] Connexion automatique à une page web depuis IPCop

Messagepar fmontfort » 17 Août 2005 17:44

Bonjour à toutes et à tous,

J'ai un immense et précieux besoin d'aide sur la problématique suivante :

Au démarrage d'une machine IPCop (il y en aura beaucoup), je souhaite me connecter à un site web afin "d'enregistrer" la plateforme. Cette connexion ne transmet aucune donnée. Elle se connecte simplement à un script PHP qui s'occupera de récupérer les informations utiles et les stockera dans une base de données.

Je me débrouille en PHP, mais pas en PERL. :shock: J'ai eu beau m'inspirer du script "update.cgi", rien n'y fait. Je n'ai pas l'impression que la machine IPCop se connecte au serveur web (pour le moment sur la zone Green).

[EDIT]
A priori sur la zone RED, c'est la même chose... snif...
[/EDIT]

Les machines sont connectées de la façon suivante :

iMac <--RJ45 croisé--> IPCop1 <--HUB--> IPCop2 <--RJ45 croisé--> PC XP
|
Serveur Web

J'ai essayé aussi :

iMac <--RJ45 croisé--> IPCop1 <--RJ45 croisé--> IPCop2 <--HUB--> PC XP
|
Serveur Web

Bien évidemment, lorsque j'essaye mon script dans le second environnement, je le teste uniquement sur IPCop2.

Voici mon script en l'état :

Code: Tout sélectionner
#################################
#!/usr/bin/perl

use IO::Socket;
use strict;

# enable only the following on debugging purpose
use warnings;

require '/var/ipcop/general-functions.pl';
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";

#workaround to suppress a warning when a variable is used only once

my $errormessage='';

sub downloadlist {
   unless (-e "${General::swroot}/red/active") {
      $errormessage = 'Impossible de se connecter';
   }

   my %proxysettings=();
   &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);

   my $peer = '128.0.1.200';
   my $peerport = 88;

   if ($_=$proxysettings{'UPSTREAM_PROXY'}) {
     ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\

-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/);
   }

   my $sock='';
   unless($sock = new IO::Socket::INET (PeerAddr => $peer, PeerPort => $peerport, Proto => 'tcp', Timeout => 5))
   {
      $errormessage = '128.0.1.200:88 inaccessible';
      return 'ARG!!!';
   }
   my $GET_CMD='';
   $GET_CMD  = "GET http://128.0.1.200:88/ipcop/record.php HTTP/1.1\r\n";
   $GET_CMD .= "Host: 128.0.1.200:88\r\n";
   $GET_CMD .= "Cache-Control: no-cache\r\n";
   $GET_CMD .= "Connection: close\r\n\r\n";
   print $sock "$GET_CMD";

   my $ret = '';
   while (<$sock>) {
      $ret .= $_; }
   close($sock);
   return $ret;
}

my $test = '';
$test = &downloadlist();
print $test;

#####################################


J'ai le code retour "ARG!!!" à chaque fois... snif...

J'arrive bien à faire un PING sur le serveur web, mais pas de traceroute... est-ce normal ?

Merci de me faire part de vos expérience en la matière (si qqun a déjà testé biensur)...

Fabrice
Dernière édition par fmontfort le 30 Août 2005 10:44, édité 2 fois au total.
fmontfort
Matelot
Matelot
 
Messages: 7
Inscrit le: 11 Juil 2005 16:56

Messagepar Franck78 » 17 Août 2005 18:10

D'après les règles iptables en place, en effet, tu ne peux pas atteindre GREEN depuis l'ipcop, ce qui est bien normal.

Ajoute pour vérifier (oui, c'est tordu à lire iptables -L et c'est les vacances...) :

iptables -A CUSTOMOUTPUT -o eth0 -p tcp --destination-port 88 -J ACCEPT

temporairement dans /etc/rc.d/rc.firewall.local


PS: on utilise maintenant une autre technique pour downloader. Dispo en 1.4.7 bientôt.
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Nouvel essai

Messagepar fmontfort » 17 Août 2005 18:18

Je viens de modifier mon post initial (j'ai testé depuis la RED) pour éviter ce genre de bêtise (je n'avais pas toute ma tête) :lol:

Même problème... je ping, mais pas de traceroute... le serveur web reste inaccessible au script PERL.

Il y a quelque chose que je ne comprend pas... à priori, IPCop peut sortir en RED sur le port 88 (la machine servant de serveur web est sur la même classe d'adresses 10.0.0.X)...

Je suis neuneu ou bien il y a quelque chose qui m'échappe (ce qui au final est à peu prêt équivalent)...

Au secours..... :cry:

Fabrice
fmontfort
Matelot
Matelot
 
Messages: 7
Inscrit le: 11 Juil 2005 16:56

Messagepar Franck78 » 18 Août 2005 11:09

En effet, si tu en es encore à rechercher des pb de connexions physiques (hub, croisés, etc) on est pas près de débugger les couches supérieures... :lol:


Alors branche correctement tout ceci, donne l'adresse IP de chaque carte réseau, les transfets de port (le 88) installés et qui fait quoi. Parceque la franchement c'est brouillard maintenant.
A la première lecture cela paraissait simple: un serveur web sur le GREEN de l'ipcop exécutant le script.
Plus maintenant.

Bye
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Messagepar Gesp » 18 Août 2005 14:25

Au démarrage d'une machine IPCop (il y en aura beaucoup), je souhaite me connecter à un site web afin "d'enregistrer" la plateforme.


Tu devrais regarder dans les sources de Smoothwall, parce que je crois bien qu'il font cela après installation de Smoothwall.
Sinon la version IPCop 1.4.7/1.4.8 sortira très bientôt en test et officiellement le 25.
Tu auras à disposition des lib de plus haut niveau que IO::Socket, ce qui facilite les choses.
Avatar de l’utilisateur
Gesp
Amiral
Amiral
 
Messages: 4481
Inscrit le: 29 Déc 2002 01:00

Script de connexion auto

Messagepar fmontfort » 30 Août 2005 10:57

Code: Tout sélectionner
#!/usr/bin/perl

use Sys::Hostname;
use IO::Socket;
use strict;

# enable only the following on debugging purpose
use warnings;

require '/var/ipcop/general-functions.pl';
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";

#workaround to suppress a warning when a variable is used only once

my $errormessage='';
my $localhn = hostname();

sub connectpageweb {
   unless (-e "${General::swroot}/red/active") {
      $errormessage = 'Impossible de se connecter';
   }

   my %proxysettings=();
   &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);

   my $peer = 'mon_site_web.com';
   my $peerport = 80;

   if ($_=$proxysettings{'UPSTREAM_PROXY'}) {
     ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/);
   }

   my $sock='';
   unless($sock = new IO::Socket::INET (PeerAddr => $peer, PeerPort => $peerport, Proto => 'tcp', Timeout => 5))
   {
      $errormessage = 'mon_site_web.com inaccessible';
      return 'ARG!!!';
   }
   my $GET_CMD='';
   $GET_CMD  = "GET http://mon_site_web.com/record_ipcop.php?name=$localhn HTTP/1.1\r\n";
   $GET_CMD .= "Host: mon_site_web.com\r\n";
   $GET_CMD .= "Cache-Control: no-cache\r\n";
   $GET_CMD .= "Connection: close\r\n\r\n";
   print $sock "$GET_CMD";

   my $ret = '';
   while (<$sock>) {
      $ret .= $_; }
   close($sock);
   return $ret;
}

my $test = '';
$test = &connectpageweb();


On inscrit ensuite le code dans le rc.sysinit et hop !

Pour la suite, c'est le serveur web (et notamment le script PHP ou autre) qui se débrouille...

Voilà, si ça peut servir...

En même temps, si quelqu'un peut optimiser ce code PERL dans la foulée, c'est super... sinon c'est bien comme ça...

Fabrice[/code]
fmontfort
Matelot
Matelot
 
Messages: 7
Inscrit le: 11 Juil 2005 16:56

Messagepar Franck78 » 30 Août 2005 14:11

Ca serait peut-être bien de préciser pourquoi maintenant ca marche. Que l'on ne perde pas de temps à chercher une différence mineure dans le script ou inexistantesi le pb était ailleurs...
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Messagepar fmontfort » 30 Août 2005 14:54

Chef ! Oui, chef ! :wink:

Bon reprenons depuis le début.

Ma problématique était la suivante :

- permettre à IPCop de se connecter au démarrage à une page web pour lui envoyer un ID unique (stocké pour plus d'aisance sur son nom d'hôte).

J'ai essayé en premier lieu de mettre le serveur web en GREEN, mais vu les modifications sur les tables de routage, et le fait que je souhaite avoir une distro la plus clean possible, cette solution a été écartée.

Ensuite, je suis revenu vers une topo réseau plus "basique", à savoir serveur web sur RED. Cette solution ne fonctionnait pas de prime abord, mais en fouinant un peu, je me suis apperçu que le problème venait en fait d'une limitation (ou incohérence appelez cela comme vous le voudrez) entre les libs PERL et le serveur web. Sur le port 88, cela me renvoyait en permanence un code HTTP 505.

Bref, j'ai passé le serveur web en 80 et là, ô magie de la technologie moderne, tout fonctionne nickel.

Je viens de passer le tout en production (enfin juste en environnement de...) car il reste encore beaucoup de chemin à parcourrir avant de pouvoir mettre tout cela à disposition de mes chers clients... :cry:

Donc, mea culpa... mea maxima culpa... on ne m'y reprendra plus à essayer des ports bizarres...

Voilà... aujourd'hui, à l'heure qu'il est et ce sans l'intervention de Dieu ni de ses seins (oups) :

Mac X ---- IPCOP1 ---- Freebox ----/ WEB (donc serveur web) \---- Freebox ---- IPCOP2 ---- WinXP

Ensuite, j'ai changé les adresses dans le script, j'ai mis en ligne ma petite page PHP et zou !

Je fini de bosser sur le côté serveur web et je fournirai les scripts PHP pour ceusse qui voudraient mettre en place ce genre de chose...

...Enfin si l'intérêt s'en fait sentir...

Voilà...

Par contre pour le VPN derrière routeur NAT (freebox en mode routeur NAT et DMZ), c'est pas gagné... alors qu'en préprod (sans routeur), cela fonctionnait, en prod, c'est le néant... snif

Bien à vous,

Fabrice
fmontfort
Matelot
Matelot
 
Messages: 7
Inscrit le: 11 Juil 2005 16:56

Messagepar Franck78 » 30 Août 2005 17:04

Quand je disais que cela serait une différence mineure: 1bit seulement.

Mais il y a quand même quelquechose qui cloche dans l'explication:

nous sommes sur le serveur donc.

pour activer perl (et ton problème) il faut activer apache
pour activer apache il faut qu'il recoive une requète
sur le port qu'il écoute.

Alors si tu vois apparaitre une erreur 'perl' quelquepart, il y a
belle lurette que le serveur apache a accepter la requeète sur son port88 !
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

???

Messagepar fmontfort » 30 Août 2005 17:47

Est-ce bien un humain qui répond ?

Bon... j'arrête de taquiner le goujon... surtout quand j'ai affaire à un amiral :lol:

Le serveur web est... euh... sur le web... d'une logique implacable non ? :shock:

Pour ce qui est de la modification mineure dans le script... effectivement... c'est mineur... voir quasi nul... comme quoi... mes vieilles notions en PERL sont encore à peu près valides... et il faut dire que je n'ai rien inventé... c'est de la recopie de recopie de recopie de... :D

Pour ce qui est de l'erreur sur le port 88, il faudra qu'un jour je prenne le temps de re-tester tout ça... mais il faut que j'avoue une chose... je n'ai pas trop le temps de tenter de recréer une erreur peut-être aléatoire... peut-être pas...

Enfin bref ! MEA MAXIMA CULPA... je me flagellerai avec des verges de bois verts ce soir au coin du feu... peut-être m'immolerai-je d'ailleurs par la suite pour faire amende honorable, vénérable maître...

Bon... cette fois-ci je retourne bosser un peu... histoire de justifier mon salaire de ministre... 8)

Bizzz

Fabrice
fmontfort
Matelot
Matelot
 
Messages: 7
Inscrit le: 11 Juil 2005 16:56


Retour vers IPCop

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité