Accéder à internet en terminal derrière un proxy – wget svn hg…

terminal

Voici quelques petites astuces pour accéder à internet via un terminal sous Linux.

Il vous est peut-être déjà arrivé de vouloir faire un wget, lancer une commande svn ou hg derrière un proxy avec authentification, voici des méthodes pour accéder à internet sur ce type d’architecture.

La première est de déclarer une variable d’environnement $http_proxy :

Pour cela il faut taper la commande :

export http_proxy="http://login:password@serveur_proxy:3128"

Pour éviter de le taper cette commande tout le temps, vous pouvez soit le mettre dans /etc/profile soit dans le .bashrc ou ailleurs d’ailleurs.

Personnellement je le met dans le .bashrc ce qui me permet de le gérer par utilisateur, libre à vous de le mettre où bon vous semble…

Voici la deuxième astuce est de configurer wget :

Configurer wget pour utiliser le proxy avec authentification, pour cela éditer le fichier /etc/wgetrc

Ajouter :

http_proxy = http://hostname.proxy:port/

use_proxy = on

proxy-user = username
proxy-password = password

Attention, cela ne configurera que le proxy pour le wget, mais je pense que vous l’aviez compris 😉

Personnellement avec les 2 première méthodes je rencontrais toujours un problème d’authentification, voici le message d’erreur que j’avais par exemple avec un wget :

root@desktop:~# wget -v www.google.fr
--2009-11-06 09:46:47--  http://www.google.fr/
Résolution de proxy.mon-reseau.com... 10.0.1.1
Connexion vers proxy.mon-reseau.com|10.0.1.1|:8080... connecté.
requête Proxy transmise, en attente de la réponse... 407 Proxy Authentication Required
2009-11-06 09:46:47 ERREUR 407: Proxy Authentication Required.

Ces 2 astuces ne fonctionnent malheureusement tout le temps, notamment lorsque votre proxy requiert une authentification NTLM

Voici le détail de mon wget où vous pourrez voir quel type d’authentification est demandé :

root@pydubreucq-desktop:~# wget -d -v www.google.fr
Setting --verbose (verbose) to 1
DEBUG output created by Wget 1.11.4 on linux-gnu.

--2009-11-06 09:46:51--  http://www.google.fr/
Résolution de proxy.mon-reseau.com... 10.0.1.1
Caching proxy.mon-reseau.com => 10.0.1.1
Connexion vers proxy.mon-reseau.com|10.0.1.1|:8080... connecté.
Created socket 3.
Releasing 0x0881b150 (new refcount 1).

---request begin---
GET http://www.google.fr/ HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Host: www.google.fr
Proxy-Authorization: Basic MjAwMDIyNTc6Ikwzck95X01lUmwxIg==

---request end---
requête Proxy transmise, en attente de la réponse...
---response begin---
HTTP/1.0 407 Proxy Authentication Required
Server: squid/2.x.STABLEx
Date: Fri, 06 Nov 2009 08:44:47 GMT
Content-Type: text/html
Content-Length: 1332
Expires: Fri, 06 Nov 2009 08:44:47 GMT
X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
Proxy-Authenticate: NTLM
X-Cache: MISS from proxy.mon-reseau.com
Via: 1.0 proxy.mon-reseau.com:8080 (squid/2.x.STABLEx)
Proxy-Connection: close

---response end---
407 Proxy Authentication Required
Closed fd 3
2009-11-06 09:46:51 ERREUR 407: Proxy Authentication Required.

On peut voir la ligne Proxy-Authenticate: NTLM ce qui signifie que le type d’authentification est NTLM

Voici la troisième astuce qui va vous permettre de régler le problème d’authentification NTLM que l’on retrouve notamment avec des proxy ISA Server :

Il faut installer le paquet ntlmaps

aptitude install ntlmaps

Lors de l’installation, il vous demande le port d’écoute du serveur ntlmaps, le hostname du serveur parent (le proxy) et son port, le domaine Windows, le nom d’utilisateur, le mot de passe…

Bref, je préfère toujours aller voir dans les fichiers de configurations, donc pour le faire à la main, il faut éditer le fichier /etc/ntlmaps/server.cfg

LISTEN_PORT: 8081

PARENT_PROXY: proxy.mon-reseau.com

PARENT_PROXY_PORT: 8080
NT_DOMAIN: DOMAINE_WINDOWS

USER: username

PASSWORD: password

Vous pouvez remarquer le paramètre LISTEN_PORT qui est le port qui va être utilisé pour que vous puissiez accéder à NTLM-APS

Pour cela il faut déclarer la variable d’environnement $http_proxy comme cité ci-dessus :

export http_proxy="http://localhost:8081"

Cette fois-ci, on indique à son système de faire pointer le proxy sur le localhost sur le port 8081 qui est en fait NTLM-APS et qui lui se chargera de l’authentification.

Il suffit ensuite de démarrer NTLM-APS

sudo /etc/init.d/ntlmaps start

Et voilà, vous allez désormais pouvoir accéder via votre terminal à internet en passant par le proxy

Le truc génial avec ce système, qui est petit plus non négligeable à mon sens, est au niveau de l’authentification avec Firefox…

Je m’explique, j’utilise Firefox et je suis un grand adepte des onglets… J’en ai en moyenne 3 à 4 lignes, ce qui représente 40 à 50 onglets, actuellement j’en ai 61 😉

Et à chaque démarrage de Firefox, il me demandait de valider mon compte proxy pour accéder aux éléments, vous pouvez imaginer que le matin en allumant le PC, je commencais par effectuée une centaine de clic… Ce qui, même si ça muscle le doigt devient vite lourd…

Et bien avec NTLM-APS ce problème est résolu étant donné que c’est lui qui gère l’authentification 😉

A noter, par contre que j’ai rencontré un problème d’affichage avec gmail, via NTLM-APS… Je ne sais pas pourquoi, mais ma mise en page était éronnée…

Pour solutionner ce problème, j’ai forcé gmail a fonctionner en https, ce qui au final est mieux 😉

Je n’ai pas encore rencontré de problème avec d’autres sites, je ne sais vraiment pas pourquoi cela ne fonctionnait pas…

NTLM-APS couvre un peu le même périmètre que CNTLM dont j’avais parlé sur mon article pour utiliser Drupal derrière un proxy

Liens utiles :

NTLMAPS

CNTLM

Edit : Si vous souhaitez installer des paquets pear / pecl vous pouvez lancer cette commande pour configurer pear/pecl à utiliser votre proxy local ntlmaps :

pear config-set http_proxy http://login:password@ip_du_proxy:port_du_proxy

Soit dans notre exemple :

pear config-set http_proxy http://localhost:8081

Author: Pierre-Yves Dubreucq

Passioné par les logiciels libres depuis 2001, je suis responsable d’Odiso (hébergeur web spécialiste des infrastructures haute disponibilité e-commerce et en gestion de pics de trafic & webperf) je tiens ce blog depuis 9 ans avec beaucoup moins d’assiduité malheureusement qu’à ses débuts, car j’écris aussi sur MonSiteEstLent.com blog d’Odiso dédié à la webperf

Share This Post On

14 Comments

  1. ntlmaps est aussi très utile en environnement Windows pour par exemple faire passer un flux SSH (via putty) à travers les proxy NTLM.

    Bref du tunneling, mais c’est un autre sujet…

    Post a Reply
  2. Bien le bonjour,
    @jlaunay J’ai paramétré ntlmaps pour fonctionner sur le 8081, donc l’export est valable 😉
    @VoidAndAny merci pour l’info 😉 Je ne savais pas 😉
    Bonne journée

    Post a Reply
  3. Merci pour cet article.
    Une solution quand le proxy est configuré avec un proxypac?

    Post a Reply
  4. Oui et non. En fait c’est un fichier qui définit un proxy en fonction du site cible, et en plus ce fichier change régulièrement. Actuellement je mets mes variables d’environnement à jour à la main… et c’est un peu lourd.

    Post a Reply
  5. Merci 😉
    Je crois que je vais finir par faire un tunnel SSH vers une machine chez moi et l’utiliser en tant que proxy local.

    Post a Reply
  6. Et si nos scripts utilisent cron, ça marche aussi : http_proxy=http://cache:3030 en première ligne du crontab :þ

    Post a Reply
  7. @djib: Ça risque de pas bien marcher, ssh si ton proxy n’est pas déjà bien mis. À mon avis, fais un script qui parse ton proxypac et met les bonnes variables à l’ouverture de session. Par contre, tu risques de faire un peu ramer le démarrage de shell si tu fais un wget à chaque fois, donc je te conseille de « mettre en cache » ce proxypac dans /tmp/ et de parser ça. Et tu cales une tache cron qui le met à jour régulièrement.

    Post a Reply
  8. article génial, merci !!!

    Post a Reply
  9. Hello
    J’ai suivi ton tutorial mais j’obtiens toujours une erreur d’authentification:


    wget -d -v www.google.fr
    Setting --verbose (verbose) to 1
    DEBUG output created by Wget 1.12 on linux-gnu.

    --2011-02-23 16:45:14-- http://www.google.fr/
    Résolution de localhost... ::1, 127.0.0.1
    Caching localhost => ::1 127.0.0.1
    Connexion vers localhost|::1|:8081... Closed fd 3
    échec: Connexion refusée.
    Connexion vers localhost|127.0.0.1|:8081... connecté.
    Created socket 3.
    Releasing 0x08f7c458 (new refcount 1).

    ---request begin---
    GET http://www.google.fr/ HTTP/1.0
    User-Agent: Wget/1.12 (linux-gnu)
    Accept: */*
    Host: www.google.fr

    ---request end---
    requête Proxy transmise, en attente de la réponse...
    ---response begin---
    HTTP/1.0 407 Proxy Authentication Required
    Server: squid/2.6.STABLE21
    Date: Wed, 23 Feb 2011 15:45:26 GMT
    Content-Type: text/html
    Content-Length: 1244
    Expires: Wed, 23 Feb 2011 15:45:26 GMT
    X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
    Proxy-Authenticate: Digest realm=, nonce=
    , qop="auth", stale=false
    X-Cache: MISS from proxy
    Proxy-Connection: close

    ---response end---
    407 Proxy Authentication Required
    Closed fd 3
    2011-02-23 16:45:14 ERREUR 407: Proxy Authentication Required.

    Post a Reply
  10. Bien le bonjour,
    Tu utilises quelle méthode ? La 1,2 ou 3 ?
    Car la 2 et la 3 parle d’authentification NTLM, hors tu utilises un proxy Squid qui ne fait pas d’authentification type NTLM.
    La méthode 1 devrait fonctionner…
    Déjà, vu ce message d’erreur :
    Connexion vers localhost|::1|:8081… Closed fd 3
    échec: Connexion refusée.
    Il semblerait que la connexion à ton proxy local échoue…
    Est-ce que ton service est bien lancé ?
    Désolé pour le temps de réponse en tout cas.
    Bonne soirée

    Post a Reply

Trackbacks/Pingbacks

  1. Pierre-Yves Dubreucq (pydubreucq) 's status on Friday, 06-Nov-09 10:54:14 UTC - Identi.ca - [...] http://blog.admin-linux.org/howto/acceder-a-internet-en-terminale-derriere-un-proxy-wget-svn-hg a few seconds ago from web [...]

Submit a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *