L’objectif de cette page c’est d’expliquer comment faire passer autre chose que de l’http ou de l’https à travers un proxy qui ne semble savoir faire que ça.
Un peu de théorie
Le proxy
La traduction française de “proxy server” c’est “serveur mandataire” même si cette traduction est rarement utilisé, elle caractérise bien la fonction d’un proxy : être mandaté par un client pour aller chercher sur internet les documents demandés.
Les protocoles
http et https
Pour naviguer sur internet avec votre navigateur préféré, les communications utilisent le protocole http. Pour tous les sites demandant des échanges sécurisés, un protocole a été inventé l’https. Il s’agit en fait d’http crypté.
Dans le cas de l’https, le serveur proxy ne peut absolument pas jouer son rôle de mandataire, en effet, le protocole garanti un échange sécurisé entre le client et le serveur, c’est à dire que tous les intermédiaires, y compris le serveur proxy ne voient qu’un flux indécryptable.
habituellement, un serveur sachant parler l’http écoute sur le port TCP 80, et un serveur sachant parler l’https écoute sur le port 443.
ssh
Le ssh est l’abréviation de “secure shell” il s’agit d’un protocole sécurisé d’accès distant à une machine. C’est une sorte de telnet ou rlogin sécurisé.
De la même façon que l’https, le ssh garantit des échanges totalement sécurisés. Il apporte tout de même un gros avantage, celui de pouvoir [faire un tunnel ssh](faire un tunnel ssh “wikilink”) c’est à dire faire transiter par la connection sécurisée tout autre protocole de communication.
Le standard pour un serveur ssh, c’est d’écouter sur le port 22.
Ce qui va se passer
Vous l’avez sans doute compris, l’astuce consiste à faire passer du ssh à la place de l’https. Dans les deux cas, le serveur proxy ne voit qu’un flux crypté.
Nous allons donc utiliser un client ssh coté client (derrière le proxy) et un serveur ssh coté serveur.
Enfin la pratique
ssh ou https
Pour le serveur proxy, la seul façon de vérifier que la communication est bien en https, c’est d’une part de faire confiance au client qui demande l’établissement d’une connections https, et d’autre part, de vérifier que la communication est bien à destination d’un serveur sur le port 443.
Certains serveurs proxy ne vérifient que le le premier point.
Pour demander au proxy l’établissement d’une connections https depuis son client ssh, il y a 2 solutions : Corkscrew ou l’option proxy de PuTTY
Corkscrew
Sous linux, ou Cygwin (Windows) le plus simple c’est d’utiliser Corkscrew pour ce faire, rien de plus simple , commencer par installer le logiciel avec votre gestionnaire de paquet favoris, sous Debian :
apt-get install corkscrew
Pour ce qui est de la configuration, rajoutons l’appel à corkscrew dans le fichier de configuration de ssh. Chez moi, ça donne quelque chose comme ça :
ProxyCommand corkscrew Nom_du_proxy 3128 %h %p
Avec Nom_du_proxy qui est le nom ou l’ip du serveur proxy et 3128 le port d’écoute du proxy.
PuTTY
Comme dans l’illustration à droite, cherchez dans le menu de gauche, l’entrée “Connections -> Proxy” et remplir les champs comme demandé. Si vous ne savez pas exactement quel est le type de proxy, je vous conseil de commencer par “http” c’est le plus courant.
côté serveur
Si votre serveur proxy ne laisse passer que les connections https à destination du port 443, il va falloir installer votre serveur ssh sur le port 443. Sous linux, vous avez 2 solutions :
- changer le port d’écoute dans le fichier de configuration de sshd.
- rajouter dans inetd le service sshd sur le port 443.
Pour la première solution, il faut changer l’option Port dans le fichier /etc/ssh/sshd_config
Port 443
Inetd n’existant pas par défaut sous windows, il n’y a que cette option de facilement réalisable.
Pour la seconde solution, ajoutez la ligne suivante dans votre fichier /etc/inetd.conf
https stream tcp nowait root /usr/sbin/tcpd /usr/sbin/sshd -i
Conclusion
Pour finir, une fois que vous aurez établis la connections ssh, vous pourrez en [réalisant un tunnel ssh](faire un tunnel ssh “wikilink”) y faire passer tout ce que vous voulez par exemple du vnc des news, du mail, et même du vpn :-)
Enfin, voici mon fichier de configuration ssh.
Host tcweb.org
ProxyCommand corkscrew 192.168.12.1 3128 %h %p
Port 443
Merci d'avoir pris le temps de lire ce texte. Vous pouvez soutenir l'écriture de ces billets et la réalisation des livecoding par de nombreux moyens. Mais le plus beau moyen de me remercier est de simplement partager ce texte autour de vous.
Sauf mention contraire, tout le contenu de ce site est sous licence