Si vous êtes vous Linux rendez-vous sur la procédure Linux.
Si vous êtes en entreprise vous avez probablement un serveur proxy pour surfer sur Internet (parfois transparent), qui bloque un peu trop de choses. Mais sans ce proxy, internet ne fonctionne pas car les connections directes sont bloquées.
Voyons comment passer outre ce serveur proxy pour établir une connexion SSH pour surfer sans restriction via un proxy SOCKS 5 dans un tunnel SSH.
C'est une alternative qui permet d'atteindre un réseau distant (et internet) sans VPN.
Mise en garde : suivant la législation de votre pays vous vous exposez à des poursuites judiciaires si vous contournez un système de sécurité tel qu'un serveur proxy ou un pare-feu. Ceci étant dit, dans certains pays comme la Chine ce coutournement est nécessaire pour ne pas entraver la liberté d'expression à laquelle la censure porte atteinte.
Quelques explications techniques
Pour des questions de sécurité (logs, filtrage) mais aussi de performance (cache, QoS), on utilise un serveur mandataire (proxy) dans la plupart des entreprises. Il permet de contrôler et d'enregistrer tous les flux sortants de façon centralisée pour être en conformité juridique (hadopi, loi n° 2006-64 du 23 janvier 2006).
Parce que les serveurs proxy sont parfois configurés de manière trop restrictive, voici comment passer à travers avec une connexion SSH pour surfer comme à la maison.
Les serveurs proxy ne peuvent pas vraiment "proxifier" les requêtes chiffrées en SSL,c'est le cas des sites sécurisés (HTTPS). Du coup ils se contentent de renvoyer directement ces flux via la méthode connect. Seule la première URL/IP de destination est loguée, mais tout le reste étant chiffré le proxy ne voit rien d'autre... En fait l'établissement de la connexion est quasi-directe.
Nous allons profiter du chiffrement HTTPS pour établir une connexion SSH. Pour y parvenir notre serveur SSH est en écoute sur le port 443, afin que le proxy laisse passer cette connexion en pensant qu'il s'agit d'un site en HTTPS (comme Gmail par exemple).
De mon côté j'utilise un routeur Netgear WNR3500L avec le firmware libre Tomato, sur lequel j'ai configuré une redirection entrante (NAT) du port 443 vers le port 22 de ce même routeur. Vous pouvez également modifier le port d'écoute du démon SSH en 443, mais je préfère laisser le port 22 en écoute sur mon réseau interne.
Mon routeur Netgear incorpore un serveur SSH. Si vous n'en avez pas une machine sous Linux dans votre réseau fera aussi l'affaire (ainsi qu'un NAS Synology si vous activez SSH). Pensez simplement à renvoyer le port 443 entrant vers l'IP (fixe ou dhcp statique) du serveur/NAS Linux. Pour Windows il faut utiliser CopSSH ou Cygwin.
Vous n'avez rien à installer pour le proxy SOCKS, cela se fait de façon transparente du côté du serveur SSH (port dynamique).
Sous Windows avec Bitvise SSH Client
Un tunnel peut tout à fait s'établir via PuTTY qui supporte la configuration d'un proxy (attention cela bug avec KiTTY pour une raison inconnue). Mais PuTTY n'est pas très agréable à utiliser et la configuration des tunnels l'est encore moins.
C'est alors que j'ai découvert Bitvise SSH Client, un client SSH gratuit pour les particuliers et particulièrement facile à utiliser :
Il permet de configurer un maximum de choses en un minimum de clic grâce à une interface intuitive et efficace :
- client SSH avec proxy socks
- Sauvegarde de profils
- client SFTP
- FTP to SFTP Bridge
- client SSH (ligne de commande)
- translation de port (bidirectionnel)
- gestionnaire de clé SSH
- ouverture de port dynamique pour le bureau à distance Windows (RDP)
- et bien d'autres...
Le bureau à distance Windows (il mappe automatiquement un port aléatoire vers le 3389 de la machine distante) :
Client SSH intégré (ne demande de login) :
Ou encore le forward de port qui me permet d'atteindre mon routeur Tomato depuis le port 9999 sur ma machine locale :
Configuration
Il faut préciser le nom (ou ip) du proxy d'entreprise, celui qui est précisé dans votre navigateur (ouvrir le .pac si vous en avez un car l'adresse est dedans). Choisir proxy HTTP et ne PAS cocher "resolve DNS names locally" :
Si votre proxy d'entreprise nécessite une authentification Kerberos utilisez cntlm ntlmaps comme intermédiaire de connexion (renseignez cntlm.ini).
Dans l'onglet Services, complétez de la façon suivante :
Listen Interface: IP d'écoute du proxy socks (votre machine locale)
Liste Port: port d'écoute sur votre machine locale
Pour utiliser le tunnel il faudra préciser dans votre navigateur le proxy socks sur 127.0.0.1 avec le port 5000.
Voici la configuration pour surfer via le tunnel pour Firefox :
Et pour Internet Explorer et Google Chrome :
Attention : c'est la bande montante (upload) de votre connexion distante qui sera sollicitée lorsque vous surfez via le proxy socks. Si vous êtes en ADSL le débit sera donc de maximum 1 mbps (environ 100 ko/sec). Si vous êtes fibrés à 5, 10 ou 50 mbps ça ira donc nettement plus vite.
A contrario, si votre entreprise a un gros débit montant (upload) vous pourrez envoyer des fichiers chez vous à vitesse grand V puisque c'est votre bande descendante qui sera sollicitée (download).
Conclusion
Grâce à ce tutoriel vous savez maintenant comment sortir d'un réseau filtré ("proxifié" et "firewallisé") pour atteindre un second réseau plus ouvert (chez vous, chez un ami, en datacenter, etc).
Cependant vous devez gardez en tête que vous respectez la charte informatique que vous avez probablement signée... car, même si tout passe dans un tunnel, la première connexion sur le port 443 restera active ("established") et apparaîtra dans les journaux des firewalls/proxys. Il ne faudra pas longtemps à un admin réseau pour blacklister cette IP qui apparaît un peu trop souvent dans les logs, il peut même vous questionner à ce sujet. Plutôt que d'utiliser un nom de domaine, je vous invite à utiliser votre IP directe, nettement plus discret (sans parler du faire que les dyndns like peuvent être bloqués).
Gardez deux choses en tête :
- les résolutions DNS se feront sur votre réseau distant, ce qui permet de bypasser le filtrage DNS s'il y a dans l'entreprise
- vous pouvez établir des connexions sur toutes les IP de votre réseau sans avoir à forwarder un port à chaque fois car tout passera par le socks. Néanmoins tous les services ne passent pas correctement via socks, à vous de voir.
Dans le cas d'un hotspot (hôtel, restaurant, gare) n'autorisant que le surf web cela peut s'avérer très pratique pour se connecter à d'autres machines en SSH (rebond). Ou encore au travers d'une connexion mobile (3G) si votre FAI n'autorise que le surf, mais il faudra peut-être utiliser un user-agent mobile en cas de contrôle de paquets. Chez Free Mobile il n'y a aucun filtrage mais c'est souvent le cas chez les MVNO.
Enfin, si votre entreprise utilise un système d'inspection des paquets (le fameux DPI, c'est à dire que le firewall scrute la couche logicielle 7 du modèle OSI) alors il se peut que cette technique ne fonctionne pas. En effet le début de la trame ne contient pas de flux web mais l'établissement d'une connexion SSH, souvent bloquée.
A vous le surf non filtré !
Si vous utilisez Linux vous pouvez passer par le package connect-proxy : tutoriel tunnel SSH linux.
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
27 commentaires
Effectivement, je serais très intéressé par la version Linux.
@Freak0
Si le proxy de l'entreprise est proxy.de.lentreprise sur le port 8080 :
ssh -ND3128 server -o'ProxyCommand corkscrew proxy.de.lentreprise 8080 %h %p'
@®om: C'est tout à fait ça, je détaillerai dans un prochain billet pour que la commande "ssh hostname" suffise avec la configuration dans /etc/sshd_config 😉
Oui (dans ~/.ssh/config plutôt).
Coupler un tunnel ssh à un petit serveur OpenVPN permet de monter une interface réseau (sur l'ordinateur "bloqué" par le proxy) virtuellement connectée au réseau distant. On peut du coup y faire passer à peu près ce qu'on veut 🙂
Bonjour
Un grand merci pour ce tuto qui va mêtre trés utile.
Bonne continuation et à bientôt
Ce tuto m'interesse, mais malheuresement, je ne pas me connecter. Erreur suivante :
Connection failed. Connect() failed : Windows error 10049. L'adresse demandée n'est pas valide dans son contexte.
Merci.
@tatitato: tu essaies de te connecter à une IP ou bien à un domaine ? Quelle version de windows ?
Win XP.
Et j'ai essayer IP et dyndns, mais ça ne fonctionne pas. Je pense que les ports sont bloqués en sortie.
Bonjour,
J'ai trouvé vos explications tout à fait intéressante et vous en remercie.
Pour ma part, j'ai une question: est-il possible de bloquer le port 443 sur une IP particulière de façon à ce qu'elle ne soit pas modifiable par son détenteur. Mon objectif étant d'affecter une seule IP au port 443 et qu'il n'y ait aucun moyen de la modifier/ interchanger avec une autre IP ?
Merci d'avance pour vos suggestions.
Olivier
Bonjour,
Je souhaiterais créer un tunnel, mais pas pour navigué avec Firefox, mais pour utilisé un logiciel qui est bloqué par le pare feu.
Comment puis-je faire pour "dire" à mon logiciel de passer par le tunnel ?
Merci.
@juju: il faut configurer la partie proxy de ton logiciel, type "socks"
@Mr Xhark:
Salut et merci de ta réponse.
Seulement mon logiciel ne propose pas de configurer ses paramètres proxy 🙁
@juju:
C'est quoi comme logiciel ?
Pour beaucoup, tu peux t'en sortir avec
tsocks
: tu installestsocks
, configures/etc/tsocks.conf
puis lances ton logiciel avec :tsocks monlogiciel
bonjour,
peut on l'utilser pour outrepasser le blocage de certain ports quand on se connecte avec un hotspot SFR wifi ?
car le ftp est bloqué, le sip, ect...
merci de votre aide
@bambi: si tu as un serveur SSH à dispo et qu'il n'y a pas un DPI à la con, tu peux !
Trés rapide pour la reponse !
par contre qu'est ce qu'un DPI ???
avez vous un tutoriel ou une solution pour mon probleme ???
merci
@bambi: DPI = système d'inspection des paquets. En gros si SFR s'amuse à détecter et bloquer le SSH ça ne marchera pas, même en changeant le port.
Bonjour,j'ai bien suivi tes explication;le seul probleme pour moi c'est comment avoir avoir dans la premiere partie login, le host, le port , le username et le password.
Merci de me repondre
Bonjour, Vous mentionnez la possibilité de connexion SSH via le réseau mobile G3. Voyageant fréquemment dans des pays où le réseau internet est quasi inexistant je recherche une solution pour connecter en SSH sur mes serveurs en Europe via le 3G.
Est-ce possible ?
Pourriez vous me paramétrer une telle connexion, contre rémunération bien sûr ? Vous pouvez éventuellement me contacter directement par mail tmp6.arobase.webologix.com
merci pour cet article très intéressant.
bonjour, jai essayer la methode mais voici le resultat que j obtiens sur bitvise
connecton failed. getaddrinfo()failed. xindows error 11001 : Hôte inconnu
saurais tu pourquoi ? j'ai fais exactement ce que tu expliquais
@sdl: essaies avec l'adresse IP plutôt qu'avec un nom de domaine dynamique si c'est ton cas