Outrepasser un proxy

12/07/2012

Me voilà sur un projet Python qui demande une installation via le fameux bootstrap.py assez intéressant pour automatiser une installation complète du projet. Or, je me retrouve derrière un proxy http très restrictif, et python a beaucoup de mal à passer outre. Voici la méthode qui m’a permis de faire mon installation.

Les prérequis sont:

-avoir un serveur externe qui permette une connexion SSH -les outils corkscrew et proxychains -un peu d’aspirine

On commence par configurer le client SSH pour qu’il puisse se connecter en SSH à un serveur externe dont vous avez le contrôle. Ici, on appellera le serveur externe “extserv”.

Le serveur proxy HTTP sera nommé ici “httpprox” et utilise le port 8080.

Sur le client, donc votre poste, vous devez installer corkscrew et proxychains:

su -c "yum install corkscrew proxychains"
ou bien sur ubuntu, parce qu'il y en a plein hein...
sudo aptitude install corkscrew proxychains

Ensuite, vous allez éditer le fichier ~/.ssh/config, le but est de dire que toutes connexion ssh passera par corkscrew via le proxy http.

#fichier ~/.ssh/config
ProxyCommand corkscrew httpprox 8080 %h %p ~/.ssh/auth

Le fichier ~/.ssh/auth doit contenir les informations de connexion au proxy http:

#fichier ~/.ssh/auth
VotreLoginProxy:VotreMotDePasseProxy

Voilà, tentons une connexion au serveur SSH:

ssh user@extserv

Parfait, je suis connecté à mon serveur ssh. Je modifie deux options sur le serveur, dans le fichier /etc/ssh/sshd_config:

AllowTcpForwarding yes
PermitTunnel yes

Si les options n’existent pas dans le fichier, ajoutez les simplement… Redémarrez le service sshd du serveur:

/etc/init.d/sshd restart
ou sur debian, ubuntu...
/etc/init.d/ssh restart

Désormais, on peut créer un tunnel vers notre serveur.

Créons maintenant un proxy SOCK5 sur le client. Donc fermez votre connexion SSH au serveur et tapez simplement:

ssh -N -D 8888 user@extserv

La commande se bloque après demande du mot de passe (si vous n’avez pas utilisé d’authentification par clefs). Le port 8888 local écoute gentillement.

Gardez ce terminal dans un coin, ne le fermez pas, et ouvrez un autre terminal.

Dans ce second terminal, paramétrons proxychains. Editez /etc/proxychains.conf. Vous devez trouver deux options. La première est proxy_dns. Mettez la en commentaire:

#proxy_dns

Puis, normalement en bas du fichier, vous trouverez une ligne “sock4 …” supprimez la, et mettez à la place:

sock5  127.0.0.1 8888

Voilà, vous sauvez le fichier, vous quitter et vous tentez:

#plus besoin du proxy http
unset http_proxy https_proxy

#on essait de lire une page web
proxychains wget -q http://www.google.fr -O -

si tout se passe bien, vous aurez sur le terminal la sortie HTML de google.fr, sinon, vérifiez vos paramètres de proxy, de ssh, etc…

Vous l’avez compris, en préfixant la commande par “proxychains” vous forcez les connexions à passer par le proxy local “127.0.0.1:8888” qui passe ensuite par corkscrew, puis le proxy http, enfin vers votre serveur SSH qui redirige tout vers le serveur demandé. En gros:

connexion A ==> proxychains => 127.0.0.1:8888 => httpprox => extserv => A
            <==             <=               <=           <=         <=

Voilà… et bien lançons simplement la commande, en ayant pris soin de supprimer les variables d’environnement “http_proxy” et “https_proxy” via la commande unset

unset http_proxy https_proxy
proxychains python bootstrap.py
proxychains ./bin/buildout

toutes les commandes nécessitant une connexion devront être préfixées par proxychains.

Notez enfin que git utilise SSH, et que par conséquent vous pouvez désormais l’utiliser avec une configuration remote “ssh” et non plus “https”… Bref, proxychains + corkscrew, ça peut vraiment vous aider :)

Ça peut vous intéresser aussi


OpenOffice en mode serveur

Il est parfois compliqué de créer des documents dignes de ...


Monter un répertoir ssh sans coupure

Je travaille souvent sur mon serveur (Linux évidemment) et j’...


Tunnel SSH local et renverse

J’ai déjà traité ce sujet il y a quelques ...


Python-Quvi

Vous connaissez peut-être les projets minitube, cclive ou clive qui ...

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Julien - 25/07/2012

Hello !

Dans le fichier .ssh/config, il faut restreindre le ProxyCommand uniquement sur le host de la machine extérieure (extserv) car sinon, si on essaye de faire par exemple un git clone en ssh (sur github au hasard) en passant par proxychains, le ssh du git va utiliser également “corkscrew httpprox …” ce qui aura pour effet que la machine distante va essayer de se connecter au proxy (et du coup ça marche pas forcément :p) C’est ce qui nous est arrivé sur un builout récemment :)

Donc : #fichier ~/.ssh/config Host extserv ProxyCommand corkscrew httpprox 8080 %h %p ~/.ssh/auth

Bien entendu, si on a besoin de corkscrew pour d’autres accès ssh en direct, on peut les rajouter dans la liste des hosts (voir la doc complète man ssh_config). Mais si on fait tout passer par proxychains, logiquement il n’y aura que extserv comme host à atteindre derrière le proxy :)

Bonnes vacances Patrice !

Julien

Julien - 25/07/2012

PS : il y a un [tab] avant ProxyCommand, les espaces ont sauté dans le commentaire ;)

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.