







|
1. Introduction 2. Qu'est-ce qu'un serveur proxy ? 3. Pourquoi utiliser un relais de connexion ? 4. Comment utiliser un relais pour une connexion ? 5. Améliorations 6. Pour les paranos... 7. Conclusion
1. Introduction
sur internet, des serveurs proxy permettent de relayer des connexions de manière anonyme (sans avoir besoin de s'identifier auprès de ces serveur).
ce document va vous apprendre à vous connecter à un serveur en passant à travers un serveur relais type proxy http, en utilisant les sockets mirc.
pour la compréhension de cette technique, il est nécessaire de savoir déjà manipuler les sockets mirc. pour les autres, je leur conseille de lire un des nombreux tutoriaux qui existent sur la manipulation des sockets (on en trouve même en français).
2. Qu'est-ce qu'un serveur proxy ?
il existe plusieurs sortes de serveurs proxy, terme générique pour désigner un serveur permettant de relayer des connexions (on parle aussi de serveur wingate): pare-feu socks4, socks5, etc..
on va parler dans ce document des serveurs http utilisant une fonction décrite dans le document de HTTP/1.1 permettant le relais de connexion: ce sont les serveurs proxy-http.
selon leur fichier de configuration édité par leur administrateur, ces serveurs permettent le relais anonyme ou non des connexions.
on va supposer dans la suite de cet article que nous désirons relayer notre connexion à travers un serveur proxy-http anonyme.
3. Pourquoi utiliser un relais de connexion ?
les raisons de passer par l'intermédiaire d'un relais pour se connecter à une machine distante peuvent être multiples, justifiables comme moins justifiables: on peut ainsi atteindre une machine *interdite* par le règlement du réseau local en passant par un serveur relais qui est lui permis; on peut aussi dissimuler sa véritable identité à une machine distante, qui ne verra que celle du serveur relais utilisé, etc..
attention cependant pour ce type d'utilisation: l'anonymité ne peut pas être garantie à 100%, tout dépend du degré de confiance du serveur proxy.. mais je ne m'étendrais pas dessus, ne cautionnant pas ce type d'utilisation.
4. Comment utiliser un relais pour une connexion ?
comme on vient de le voir, un serveur proxy-http est avant tout un serveur http, c'est à dire un serveur web, avec lequel on communique suivant le protocole HTTP/1.1 (décrit dans la rfc2616). la plupart des serveur proxy-http sont spécialement dédiés au relais de connexions (wingate, squid, etc..)
on les trouve généralement derrière les ports 1080, 8080, mais aussi derrière les ports 3128 (serveur squid), ou autre ports non mis par défaut par le logiciel.
supposons que nous connaissons l'adresse et le port d'un serveur proxy-http:
ex: proxy.pouet.net sur le port 1080
on va se connecter au serveur proxy de la même manière qu'on se connecte à un serveur web:
exemple de code:
/sockopen mon_socket proxy.pouet.net 1080
|
dès la connexion établie, on envoie au serveur proxy les informations sur la destination de notre connexion:
ex: victime.com sur le port 80
on utilise pour celà, comme la commande GET de http pour demander un document, la commande CONNECT. elle utilise ce format:
CONNECT <addresse>:<port> HTTP/1.0
exemple de code:
le serveur proxy renvoie alors une réponse suivant la réussite ou l'échec de la tentative de connexion à l'hôte, sous la forme suivante:
______________________________________ | HTTP/1.0 200 Connection established | | ... | | ... | | <vide> | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
les "..." sont d'éventuelles lignes contenant des informations non indispensables pour la suite de la connexion avec la cible. le code 200 indique que la connexion a été établie, le message qui suit le code le confirme d'ailleurs.. la fin de la réponse se termine comme toute réponse en http, par une ligne vide.
si un autre code que 200 apparait, une erreur s'est produite durant la tentative de connexion vers la cible victime.com: le relais ne peut donc s'effectuer.
par exemple, le code 407 indique qu'une autentification est nécessaire auprès du serveur proxy: ce n'est donc pas un serveur anonyme; le code 401 indique que l'on n'est pas autorisé à utiliser ce serveur proxy.. (consultez la rfc2616 sur le protocole HTTP/1.1 pour consulter les autres codes possibles)
exemple de code:
on *:sockread:mon_socket:{ if $sockerr { return } sockread %data var %code = $gettok(%data,2,32) if %code != 200 { echo *** erreur: %data | sockclose $sockname } ; le code 200 a été reçu: la connexion est établie avec la cible else { ; on lit la fin du message de confirmation while $sockbr { sockread %data } echo *** connexion à la cible: établie. ; ci-dessous, les commandes que l'on désire envoyer ; à la cible, celles que l'on aurait mis dans on sockopen ; si on n'avait pas relayé la connexion à la cible via le ; serveur proxy. } }
|
remarques importantes :
étant donné qu'on est connecté à la cible à travers le serveur proxy, il est important de souligner que toutes les informations renvoyées par l'identificateur $sock ($sock(..).ip et $sock(..).port) donnent des informations sur le serveur proxy et non sur le serveur cible.
une fois le code 200 reçu, la connexion avec la cible est donc établie: à partir de ce moment, toutes les données envoyées au socket (/sockwrite) parviendront de manière transparente directement à la cible.
5. Améliorations
on peut adapter ce système de relais de connexion à un addon que vous auriez déjà codé. pour ce faire, deux choses:
- on doit renommer le socket (/sockrename) dès la fin de la réception du code de confirmation de relais. ainsi, les évènements de socket que vous avez déjà écrit pourront se déclencher.
- tout ce que vous aviez mis dans votre on sockopen doit être copié après le commentaire qui l'indique (dans le code ci-dessus) afin de pouvoir être exécuté dès la fin de la réception du code de confirmation de relais.
ex: on a déjà écrit un code permettant de demander la page principale du site de mIRC (www.mirc.com) et de l'afficher en /echo.
code initial:
on veut utiliser ce code avec le système de relais, en passant à travers le serveur proxy d'adresse proxy.machin.net et de port 1080.
code modifié:
6. Pour les paranos...
imaginons maintenant que la cible que l'on désire contacter via le serveur proxy soit lui même un serveur proxy. on peut alors établir une connexion vers une cible, relayée par 2 serveurs proxy..!
on pourrait ainsi enchaîner plusieurs serveurs proxy qui seront autant de relais pour la connexion vers la cible.
je vous laisse le soin de coder un système qui fasse celà, en sachant qu'à chaque fois qu'on est connecté à un serveur proxy, on envoie la requête de connexion vers le prochain.
nb: en augmentant le nombre de relais, surtout si ceux-ci se situent sur divers points géographiques (en évitant si possible les serveurs proxy situés dans le même pays que vous..), on augmente grandement l'impossibilité de remonter jusqu'à vous.
mais l'anonymité à 100% n'existe pas... (certains serveurs proxy donnés dans des sites spécialisés sont parfois des pièges; ils logguent les connexions et il est dès lors plus facile de remonter à la source). le meilleur moyen est donc d'utiliser des serveurs proxy dont on est *sûr*..
nb2: comme de plus en plus d'individus utilisent ces serveurs proxy anonymes, certains serveurs (comme la plupart des grands réseaux irc) utilisent une méthode de scan de port afin de démasquer les connexions relayées. il faut savoir que ces scans ne portent que sur les ports habituels des serveurs proxy: 1080, 8080, 80, 3128, et peut être quelques autres.. l'idéal pour passer inaperçu est donc de passer par des serveurs proxy situés sur des ports *exotiques* (non habituels).
7. Conclusion
voilà. je pense vous avoir donné l'essentiel de cette technique. il est possible d'appliquer quasiment ce même principe pour les autres types de relayage (socks4, socks5, wingate, etc..): lisez donc les documents décrivant ces protocoles..
document réalisé par `kenji` <kenji-irc@altern.org> - 24/08/2002 france
|
|