Serveurs Proxy HTTP
Un article de Projet de documentation fug-fr .
Avec l'aimable autorisation de l'auteur, traduction d'un article intitulé HTTP proxies de Dru Lavigne, dans la série FreeBSD Basics du site BSDDevCenter d'ONLamp
Sommaire |
[modifier] Généralités:
Dans un article précédent, j'ai présenté certains avantages à utiliser un proxy. Aujourd'hui, je
voudrais me concentrer sur les proxies HTTP. Nous jetterons un oeil à certains des proxies
HTTP disponibles dans la collection des ports, et voir lequel peut convenir à vos
besoins.
Si vous en avez déjà connaissance, votre première pensée ira probablement à squid, excellent proxy HTTP. Comme il existe déjà beaucoup
d'articles et how-to sur l'utilisation et la configuration de squid, je ne couvrirais pas ce
produit ici. Pour ceux qui sont déçus, je donnerais quelques URLs:
- squid
- Jennifer Vesperman Excellente série sur Squid.
- Daemonnews Setting up Squid on FreeBSD.
- Squid Configuration Manual.
Squid est l'exemple d'un proxy HTTP très configurable, qui peut s'affirmer dans de grands
réseaux. C'est parfaitement adapté si vous êtes administrateur d'un vaste réseau, mais surpuissant
si vous voulez simplement surfer sans risque dans le cadre de votre FreeBSD, ou imposer une
politique sur un petit réseau à la maison. Et en tant qu'utilisateur, quels sont les choses
irritantes qui surviennent lorsque l'on surfe ? Les premiers rapidement venus à l'esprit:
- Fenêtres pop up
- annonces flash
- cookies
- Applets Java
- Webbugs
- Intros Shockwave
- la vitesse, ou le manque
Dépendant du navigateur que vous utilisez, certains de ces indésirables peuvent être traités directement. D'autres exigeront d'installer un logiciel supplémentaire proxy. Commençons par jeter un oeil à quelques navigateurs communs, puis passons aux autres proxies.
[modifier] Navigateurs:
A cette date, ce sont les dernières versions libres de trois navigateurs populaires sur le Web:
- mozilla
- opera
- linux-netscape
Gardez à l'esprit que de nouvelles fonctions sont ajoutées avec les nouvelles versions, ainsi celles
manquantes maintenant, peuvent apparaitre dans des versions ultérieures. En outre, chaque navigateur a une section préférences, ainsi, si votre navigateur n'est pas énuméré ici, contrôlez les
fonctions disponibles.
Pour ces navigateurs, la section préférences se trouve sous le menu d'édition de Netscape
et de Mozilla, et sous le menu fichier dans Opéra. Vous trouverez une grande différence dans
la quantité de préférences disponibles entre Netscape, Mozilla ou Opéra. C'est parce qu'il y a des versions plus ancienne de Netscape.
Chacun de ces navigateurs a une configuration nommée qui permet de traiter les cookies.
Chacun permet également d'autoriser ou d'invalider Java et Javascript. En conclusion, si
vous avez une connexion Internet et de l'espace disque en abondance, vous pouvez obtenir une
amélioration de vitesse, en "tunant" la configuration de chaque cache de votre navigateur.
Traiter les fenêtres pop up est un dispositif récent, ainsi on ne le trouve pas dans cette version de Netscape. Dans Opéra, un clic sur Général, pour trouver la configuration rejetant les pop up. Mozilla s'y prend d'avance, en invalidant les pop up entièrement, ou sur une base site par site. Pour invalider tous les pop up, allez à Privacy & Security->Popup Windows, et lisez l'avertissement sur les ramifications. Alternativement, si vous rencontrez toujours un site avec un pop up irritant, cliquez droit simplement sur la page , et choisissez "rejeter les fenêtres pop up de ce site."
[modifier] bfilter:
Maintenant, voyons ce que certaines des applications dans la collection des ports peuvent faire pour améliorer les dispositifs déjà fournis par votre navigateur préféré. Je commencerais par bfilter. Ce proxy HTTP contrôle non seulement les pop up, il arrête également ces "add-on" flashants gênant, et les webbugs. Pour construire ce port, passez en super-utilisateur et:
# cd /usr/ports/net/bfilter # make install clean
Le port installera l'application dans /usr/local/bin/bfilter, et un fichier de configuration dans /usr/local/etc/bfilter/config. Une fois l'installation terminée, quittez le compte super-utilisateur, et tapez bfilter, afin de lancer le proxy. Vérifiez alors qu'il est à l'écoute des requètes:
$ sockstat -4 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS dlavigne bfilter 20336 3 tcp4 127.0.0.1:8080 *:*
Vous noterez que bfilter écoute sur le port 8080, sur l'adresse loopback. Si vous lisez les commentaires dans son fichier de configuration, vous verrez que 127.0.0.1 dit de détecter les demandes HTTP sur toutes les interfaces. Si vous souhaitez écouter seulement sur une interface, indiquez son adresse IP dans le fichier de configuration.
bfilter n'est pas un proxy transparent, signifiant que vous devrez configurer votre navigateur
pour utiliser le proxy. Entrez dans la section préférences de votre navigateur, et vous devriez trouver une configuration qui traite des proxies. Saisissez l'adresse IP et le numéro de port utilisé par bfilter. Dans mon exemple, bfilter fonctionne sur la même machine que mon
navigateur, ainsi j'utilise 127.0.0.1 comme adresse IP, et 8080 comme numéro de port. Si vous
exécutez bfilter sur un ordinateur séparé, changez l'adresse IP dans son fichier de
configuration, pour refléter celle attachée (NIC) à votre réseau interne. Configurez alors les
navigateurs des ordinateurs de votre réseau, pour utiliser l'adresse IP dans leurs sections proxy des préférences.
bfilter a également un fichier de règles, que l'on trouve dans /usr/local/etc/bfilter/rules.
Cependant, j'ai constaté que les règles par défaut ont plus ou moins fonctionné avec les pop
up contagieuses, et aux add-on. Si vous recherchez un serveur proxy facile à utiliser,
bfilter est une bonne solution.
[modifier] Middleman:
Un autre proxy HTTP que j'ai plaisir à utiliser est
middleman. Comme bfilter, cela fonctionne trés bien, mais ce qui fait son intérêt, ce sont les fonctions supplémentaires, qui permettent d'en apprendre plus sur HTTP, et de voir ce qui se
passe dans les coulisses ,chaque fois que vous visitez un site Web.
D'abord, installons le port:
# cd /usr/ports/www/middleman # make install clean
Notez que le nom de l'application installée sera dans /usr/local/bin/mman. Vous devez également savoir le nom du fichier de configuration par défaut, afin de lancer l'application. Si vous tapez juste mman, vous recevrez en sortie le fichier d'aide. Au lieu de cela, utilisez le commutateur c ou config-file pour lancer le proxy:
# mman -c /usr/local/etc/mman.xml
J'ai constaté que le proxy doit être lancé en tant que super-utilisateur. N'oubliez pas de contrôler que mman est à l'écoute, et configurez en conséquence la section proxy de votre navigateur:
sockstat -4 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root mman 575 0 tcp4 127.0.0.1:8080 *:*
Si vous projetez d'utiliser middleman, prenez le temps de lire
/usr/local/share/doc/middleman/README.html. C'est la seule documentation sur le produit, mais
elle est très complète, et pleine d'idées intéressantes sur la façon d'utiliser un proxy.
Bien que la configuration par défaut convienne probablement à vos besoins, vous devriez vérifier
l'interface Web en tapant mman dans votre navigateur. Ceci permettra de visualiser:
- Connexions actives
- entrées de log
- config
- cache
- cache DNS
- en-têtes
- connexions
[modifier] Au sujet de HTTP:
Si vous n'avez jamais utilisé un serveur HTTP ou un proxy HTTP auparavant, vous pouvez être
stupéfié de la quantité d'interactions, qui se produisent à chaque connexion à un site web. J'ai
mentionné dans le dernier article que nous nous réfèrerons à la
RFC(2616). Faisons un aperçu rapide sur la façon dont le protocole HTTP fonctionne; Je vous laisserais le soin de vous référer a la RFC pour compléter les détails qui vous intéressent.
Chaque fois que vous parcourez un site Web, votre navigateur doit faire une demande séparée pour chaque élément de la page. Par exemple, si je tape slashdot.org dans mon navigateur, je verrais les entrées suivantes dans mon cache mman:
* http: //images.slashdot.org:80/topics/topicgamesrts.gif * http: //images.slashdot.org:80/topics/topicinternet.gif * http: //images.slashdot.org:80/title.gif * http: //slashdot.org:80/ * http: //images.slashdot.org:80/topics/topicaposx.gif * http: //images.slashdot.org:80/topics/topicms.gif * http: //images.slashdot.org:80/topics/topiccomdex.gif * http: //images.slashdot.org:80/slc.gif * http: //images.slashdot.org:80/pix.gif * http: //images.slashdot.org:80/topics/topicscience.gif * http: //images.slashdot.org:80/greendot.gif * http: //slashdot.org:80/favicon.ico * http: //images.slashdot.org:80/topics/topichardware.gif
Notez que chaque GIF ou image est une demande séparée, comme chacune est enregistré dans un fichier
séparé sur le web serveur. Afin que mon navigateur puisse afficher la page principale du site Slashdot, il a dû individuellement demander chacun des 11 .gifs, le .ico, et la page HTML qui
explique comment tout formater.
Dans HTTP, il y a deux types de paquets: les requêtes, et les réponses. Le paquet de demande vient
toujours du navigateur. Ceci se comprend, car un navigateur est un client, et le travail d'un client
est de faire des demandes. Et bien sur, les paquets de réponse viennent toujours du serveur web.
Le paquet de demande d'un navigateur a trois composants:
- protocole
- en-tête
- corps
Le protocole indique ce que le client demande. Tous les protocoles sont énumérés et expliqués dans la RFC et typiquement, sont écrits en majuscule. La méthode la plus commune est d'utiliser get, car typiquement votre navigateur veut obtenir une page ou une image particulière du site. Si vous jetez un oeil à vos logs mman, dans cet exemple, les logs proxy HTTP ou de serveur HTTP, vous verrez les demandes get:
Sat 21 16:04:43 [575] request: GET http: //images.slashdot.org:80/greendot.gif Sat 21 16:04:43 [575] cache: create: http: //images.slashdot.org:80/greendot.gif Sat 21 16:04:43 [575] request: GET http: //images.slashdot.org:80/pix.gif Sat 21 16:04:43 [575] cache: create: http: //images.slashdot.org:80/pix.gif Sat 21 16:04:43 [575] request: GET http: //images.slashdot.org:80/topics/topicgamesrts.gif Sat 21 16:04:43 [575] cache: create: http: //images.slashdot.org:80/topics/topicgamesrts.gif Sat 21 16:04:43 [575] request: GET http: //images.slashdot.org:80/topics/topiccomdex.gif Sat 21 16:04:43 [575] cache: create: http: //images.slashdot.org:80/topics/topiccomdex.gif <snip>
Ici, mman a émis la demande get de mon navigateur, puis a placé une copie de l'élément
demandé dans son cache.
Le paquet de la réponse d'un serveur web a également trois composants:
- Statut
- en-têtes
- corps
C'est-à-dire, le paquet de demande envoie une requête, et le serveur web répond avec un paquet
réponse. Ces messages de conversation sont numériques, et sont énumérés dans la RFC. Vous êtes déjà
surement tombé sur "une erreur 404", car 404 est la représentation d'une réponse non trouvée. Le
mode le plus commun est 200, ou OK. Si un navigateur émet une demande get, et si le serveur
trouve la ressource demandée, il la renverra avec un mode 200. S'il ne peut pas trouver le fichier
demandé, il enverra à la place un error 404.
Vous avez probablement noté que les paquets de demande et de réponse contiennent des en-têtes et un corps. Le corps contient habituellement la page ou l'image demandée. Ainsi, quand mon navigateur fait une demande get http: //images.slashdot.org:80/greendot.gif, le serveur web a trouvé le GIF, et a envoyé un paquet de réponse avec un mode 200, avec le GIF lui-même dans le corps du paquet.
[modifier] Affichage des en-têtes avec mman:
Les entêtes sont la partie intéressante des paquets HTTP. Ils contiennent l'information utile qui aident le navigateur et le serveur web à communiquer avec pertinence. Ils contiennent également des informations sensibles sur le serveur, et le navigateur. Voici les résultats d'un clic sur les entêtes dans l'interface Web de mman:
Unfiltered Type Value Host mman User-Agent Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.3.1)Gecko/20030619 Accept text/xml,application/xml,application/xhtml+xml,text/html; . q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif; . q=0.2,*/*;q=0.1 Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate,compress;q=0.9 Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Proxy-Connection keep-alive Referer http: //mman/headers . Filtered Type Value Host mman Accept text/xml,application/xml,application/xhtml+xml,text/html; . q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif; . q=0.2,*/*;q=0.1 Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate,compress;q=0.9 Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Referer http: //mman/headers User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461)
Rappelez-vous, chaque paquet HTTP inclut des en-têtes. Voici ce que vous voyez des valeurs qui sont
envoyées par mon navigateur. La section Unfiltered contient les défauts de mon navigateur. Elle
montre clairement mon système d'exploitation, la version et le type de navigateur que j'utilise. La
section Filtered montre que mman a changé certaines de ces en-têtes, avant de les envoyer au
serveur web. Si je n'aime pas ces nouvelles valeurs, je peux simplement cliquer sur Config,
choisir l'entête, et éditer par exemple le User-Agent. Cette section de configuration est trés
puissante, vous pouvez ajouter, effacer, et modifier la teneur des en-têtes. Cependant, ne faites
pas ceci inconsidéremment. Assurez vous d'avoir lu la RFC, et compris les ramifications des valeurs
particulières d'entêtes que vous avez envie de recommander au ciel.
Il est également intéressant de voir les entêtes envoyé par un serveur web. Si je tape cet URL dans mon navigateur, et utilise deux points entre le mot headers et l'URL:
headers..www.mp3.com
Je verrais ceci:
*Server header:* . HTTP/1.1 200 OK Date: Sat, 21 Jun 2003 21:17:43 GMT Server: Apache/1.3.12m1 (Unix) yasl/2.25 sw/1.7 mod_rdbcookie/1.2 . mod_mp3idver/0.12 rwh/1.1 bw/3.37 rewrite/3.3 include/3.6 Connection: close Transfer-Encoding: chunked Content-Type: text/html
Notez qu'il n'y a aucun secret sur ce serveur. L'en-tête indique clairement le type et la version logicielle du serveur web. Si vous êtes responsable de la mise à jour d'un serveur, rappelez-vous que chaque paquet HTTP le quittant, indique si vous avez appliqué ou non vos patches !.
[modifier] Controle d' accès:
mman supporte également des fonctionnalités qui peuvent être très utiles dans un environnement
géré en réseau. Un, il peut forcer des utilisateurs à s'authentifier avant qu'on leur permette
d'utiliser l'Internet. Je cliquerais sur Config, puis access, et ajouterais une politique.
Si je laisse la section adresses IP vide, la politique d'accès affectera chaque IP qui se relie au
proxy. Je peux alors placer des valeurs dans username et mot de passe. Avant de sauvegarder
cette politique, je dois configurer ce à quoi les utilisateurs auront accès, une fois entré leur
username et mot de passe corrects. Mes choix sont:
- Web interface:
Ceci permettra à des utilisateurs de configurer le proxy, ainsi je laisserais cette option
ouverte.
- Proxy requests:
Si je contrôle cette option, le proxy recevra des demandes des navigateurs qui ont été manuellement
configurés pour utiliser l'adresse IP, et le port du proxy.
- CONNECT requests:
CONNECT est une méthode HTTP qui est souvent désactivée,due à ses risques associés de sécurité.
- HTTP requests:
Je dois me rappeler de choisir cette option, ou les utilisateurs ne pourront pas accéder à des serveurs HTTP.
- Transparent proxying:
Si je contrôle cette option, le proxy arrêtera les demandes Web, même si le navigateur n'a pas été
configuré pour utiliser le proxy. C'est généralement une bonne idée dans un réseau, car elle assure
que les utilisateurs ne pourront contourner votre serveur proxy.
- Allow bypassing:
mman a des mots-clés qui peuvent être inclus avec une URL, pour contourner des restrictions sur
un site particulier. Par exemple, si je veux voir les pop pup pour un site, je pourrais taper
ceci dans mon navigateur : bypass [f] ..www.mp3.com. Si vous ne voulez pas d'utilisateurs
contournant vos filtres, ne choisissez pas cette option.
Si vous décidez de créer votre propre politique, rappelez-vous d'en créer une deuxième qui permettra
en tant qu'administrateur de configurer mman. Si vous projetez de configurer mman sur le
même ordinateur qui exécute le proxy, gardez la politique par défaut, mais placez la sous votre
nouvelle politique, qui affecte vos utilisateurs.
Maintenant, quand les utilisateurs ouvrent leurs navigateurs Web, le navigateur lui-même les
invitera à entrer leur login, que vous avez créé dans votre politique. S'ils le saisissent correctement, ils pourront accéder à l'Internet, selon les paramètres réglés dans votre politique.
Le dernier dispositif que je souhaite mentionner, est limits. Cette configuration permet de contrôler l'accès Internet selon le mois, le jour, et l'heure. Par exemple, vous pourriez configurer une politique d'accès Internet limitée de 9:00 à 17:00 heures, du lundi au vendredi.
[modifier] Conclusion
Il me semble que j'ai à peine effleuré la surface du proxy middleman. Peut-être ai-je piqué
votre intérêt, et vous essayerez cette application vous-même.
Dans un prochain article, je voudrais terminer la série proxy en jetant un oeil aux proxy SMTP.
Dru Lavigne enseigne les technologies Marketbridge à Ottawa, et participe à l'Open Ressource Protocole.

