Outrepasser un proxy

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 :)

comments powered by Disqus