3. Proxy server
● Proxy = mandataire
● Proxy côté clients
● Proxy installé à la sortie du réseau d'entreprise
● Les navigateurs de l'entreprise passent par le
proxy pour se connecter à internet
● paramétrage des clients pour utiliser le proxy
● Permet
● de cacher les pages les plus fréquemment appelées
● de filtrer les URL
antislashn.org Apache JBoss Squid - Squid 6 - 3 / 62
4. Reverse proxy
internet reverse SERVEUR
proxy WEB
antislashn.org Apache JBoss Squid - Squid 6 - 4 / 62
5. Reverse proxy
● Reverse proxy = mandataire inverse
● surrogate proxy
● Proxy installé côté serveur
● en frontal du serveur web
● pas de paramétrage des clients pour utiliser le serveur
web
● Permet
● de faire du cache
● de la répartition de charge
● ...
antislashn.org Apache JBoss Squid - Squid 6 - 5 / 62
6. Présentation Squid
● Squid
● permet la réalisation d'un cache pour les clients d'un
site web
● peut aussi jouer le rôle de filtre HTTP
● disponible sur de nombreuses plateformes
● distribué sous licence GPL
● site de référence : www.squidguard.org
● initiateurs du projet
– Päl Balzersen
– Lars-Erik Häland
antislashn.org Apache JBoss Squid - Squid 6 - 6 / 62
7. Présentation Squid
● Produit structuré et modulaire
● squid : programme principale de gestion de cache
● autres modules :
– dnsserver : serveur de cache de noms de domaine
– réécriture des URL
– authentification
antislashn.org Apache JBoss Squid - Squid 6 - 7 / 62
8. Présentation Squid
● Protocoles supportés
● HTTP – Hyper Text Transfert Protocol
● FTP – File Transfert Protocol
● SSL – Secur Socket Layer
● ICP - Internet Cache Protocole : protocole généraliste
de communication entre serveurs de cache
● Gopher
● WAIS
● HCTP – Hyper Cache Transfert Protocol : protocole de
cache orienté HTTP
antislashn.org Apache JBoss Squid - Squid 6 - 8 / 62
9. Présentation Squid
● Peut jouer les rôles de
● proxy server
● reverse proxy
– server surrogate
– forward caching proxy
– ne supporte pas tous les protocoles
● Limitations
● Squid n'est pas un firewall
● ne gère pas les protocoles de news, real audio, vidéo
conférence
antislashn.org Apache JBoss Squid - Squid 6 - 9 / 62
10. Installation sous Windows
● Télécharger le binaire stable le plus récent
● http://squid.acmeconsulting.it/index.html
● Décompresser l'archive sous c :
● Un répertoire c:squid est créé
antislashn.org Apache JBoss Squid - Squid 6 - 10 / 62
11. Répertoires et fichiers
● bin/squidclient
● client HTTP pour tester Squid en proxy server
● etc
● répertoire des fichiers de configuration
● libexec
● répertoire contenant des utilitaires utilisés lors de la
compilation de Squid
● libexec/cachemgr.cgi
● Cache Manager : interface web CGI de gestion du
cache de Squid
antislashn.org Apache JBoss Squid - Squid 6 - 11 / 62
12. Répertoires et fichiers
● share
● répertoire de divers fichiers utilisés par Squid
– répertoire des messages d'erreur
● un répertoire par langue
– répertoire des icônes
● var
● répertoire de sauvegarde lors de l'exécution de Squid
● var/cache : répertoire du cache Squid
● var/log : répertoire des logs
antislashn.org Apache JBoss Squid - Squid 6 - 12 / 62
13. Répertoires et fichiers
● sbin/squid
● application Squid
● doit être exécuté en root ou avec des privilèges de
super utilisateur
antislashn.org Apache JBoss Squid - Squid 6 - 13 / 62
14. Gestion du cache
● Squid est un cache proxy
● le proxy agit pour un autre
● le cache stocke les informations les plus utilisées
● Squid
● reçoit les requêtes du client
● transmet la requête au serveur HTTP
● stocke l'information retournée par le serveur
● si l'information est demandée plusieurs fois, c'est le
contenu stocké qui est renvoyée
antislashn.org Apache JBoss Squid - Squid 6 - 14 / 62
15. Gestion du cache
requête info dans le cache ?
oui : l'info est prise CACHE
dans le cache
SQUID non : la requête est transmise
réponse au serveur
info retournée
par le serveur SERVEUR
cache mis à jour
antislashn.org Apache JBoss Squid - Squid 6 - 15 / 62
16. Gestion du cache
● Lors de la réception d'un requête Squid renvoie
une ressource du cache ou demande au serveur
la ressource
● en fonction de l'age de la ressource dans le cache
● si la ressource est "fraîche", elle est envoyée
directement au client
● sinon Squid envoie une requête au serveur
– if-modified-since
antislashn.org Apache JBoss Squid - Squid 6 - 16 / 62
17. Gestion du cache
● Un bon cache nécessite de la mémoire
● Algorithme de cache
● trois types de variables sont utilisées
– variables liées à la ressource dans le cache
– variables fournies par le client
– variables du fichier de configuration
antislashn.org Apache JBoss Squid - Squid 6 - 17 / 62
18. Gestion du cache
● Variables associées à la ressource dans le cache
● AGE : temps écoulé depuis l'entrée dans le cache
● LM_AGE : temps écoulé entre la dernière modification
de la ressource sur le serveur et son entrée dans le
cache
● LM_FACTOR : rapport entre AGE et LM_AGE
– plus LM_FACTOR est grand, plus la ressource du cache à
des chances d'être périmée
● EXPIRES : valeurs éventuelle fournit par le serveur
lors de l'entrée de la ressource dans le cache
– contient la date d'expiration de la ressource
antislashn.org Apache JBoss Squid - Squid 6 - 18 / 62
19. Gestion du cache
● Variables associées à la ressource dans le cache
LM_AGE AGE
temps
dernière entrée de la requête
maj de la ressource client
ressource dans le cache
sur le serveur
antislashn.org Apache JBoss Squid - Squid 6 - 19 / 62
20. Gestion du cache
● Variables fournies par le client
● Squid tient compte de la présence éventuelle de la
variable CLIENT_MAX_AGE
● Variables du fichier de configuration
● directive refresh_pattern
refresh_pattern [-i] <url_regexp> MIN_AGE PERCENT MAX_AGE <options>
● -i : ne pas tenir compte de la casse dans l'expression
régulière
● la minute est utilisée comme unité temporelle
antislashn.org Apache JBoss Squid - Squid 6 - 20 / 62
21. Gestion du cache
● MIN_AGE : durée d'une ressource à prendre en
compte si une durée explicite n'est pas fournie
● PERCENT : pourcentage à prendre en compte
sans durée explicite
● MAX_AGE : age maximum à prendre en compte
sans durée explicite
antislashn.org Apache JBoss Squid - Squid 6 - 21 / 62
22. Gestion du cache
● Exemple de valeurs par défaut
● fichier squid.conf.default
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320
● MAX_AGE envoyée par le client prévaut sur celui
du fichier
● MIN_AGE est prioritaire à EXPIRES renvoyé par
le serveur
antislashn.org Apache JBoss Squid - Squid 6 - 22 / 62
23. Gestion du cache
● Algorithme
● AGE > MAX_AGE : la ressource en cache est
déclarée comme périmée
● AGE <= MIN_AGE : ressource en cache déclarée
comme fraîche
● EXPIRES définit et dépassé : périmée
● EXPIRES définit mais pas dépassé : fraîche
● AGE > MAX_AGE : périmée
● LM_FACTOR < PERCENT : fraîche
● si aucune règle n’aboutit à la détermination : périmée
antislashn.org Apache JBoss Squid - Squid 6 - 23 / 62
24. Fichier de configuration minimal
● Le fichier de configuration squid.conf se trouve
● Windows : c:squidetc.squid.conf
● Ubuntu : /etc/squid/squid.conf
● si installation par compilation et préfixe spécifique le
fichier de conf se trouve sous
${prefix}/etc/squid.conf où ${prefix} est la valeur de
l'option - - prefix lors de la compilation
antislashn.org Apache JBoss Squid - Squid 6 - 24 / 62
25. Fichier de configuration minimal
● Configuration d'un proxy server
● écoute sur le port 3128 par défaut
● fichier etc/squid.conf
cache_dir ufs c:/squid/var/cache 100 16 256
acl my_machine src 192.168.3.48
http_access allow my_machine
http_port 3128
● cache_dir : répertoire swap du cache
– ufs : format de cache Squid
– 100Mo exploitable
– 16 sous répertoires de premier niveau
– 256 sous-répertoires de second niveau
antislashn.org Apache JBoss Squid - Squid 6 - 25 / 62
26. Fichier de configuration minimal
● acl : directive Access Control List (ACL)
● my_machine : nom de la directive ACL
● src : type d'acl basé sur l'adresse IP d'un client
– ici 192.168.3.49
● http_access : règle d'accès sur un type d'accès
HTTP
● allow : permission d'accès pour l'ACL
– ici l'ACL nommé my_machine
● http_port : port d'écoute de Squid
antislashn.org Apache JBoss Squid - Squid 6 - 26 / 62
27. Fichier de configuration minimal
● Test de la configuration
● configurer le navigateur pour utiliser le proxy
– indiquer l'IP de la machine où Squid est installé et le port du
proxy (3128 par défaut)
antislashn.org Apache JBoss Squid - Squid 6 - 27 / 62
28. Fichier de configuration minimal
● Test de la configuration
● démarrer Squid
● tester une URL existante dans le navigateur
● tester une URL inexistante dans le navigateur
antislashn.org Apache JBoss Squid - Squid 6 - 28 / 62
29. Directives de base : http_port
● http_port : port d'écoute de Squid
● par défaut écoute sur toutes les interfaces, sur le port
3128
● on peut préciser
– une adresse IP
– un nom de machine
– un nom de domaine
– une URL
● plusieurs directives http_port peuvent être
présentes
antislashn.org Apache JBoss Squid - Squid 6 - 29 / 62
31. Directives de base : acl
● Access Control List
● directive acl
● directive de contrôle d'accès
– utilisé par d'autre directives comme http_access, cache, …
● chaque ACL
– possède un nom
– possède un type, suivi de sa valeur
● la valeur peut être contenue dans un autre fichier
acl ACL_NAME ACL_TYPE valuec
acl ACL_NAME ACL_TYPE "path/to/filename"
antislashn.org Apache JBoss Squid - Squid 6 - 31 / 62
32. Directives de base : acl
● ACL pour le domaine example.com
acl example_site dstdomain example.com
● si plusieurs domaines sont utilisés pour un même nom
acl example_sites dstdomain example.com example.com example.net
acl example_sites dstdomain example.com example.com
acl example.sites dstdomain example.net
acl example_site dstdomain "/opt/sqid/sites.txt"
example.com
example.net
antislashn.org Apache JBoss Squid - Squid 6 - 32 / 62
33. Directives de base : acl
● Les noms des ACL
● ne sont pas case-sensitive par défaut
– peut-être changés avec une installation par compilation
● ils sont multivalués
● les valeurs sont agrégées les unes aux autres
● Les ACL n'ont pas d'utilité en soi, elles sont
utilisées par les directives d'accès
antislashn.org Apache JBoss Squid - Squid 6 - 33 / 62
34. Directives de base : acl
● Types ACL
● src : ACL basée sur l'IP du client
● dst : ACL basée sur l'IP demandée dans la requête
● srcdomain : ACL basée sur le domaine du client
● dstdomain : ACL basée sur le domaine demandé
● port : ACL basée sur le port de destination
● proto : ACL basée sur un protocole
● consulter la documentation pour les autres types
– time, url_regex, browser, ...
antislashn.org Apache JBoss Squid - Squid 6 - 34 / 62
35. Directives de base : http_access
● Syntaxe de base
http_access allow|denay ACL_NAME
● autorise ou non l'accès HTTP sur AC_NAME
● Aucune ligne http_access n'est présente
● aucun accès n'est possible
● Si aucune ligne d'accès ne correspond
● l'opposé de la dernière ligne est appliquée
– si cette dernière ligne autorise l'accès, le comportement par
défaut sera de bloquer l'accès
antislashn.org Apache JBoss Squid - Squid 6 - 35 / 62
36. Directives de base : http_access
● Bonne pratique
● mettre en dernière ligne http_access allow all
– ou http_access deny all
● le comportement opposé sera utilisé si aucune ligne
d'accès ne correspond
antislashn.org Apache JBoss Squid - Squid 6 - 36 / 62
37. Directives de base : http_access
● Exemples
acl my_machines src 192.168.3.49 192.168.3.48
http_access allow my_machines
● autorise l'accès de certaines machines, et bloque les
autres
antislashn.org Apache JBoss Squid - Squid 6 - 37 / 62
38. Directives de base :
http_reply_access
● Contrôle la réponse reçu du serveur web
● syntaxe similaire à http_access
acl my_machine src 192.0.2.21
http_access allow my_machine
http_reply_access deny my_machine
– autorise les accès de la machine 192.0.2.21
– bloque les accès vers les sites installés sur la machine
192.0.2.21
antislashn.org Apache JBoss Squid - Squid 6 - 38 / 62
39. Directives de base
● Autres directives d'accès
● icp_access : accès ICP (Internet Cache Protocol)
● htcp_access : accès HTCP (HyperText Cache
Protocol)
● htcp_clr_access : accès HTCP pour supprimer les
caches
– requête CLR
● autres directives
– miss_access, ident_lookup_access
antislashn.org Apache JBoss Squid - Squid 6 - 39 / 62
40. Directives de base
● Quelques exemples
acl bad_clients src 192.0.2.0/24
miss_access deny bad_clients
miss_access allow all
● bad_clients : machines de 192.0.2.0 à 192.0.2.255
– cf. https://en.wikipedia.org/wiki/IPv4_subnetting_reference
● interdit aux machines bad_clients d'utiliser le serveur
proxy comme proxy parent
● autorise les autres machines qui passent l'accès HTTP
(http_access) d'utiliser le serveur proxy comme
parent
antislashn.org Apache JBoss Squid - Squid 6 - 40 / 62
41. Cache mémoire
● Les documents mis en cache RAM sont servis
beaucoup plus rapidement que ceux en cache
disque
● l'espace RAM est moins important que l'espace disque
● l'espace RAM ne peut pas recevoir l'ensemble des
documents web à mettre en cache
antislashn.org Apache JBoss Squid - Squid 6 - 41 / 62
42. Cache mémoire
● Objets mis en cache RAM
● ressources de la requête courante
● ressources les plus demandées
– sont mis sur le disque si besoin de RAM
● ressources d'erreur
– réponse 404 par exemple
– sont mis sur le disque si besoin de RAM
antislashn.org Apache JBoss Squid - Squid 6 - 42 / 62
43. Cache mémoire
● Taille mémoire
● par défaut : 256 Mb
● lors de la définition de la taille du cache RAM
– tenir compte des besoins des autres applications
● sous Linux : free -m
– par exemple pour 4 Go
● l’ensemble des processus utilise 1 Go
● moins 512 Ko si les processus ont besoin de plus de mémoire
● le cache mémoire peut être dimensionné à 2,5 Go
cache_mem 2500 MB
antislashn.org Apache JBoss Squid - Squid 6 - 43 / 62
44. Configuration du moniteur Squid
● Squid est livré avec une interface web de gestion
du cache
● cachemgr
● Configuration du serveur Apache pour activer
cachemgr
● dans le fichier httpd.conf
ScriptAlias /Squid/cgi-bin/cachemgr.cgi C:squidlibexeccachemgr.cgi
<Location /Squid/cgi-bin/cachemgr.cgi>
order allow,deny
allow from 127.0.0.1
</Location>
antislashn.org Apache JBoss Squid - Squid 6 - 44 / 62
45. Configuration du moniteur Squid
● Dans le fichier de configuration de Squid il faut
ajouter les lignes suivantes
cache_mgr admin@antislashn.org
cachemgr_passwd franck all
● Redémarrer Apache et Squid et tester l'URL
● http://localhost/Squid/cgi-bin/cachemgr.cgi
antislashn.org Apache JBoss Squid - Squid 6 - 45 / 62
46. Configuration du moniteur Squid
valeur de la directive cache_mgr
valeur de la directive cachemgr_passwd
antislashn.org Apache JBoss Squid - Squid 6 - 46 / 62
47. Configuration du moniteur Squid
● Le moniteur propose alors un ensemble de liens
antislashn.org Apache JBoss Squid - Squid 6 - 47 / 62
48. Squid configuré en surrogate server
● Surrogate server, ou reverse proxy, ou HTTP
accelerator
● sert des requêtes pour le compte d'un serveur
Squid
internet en mode SERVEUR
HTTP WEB
accelerator
on sert ce qui vient du cache
on cache tout ce que l'on peut
antislashn.org Apache JBoss Squid - Squid 6 - 48 / 62
49. Squid configuré en surrogate server
● Squid doit écouter sur le port 80 pour répondre
aux requêtes HTTP
● attention si le serveur web est sur la même machine
– Squid peut écouter sur le port 80 de l'adresse IP publique
– le serveur HTTP peut écouter sur le port 80 de la boucle
locale (127.0.0.1)
antislashn.org Apache JBoss Squid - Squid 6 - 49 / 62
50. Squid configuré en surrogate server
● Directive http_port
● syntaxe : http_port 80 accel [options]
– 80 : port d'écoute
– accel : mode surrogate server
● Options de la directive http_port
● defaultsite : site par défaut à utilisé si nom
précisé dans l'en-tête HTTP
● vhost : support des domaines multiples
● vport : support des domaines multiples basé sur IP
antislashn.org Apache JBoss Squid - Squid 6 - 50 / 62
51. Squid configuré en surrogate server
● Options de la directive http_port
● allow-direct: permet le direct forwarding
● ignore-cc : ignore les en-tête HTTP Cache-
control
antislashn.org Apache JBoss Squid - Squid 6 - 51 / 62
52. Squid configuré en surrogate server
● Directive https_port
● syntaxe :
https_port [IP_ADDRESS :]port accel cert=cert.pem
[key=key.pem][options]
● cert : chemin absolu vers le certificat SSL contenant
la clé publique et la clé privée
– si cert.pem ne contient pas la clé privée, key contient
chemin vers la clé privée
antislashn.org Apache JBoss Squid - Squid 6 - 52 / 62
53. Squid configuré en surrogate server
● Options de la directive https_port
● defaultsite : site par défaut à utilisé si nom
précisé dans l'en-tête HTTPS
● vhost : support des domaines multiples
● version : version SSL – entier
– 1 : détection automatique (par défaut)
– 2 : SSLv2
– 3 : SSLv3
– 4 : TLSv1
● cf. la documentation pour les autres options
antislashn.org Apache JBoss Squid - Squid 6 - 53 / 62
54. Squid configuré en surrogate server
● Directive cache_peer
● indique comment Squid contact ses pairs et comment
il communique avec eux
● syntaxe
– cache_peer hostname_or_ip type port icp_port [options]
– hostname_or_ip : adresse du proxy, serveur, ou cache
cible
– type : type de cible (parent, sibling ou multicast)
– port : port HTTP de la cible
– icp_port : port ICP ou HTCP de la cible
● 0 pour désactiver
antislashn.org Apache JBoss Squid - Squid 6 - 54 / 62
55. Squid configuré en surrogate server
● Directive cache_peer
● quelques options
– no-query : déselectionne ICP/HTCP
– round-robin : algo appliqué s'il y plusieurs parents
– originserver : le pair est vu comme un serveur web
– name : nom donné au pair cible
antislashn.org Apache JBoss Squid - Squid 6 - 55 / 62
56. Squid configuré en surrogate server
● Directive cache_peer_access
● permet de déterminer avec quelle règle Squid fait
suivre, ou non, une requête
● syntaxe
– cache_peer_access peername allow|deny [!] acl_name
antislashn.org Apache JBoss Squid - Squid 6 - 56 / 62
57. Squid configuré en interception proxy
● Le mode server proxy nécessite une configuration
des navigateurs
● Le mode mode "interception proxy" est une mode
de "server proxy" sans configuration des
navigateurs
● autres nom : transparent caching, cache redirection,
interception caching
antislashn.org Apache JBoss Squid - Squid 6 - 57 / 62
58. Squid configuré en interception proxy
● Le mode server proxy nécessite une configuration
des navigateurs
● Le mode mode "interception proxy" est une mode
de "server proxy" sans configuration des
navigateurs
● autres nom : transparent caching, cache redirection,
interception caching
antislashn.org Apache JBoss Squid - Squid 6 - 58 / 62
59. Squid configuré en interception proxy
● En général ce mode est configuré à l'aide d'un
routeur qui re-route les demandes des clients vers
Squid
● Avantages
● pas de configuration des clients
● meilleur contrôle des utilisateurs, car ils ne peuvent
pas contourner le serveur proxy
● le routeur peut faire suivre les requêtes vers Internet si
le serveur Squid tombe
antislashn.org Apache JBoss Squid - Squid 6 - 59 / 62
60. Squid configuré en interception proxy
● Inconvénients
● violation des standards TCP/IP
– les routeurs et switchs sont censés faire suivre les paquets
vers l'hôte destinataire
● problèmes potentiels de routage
– si les routes sont déterminées dynamiquement
● pas d'authentification
– le proxy ne fonctionne pas comme un navigateur, et le
navigateur ne "savent pas" qu'ils ne sont pas connectés à un
serveur
antislashn.org Apache JBoss Squid - Squid 6 - 60 / 62
61. Squid configuré en interception proxy
● Inconvénients
● support uniquement de HTTP
– Squid ne sait intercepter que le trafic HTTP
● problèmes sur les routes
– si les routes sont déterminées dynamiquement
● exposition des clients
– car Squid ne peut intercepter que HTTP, le client doit
toujours aller directement sur Internet pour HTTPS, FTP, ...
antislashn.org Apache JBoss Squid - Squid 6 - 61 / 62