par tomtom » 10 Avr 2003 01:34
Hum je vais encore me lancer dans une longue tirade, mais j'espère qu'elle repondra au maximum de questions sur ce sujet...
<BR>J'ai beaucoup bosser pour essayer de passer en particulier des transferts de fichiers au travers d'un firewall/NAT, et le principe est le même pour la conversation vocale ou la video, à quelques points pres....
<BR>Je me base sur le transfert de fichiers pour l'insant.
<BR>
<BR>Avant tout, il convient de connaitre le fonctionnement de MSN :
<BR>
<BR>1- Connexion : On se connecte à un serveur central MSN, sur le port 80avec les nouvelles versions... MSN parle quasiment le http, ce qui lui permet de passer par les proxys....
<BR>
<BR>2- Conversation ecrite : Pas de problème, les mesasges transitent tous par le serveur central, et ne sont pas transmis directement à notre pote.. D'ailleurs, on ne connaot pas son IP.
<BR>
<BR>3- On veut envoyer un fichier : La on envoie en fait une "proposition d'envoi" via le site serveur, dans un message texte normal. Ce message contient notre IP et un port sur lequel envoyer le fichier (dynamique). Le partenaire doit repondre, et pour ceci il envoie un paquet de connexion sur le port prédeterminé. La connexion TCP s'etablit alors normalement, et un protocole de transfert assez simplste se met alors en route pour l'envoi du fichier.
<BR>
<BR>
<BR>Bien maintenant que la problématique est posée, comment autoriser le transfert au travers d'un firewall, qui plus est un firewall qui fait du nat ???
<BR>
<BR>Dans un sens, c'est assez simple (et ce n'est pas celui qu'on croit !!). Il est très facile d'accepter des fichiers distants : en effet, c'est alors nous qui initions la connexion tcp, ce qui signifie que n'importequel firewall statefull peut ensuite sans problème accepter les paquets retour, grace à l'utilisation des conntracks. Ces "moteurs de suivi de connexion" sont en effet capables d'etablir qu'un paquet appartient à une connexion precedemment ouverte et ainsi de le laisser passer dynamiquement, et même de le rediriger vers la bonne ip (on peut donc etre plusieurs à transferer des fichiers derriere ! sisi !).
<BR>
<BR>
<BR>La ou ça se corse, c'est dans l'autre sens...
<BR>En effet, il faut autoriser une connexion TCP d'une ip inconnue, vers un port inconnu, et en plus le diriger vers une sattion du lan qui ne peut être connue....
<BR>Un vrai casse-tête... Et qui en fait n'est pas résolu...
<BR>
<BR>Il y a plusieurs pistes : si on connait la plage de ports utilisés, on peut les forwarder vers l'ip de la station qui fait du transfert... On ne peut en avoir qu'une dans ce cas....
<BR>
<BR>Il est aussi envisageable de decider que des lors que des paquets sont passes vers le serveur msn (quelques ip seulement), on autorise le transfert pendant quelques instants (il faut developper un module pour ca, je crois qu'il en existe d'ailleurs assez aboutis). Cependant, on est loin de la securité et en plus on ne peut toujours utiliser qu'une seule station cliente....
<BR>
<BR>Bref, à mon avis la solution est l'utilisation de protocoles faits expres pour transférer des fichiers.... Ou pour faire de la visioconférence, il y a en particulier le client Eyeball Chat qui propose un protocole traversant sans -trop d'- encombres un firewall bien configuré.
<BR>
<BR>Il existe aussi un logiciel qui se place sur la passerelle et qui sert de "relais applicatif MSN", mais je ne me souviens plus son nom... Je vais faire des recherches et vous tient au courant... Sachez cependant d'ors et deja qu'il ne s'agit pas du tout d'une solution sécurisée.....
<BR>
<BR>Bonne lecture et bonne nuit !
<BR>
<BR>Thomas
One hundred thousand lemmings can't be wrong...