FIREPASS VERSION 1.0.2a

A PROPOS

  FIREPASS un outil de tunneling qui permet de  passer  outre  les  restrictions
  imposees par un pare-feu en encapsulant les flux de donnees dans des  flux  de
  requetes HTTP POST autorises par le systeme de controle  d'acces  reseau.  
  Les protocoles bases sur TCP ou  UDP  peuvent  etre  encapsules par  FIREPASS.
  A l'heure actuelle, les parties cliente et serveur sont toutes deux ecrites en
  Perl. Des versions en C seront publiees prochainement.

  Pour utiliser FIREPASS, vous avez besoin de :

     * Une station situee sur le reseau interne avec le support  Perl  et  etant
       autorisee a envoyer des messages HTTP au reseau externe  (Internet)  soit
       directement, soit via un proxy HTTP.

     * Un serveur HTTP situe sur le reseau externe (egalement  avec  le  support
       Perl) sur lequel vous  avez  la  possibilite  d'installer / executer  des
       scripts CGI et qui puisse etablir des connexions  sortantes  (La  plupart
       des ISP commerciaux et certains ISP gratuits permettent cela).

  Le principal avantage de FIREPASS est que vous pouvez utiliser plusieurs types
  d'installation pour la partie serveur situee sur le reseau  externe.  Vous  n'
  avez pas besoin d'ouvrir de ports sur la station externe. 
  Tout parait normal du point de vue des administrateurs des reseaux interne  et
  externe. Il n'y a qu'un dialogue HTTP entre le client et le serveur.  Le  seul
  "probleme" est que les messages HTTP sont emis avec une frequence  importante.
  Ceci est cependant configurable au niveau du client FIREPASS avec  une  option
  gerant le delai a utiliser entre chaque requete HTTP.
  FIREPASS peut etre  utilise  pour  des  protocoles  n'etant  pas  critiquement
  dependants du temps.
  FIREPASS peut egalement etre utilise pour realiser la tache inverse, quand  le
  script serveur est localise sur le serveur Web interne d'une entreprise et que
  son client se situe sur le reseau externe.

  Cette version de FIREPASS etant  une  version  alpha,  quelques  bugs  peuvent
  exister...  ainsi   que   des  bugs  de  SECURITE.  Lisez,  s'il  vous  plait,
  attentivement la  section  "FONCTIONNEMENT"  pour  comprendre  clairement  les
  risques auxquels vous vous exposez en utilisant FIREPASS.
  Je ne vous garantis aucunement que FIREPASS fonctionnera correctement.

FONCTIONNEMENT

  Clients TCP/UDP						Services TCP/UDP
   \\\                                                            ^^^
 (5)\\\(1)                                                     (3)|||
     \\\                                                          |||
  |----------|        (2)        |----------|        (2)        |----------|
  | HOTE "A" | --- HTTP POST --> | Hote "B" | --- HTTP POST --> | Hote "C" |
  |          | <---------------- |HTTP proxy| <---------------- | httpd    |
  |----------|        (4)        |----------|        (4)        |----------|
  Client FIREPASS                (optionnel)                    Serveur FIREPASS
  fpclient.pl                                              /cgi-bin/fpserver.cgi

  (1) Le client TCP/UDP ouvre une connexion a destination  de  l'hote  "A",  sur
      lequel le demon client FIREPASS est en ecoute sur un port TCP/UDP
  (2) Le client FIREPASS accepte  la  connexion,  lit  les  donnees,  ouvre  une
      connexion vers l'hote C directement ou via un proxy  HTTP  et  envoie  les
      donnees au serveur httpd (sur le port TCP 80 par defaut) dans une  requete
      HTTP POST destinee au  script  serveur  FIREPASS.  Si  c'est  la  premiere
      requete d'une session, le client FIREPASS ajoute un champ additionnel dans
      le header HTTP avec une regle de redirection.
  (3) Le serveur FIREPASS lit les donnees depuis STDIN (comme specifie  dans  le
      protocole CGI). Si ces donnees appartiennent au premier message HTTP de la
      session, il forke un gestionnaire de connexion,  sinon  il  transfere  les
      donnees au gestionnaire de connexion correspondant via  un  fichier  situe
      dans un repertoire local de l'hote "C". Le gestionnaire de connexions  lit
      les donnees depuis le fichier local puis ouvre une connexion TCP/UDP  vers
      le service de destination et les envoie. Si des donnees doivent etre  lues
      depuis le service destinataire, il les lit et les transfere ensuite au cgi
      serveur FIREPASS via un autre fichier local situe sur l'hote "C".
  (4) A chaque execution, le cgi serveur FIREPASS verifie si  des  donnees  sont
      presentes dans le fichier local et le cas echeant  les  envoie  au  client
      FIREPASS dans des messages de reponse HTTP.
  (5) Le client FIREPASS recoit les donnees du  service  destinataire  dans  des
      messages HTTP, les extrait et les renvoie a ses propres clients.

      Et voila! S'il n'existe  pas  de  donnees  entrante/sortante,  le  client/
      serveur FIREPASS envoie simplement des requetes/reponses HTTP vides.

INSTALLATION

  Desole pour cette procedure d'installation  quelque  peu  difficile,  j'espere
  la clarifier prochainement... Je me bats avec trop de bugs pour l'instant.. :)

  - Hote Serveur (httpd):
     * Placez  le  script  serveur  FIREPASS  'fpserver/fpserver.cgi'  dans   le
       repertoire 'cgi-bin' de l'hote et verifiez le chemin vers Perl.
     * Creez deux repertoires 'inout' et 'log' (par exemple dans  /var/tmp) puis
       `chmod 777 inout log` ou `chown nobody:nobody  inout  log  &&  chmod  700
	inout log`
        - fpserver.cgi doit posseder des  droits  en  lecture/ecriture  sur  les
          fichiers presents dans ces repertoires.
     * Mettez a jour la configuration dans fpserver.cgi;       
    ------------------------------------------------------ fpserver.cgi ---
    ...
    my $inoutdir = "/var/tmp/inout"; # Path to existing data exchange directory
    my $logdir = "/var/tmp/log";     # Path to existing log directory
    my $logf = "fpserver.log";       # Log file name
    my $inm = "_in.dat";             # Echange files masks
    my $outm = "_out.dat";
    my $lockm = ".lock";
    my $log = "no";                  # ("no" | "yes") Create log file?
    my $useacl = "yes";              # ("no" | "yes") Use access list?
    my @ALLOW = qw (
            127.0.0.1
            111.222.33.4
    );                               # Access list, one IP on each line
    my $initdelay = .3;              # New connection initialization delay (sec)
    my $checkdelay = .3;             # Data exchange files check delay
    my $faketype = "text/html";
    my $fakepage = qq (
            <html>
            <body></body>
            </html>
    );                               # HTML page for browsers requests
    my $readsize    = 20480; 
    ------------------------------------------------------ fpserver.cgi --------
    Les changements minimum que vous devez faire ici sont:
    + Positionnez <$inoutdir> et <$logdir> (if <$log> = "yes")  en  fonction  de
      vos repertoires
    + Ajouter l'adresse IP de l'hote client FIREPASS a <@ALLOW>  ou  positionnez
      <$useacl> a "no";
    Optionnel:
    + Jouez avec les options <$initdelay> et <$checkdelay> si  vous  n'etes  pas
      satisfait des performance de FIREPASS.

  - Hote Client:
     * Verifiez conf/fpclient.conf - Configuration directives;
                conf/fpclient.rules - Redirect rules;
     * Verifiez le chemin Perl dans  le  script  client  FIREPASS - fpclient.pl,
       vous n'avez pas besoin de faire de modification  dans  cette  section  du
       fichier de configuration.
       
  Mmhhh.. Apparemment, vous etes maintenant en mesure d'utiliser votre tunnel ;)

    -NOTE-----------------------------------------------------------------------
      Certains serveurs httpd (Apache version russe par exemple) peuvent changer
      les donnees avant de les transmettre au script cgi de facon a supporter l'
      encodage Cyrillique par defaut, ce qui corrompt le flux de donnees.
      Supprimez cette fonctionnalite.
      Pour la version russe d'Apache, ajoutez ces quelques lignes a httpd.conf:

      <Location /cgi-bin/fpserver.cgi>
            CharsetDisable On
      </Location>

      .. Et redemarrez le demon httpd.

    ----------------------------------------------------------------------------

USAGE

  Executez le client FIREPASS:
  ./fpclient.pl conf/fpclient.conf your_apache.com/cgi-bin/fpserver.cgi

PLATE-FORMES

  J'ai teste FIREPASS sur
     * SunOS 5.8 + Perl 5.005_03;
     * Mandrake Linux (kernel version 2.4.19) + Perl 5.8.0;

  J'espere que FIREPASS fonctionnera sur n'importe quelle plate-forme  UNIX,  et
  meme peut etre sur des environnements Win32 (non teste). Si ce  n'est  pas  le
  cas, contactez moi et j'essaierai de vous aider.

EXEMPLES

  J'ai utilise FIREPASS avec succes pour encapsuler les protocoles suivants:
     * TELNET, pas trop vite ;)
     * HTTP; Cela  semble  marcher  pour  moi.  Je  vous  reccomande  d'utiliser
       HTTP/1.0 + des connexions sans "Keep-Alive" avec votre navigateur  favori
       de facon a eviter un trafic FIREPASS non necessaire.
     * ICQ; J'ai rencontre quelques problemes. Au  niveau  de  la  procedure  de
       handshake applicative, ICQ essaie d'etablir plus  de  12  connexions  TCP
       simultanees. Certains proxys HTTP (y compris celui avec lequel j'ai joue)
       n'autorise pas un aussi grand nombre de connexions  en  provenance  d'une
       meme adresse IP. Et c'est pourquoi ces proxys repondent avec des messages
       HTTP "Forbidden" sur  les  connexions  qui  suivent.  J'ai  contourne  ce
       probleme : En conservant la connexion au client ICQ, le  client  FIREPASS
       tente d'ouvrir des connexions au travers du proxy HTTP jusqu'a  ce  qu'il
       recoive un message HTTP/200. Pour l'instant, ICQ fonctionne parfois, mais
       pas tout le temps. Et ceci a  cause  d'erreurs  HTTP/404  "Not found"  en
       provenance de login.icq.com que je juge sans raison (c'est mon  point  de
       vue). Si quelqu'un de familier avec le protocole ICQ  souhaite  m'envoyer
       un mail pour discuter du probleme ?

LICENCE

  FIREPASS est distribue sous les termes de la  licence  GNU  -  General  Public
  License version 2.0.
  Consultez le fichier COPYING pour plus de details.

AUTEUR

  Alex Dyatlov <alex@gray-world.net>

  Page officielle: http://gray-world.net
  Un forum de discussion dedie a FIREPASS: http://gray-world.net/board/
  Vos demandes de fonctionnalites et vos rapports de bugs sont les bienvenus.

REMERCIEMENTS

  Simon Castro <scastro@entreelibre.com>
    README en francais, tests et verification des textes anglais.

  Hadi El-Khoury <helkhoury@entreelibre.com>
    Verification des textes anglais.
