Configuration automatique du proxy pour APT

Un proxy permet de filtrer les sites (pornos, téléchargements illégaux, etc.), ça permet également de produire des logs sur qui a fait quoi et quand. Les administrateurs systèmes ont la possibilité de mettre en place un proxy transparent (il n’y a donc rien à faire sur les postes). Si ce n’est pas un proxy transparent il faut en revanche effectuer des modifications sur les postes. C’est notamment nécessaire pour mettre à jour les packages de nos distributions.

Les personnes possédant un ordinateur portable doivent, via un script ou manuellement, changer la manière dont APT met à jour les packages. Typiquement le jour je suis dans mon entreprise utilisant un proxy et le soir je suis chez moi sans proxy. A chaque fois que je veux installer ou mettre à jour mes packages, je dois configurer le proxy pour APT.

La solution longue et complète (et pour plusieurs proxy) se trouve ici. Je vais vous présenter la solution simple (switch automatique proxy/pas de proxy).

On se sert de Acquire::http::Proxy-Auto-Detect de apt.conf (manpage Ubuntu, manpage Debian en Français) :
L’option Acquire::http::Proxy-Auto-Detect peut être utilisée pour indiquer une commande externe pour découvrir le mandataire HTTP à utiliser. Apt s’attend à ce que la commande sorte le mandataire sur la sortie standard dans le style http://proxy:port/. Cela annulera le Acquire::http::Proxy générique, mais pas une configuration spécifique de mandataire hôte établie par Acquire::http::Proxy::$HOST. Voir le paquet squid-deb-proxy-client(1) pour un exemple d’implémentation qui utilise avahi. Cette option l’emporte sur l’ancien nom d’option ProxyAutoDetect.

On crée un fichier /etc/apt/apt.conf.d/01proxy.

Acquire::http::Proxy-Auto-Detect "/etc/apt/detect_proxy.sh";

On crée ensuite notre script /etc/apt/detect_proxy.sh qu’on n’oublie pas de rendre exécutable avec chmod.

#!/bin/bash
# detect_proxy.sh
#
# 09/01/2016
# Script pour détecter si le proxy est disponible et afficher le résultat sur la sortie standard pour Acquire::http::Proxy-Auto-Detect du fichier /etc/apt/apt.conf.d/01proxy
#

### Variables ###
# Proxy #
proxy=192.168.1.50

### Détection du proxy et affichage du résultat sur la sortie standard ###
nc -zw1 $proxy 3128 && echo http://$proxy:3128/ || echo DIRECT

proxy : Correspond à l’adresse ip du proxy
3128 : Correspond au port utilisé par le proxy (j’ai mis 3128 car c’est le port par défaut utilisé par Squid, le proxy le plus utilisé en entreprise)
nc -zw1 : nc (netcat) va nous permettre de connaître l’état du port 3128 de notre proxy. Nous utilisons z pour uniquement scanner (sans envoyer de données) et w1 pour un timeout de 1 seconde
&& echo http://$proxy:3128/ : Affichera http://192.168.1.50:3128/ sur la sortie standard si le port est joignable. APT passera alors par le proxy
|| echo DIRECT : Affichera DIRECT sur la sortie standard si le port est injoignable. APT passera alors en direct (sans passer par le proxy donc)

Bien que cette petite astuce semble un peu Adminsys vous verrez dans le prochain article comment elle nous sera bien utile pour un besoin qui peut intéresser pas mal de monde Adminsys, pros et particuliers ;)


A titre d’info, voici quelques exemples de configuration plus « classiques » du fichier /etc/apt/apt.conf.d/01proxy.

Acquire::http::Proxy "http://192.168.1.50:3128/"; # Configuration classique et pas automatique ;)
Acquire::http::Proxy "http://username:password@192.168.1.50:3128/"; # Configuration classique avec authentification et pas automatique ;)
Acquire::http::Proxy "false"; # Désactiver le proxy

Une solution manuelle pour passer outre le proxy peut également être apt-get -o Acquire::http::Proxy=false install apache2.

Sources :
http://askubuntu.com/questions/53443/how-do-i-ignore-a-proxy-if-not-available?rq=1
http://hobgoblins-master.info/posts/apt-proxy-auto-detect-et-proxypac-ou-wpaddat.html
https://chandrusoft.wordpress.com/2012/09/30/disable-proxy-when-using-apt-get/
http://blog.nicolargo.com/2008/10/apt-get-a-travers-un-proxy-http.html

Les commentaires sont fermés.