Squid

62
Squid

description

Présentation de Squid. Ce chapitre fait partie d'une formation "Intégration Apache - JBoss - Squid"

Transcript of Squid

Page 1: Squid

Squid

Page 2: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 2 / 62

Proxy server

Page 3: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 3 / 62

Proxy server

● Proxy = mandataire

● Proxy côté clients

● Proxy installé à la sortie du réseau d'entreprise

● Les navigateurs de l'entreprise passent par leproxy 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

Page 4: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 4 / 62

Reverse proxy

internet SERVEURWEB

reverseproxy

Page 5: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 5 / 62

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 serveurweb

● Permet

● de faire du cache

● de la répartition de charge

● ...

Page 6: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 6 / 62

Présentation Squid

● Squid

● permet la réalisation d'un cache pour les clients d'unsite 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

Page 7: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 7 / 62

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

Page 8: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 8 / 62

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éralistede communication entre serveurs de cache

● Gopher

● WAIS

● HCTP – Hyper Cache Transfert Protocol : protocole decache orienté HTTP

Page 9: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 9 / 62

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éoconférence

Page 10: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 10 / 62

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éé

Page 11: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 11 / 62

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 lacompilation de Squid

● libexec/cachemgr.cgi

● Cache Manager : interface web CGI de gestion ducache de Squid

Page 12: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 12 / 62

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

Page 13: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 13 / 62

Répertoires et fichiers

● sbin/squid

● application Squid

● doit être exécuté en root ou avec des privilèges desuper utilisateur

Page 14: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 14 / 62

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 lecontenu stocké qui est renvoyée

Page 15: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 15 / 62

Gestion du cache

SQUID

CACHE

SERVEUR

requête info dans le cache ?

oui : l'info est prisedans le cache

réponsenon : la requête est transmiseau serveur

info retournéepar le serveurcache mis à jour

Page 16: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 16 / 62

Gestion du cache

● Lors de la réception d'un requête Squid renvoieune ressource du cache ou demande au serveurla ressource

● en fonction de l'age de la ressource dans le cache

● si la ressource est "fraîche", elle est envoyéedirectement au client

● sinon Squid envoie une requête au serveur

– if-modified-since

Page 17: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 17 / 62

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

Page 18: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 18 / 62

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 modificationde la ressource sur le serveur et son entrée dans lecache

● 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 serveurlors de l'entrée de la ressource dans le cache

– contient la date d'expiration de la ressource

Page 19: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 19 / 62

Gestion du cache

● Variables associées à la ressource dans le cache

temps

LM_AGE AGE

dernièremaj de laressource

sur le serveur

entrée de laressource

dans le cache

requêteclient

Page 20: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 20 / 62

Gestion du cache

● Variables fournies par le client

● Squid tient compte de la présence éventuelle de lavariable CLIENT_MAX_AGE

● Variables du fichier de configuration

● directive refresh_pattern

● -i : ne pas tenir compte de la casse dans l'expressionrégulière

● la minute est utilisée comme unité temporelle

refresh_pattern [-i] <url_regexp> MIN_AGE PERCENT MAX_AGE <options>

Page 21: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 21 / 62

Gestion du cache

● MIN_AGE : durée d'une ressource à prendre encompte si une durée explicite n'est pas fournie

● PERCENT : pourcentage à prendre en comptesans durée explicite

● MAX_AGE : age maximum à prendre en comptesans durée explicite

Page 22: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 22 / 62

Gestion du cache

● Exemple de valeurs par défaut

● fichier squid.conf.default

● MAX_AGE envoyée par le client prévaut sur celuidu fichier

● MIN_AGE est prioritaire à EXPIRES renvoyé parle serveur

refresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440 0% 1440refresh_pattern -i (/cgi-bin/|\?) 0 0% 0refresh_pattern . 0 20% 4320

Page 23: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 23 / 62

Gestion du cache

● Algorithme

● AGE > MAX_AGE : la ressource en cache estdéclarée comme périmée

● AGE <= MIN_AGE : ressource en cache déclaréecomme 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

Page 24: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 24 / 62

Fichier de configuration minimal

● Le fichier de configuration squid.conf se trouve

● Windows : c:\squid\etc.squid.conf

● Ubuntu : /etc/squid/squid.conf

● si installation par compilation et préfixe spécifique lefichier de conf se trouve sous${prefix}/etc/squid.conf où ${prefix} est la valeur del'option - - prefix lors de la compilation

Page 25: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 25 / 62

Fichier de configuration minimal

● Configuration d'un proxy server

● écoute sur le port 3128 par défaut

● fichier etc/squid.conf

● 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

cache_dir ufs c:/squid/var/cache 100 16 256acl my_machine src 192.168.3.48http_access allow my_machinehttp_port 3128

Page 26: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 26 / 62

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èsHTTP

● allow : permission d'accès pour l'ACL

– ici l'ACL nommé my_machine

● http_port : port d'écoute de Squid

Page 27: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 27 / 62

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 duproxy (3128 par défaut)

Page 28: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 28 / 62

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

Page 29: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 29 / 62

Directives de base : http_port

● http_port : port d'écoute de Squid

● par défaut écoute sur toutes les interfaces, sur le port3128

● on peut préciser

– une adresse IP

– un nom de machine

– un nom de domaine

– une URL

● plusieurs directives http_port peuvent êtreprésentes

Page 30: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 30 / 62

Directives de base : http_port

● Exemples

http_port 192.0.2.25:8080http_port lan1.example.com:3128http_port lan2.example.com:8081

http_port 8080

http_port 3128 intercept

http_port 80 accel default=www.example.com

Page 31: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 31 / 62

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"

Page 32: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 32 / 62

Directives de base : acl

● ACL pour le domaine example.com

● si plusieurs domaines sont utilisés pour un même nom

acl example_site dstdomain example.com

acl example_sites dstdomain example.com example.com example.net

acl example_sites dstdomain example.com example.comacl example.sites dstdomain example.net

acl example_site dstdomain "/opt/sqid/sites.txt"

example.comexample.net

Page 33: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 33 / 62

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 sontutilisées par les directives d'accès

Page 34: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 34 / 62

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, ...

Page 35: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 35 / 62

Directives de base : http_access

● Syntaxe de base

● 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 pardéfaut sera de bloquer l'accès

http_access allow|denay ACL_NAME

Page 36: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 36 / 62

Directives de base : http_access

● Bonne pratique

● mettre en dernière ligne

– ou

● le comportement opposé sera utilisé si aucune ligned'accès ne correspond

http_access allow all

http_access deny all

Page 37: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 37 / 62

Directives de base : http_access

● Exemples

● autorise l'accès de certaines machines, et bloque lesautres

acl my_machines src 192.168.3.49 192.168.3.48http_access allow my_machines

Page 38: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 38 / 62

Directives de base :http_reply_access● Contrôle la réponse reçu du serveur web

● syntaxe similaire à http_access

– autorise les accès de la machine 192.0.2.21

– bloque les accès vers les sites installés sur la machine192.0.2.21

acl my_machine src 192.0.2.21http_access allow my_machinehttp_reply_access deny my_machine

Page 39: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 39 / 62

Directives de base

● Autres directives d'accès

● icp_access : accès ICP (Internet Cache Protocol)

● htcp_access : accès HTCP (HyperText CacheProtocol)

● htcp_clr_access : accès HTCP pour supprimer lescaches

– requête CLR

● autres directives

– miss_access, ident_lookup_access

Page 40: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 40 / 62

Directives de base

● Quelques exemples

● 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 serveurproxy comme proxy parent

● autorise les autres machines qui passent l'accès HTTP(http_access) d'utiliser le serveur proxy commeparent

acl bad_clients src 192.0.2.0/24miss_access deny bad_clientsmiss_access allow all

Page 41: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 41 / 62

Cache mémoire

● Les documents mis en cache RAM sont servisbeaucoup plus rapidement que ceux en cachedisque

● l'espace RAM est moins important que l'espace disque

● l'espace RAM ne peut pas recevoir l'ensemble desdocuments web à mettre en cache

Page 42: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 42 / 62

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

Page 43: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 43 / 62

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

Page 44: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 44 / 62

Configuration du moniteur Squid

● Squid est livré avec une interface web de gestiondu cache

● cachemgr

● Configuration du serveur Apache pour activercachemgr

● dans le fichier httpd.conf

ScriptAlias /Squid/cgi-bin/cachemgr.cgi C:\squid\libexec\cachemgr.cgi<Location /Squid/cgi-bin/cachemgr.cgi>

order allow,denyallow from 127.0.0.1

</Location>

Page 45: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 45 / 62

Configuration du moniteur Squid

● Dans le fichier de configuration de Squid il fautajouter les lignes suivantes

● Redémarrer Apache et Squid et tester l'URL

● http://localhost/Squid/cgi-bin/cachemgr.cgi

cache_mgr [email protected]_passwd franck all

Page 46: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 46 / 62

Configuration du moniteur Squid

valeur de la directive cache_mgr

valeur de la directive cachemgr_passwd

Page 47: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 47 / 62

Configuration du moniteur Squid

● Le moniteur propose alors un ensemble de liens

Page 48: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 48 / 62

Squid configuré en surrogate server

● Surrogate server, ou reverse proxy, ou HTTPaccelerator

● sert des requêtes pour le compte d'un serveur

internet SERVEURWEB

Squiden mode

HTTPaccelerator

on cache tout ce que l'on peut

on sert ce qui vient du cache

Page 49: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 49 / 62

Squid configuré en surrogate server

● Squid doit écouter sur le port 80 pour répondreaux 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 bouclelocale (127.0.0.1)

Page 50: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 50 / 62

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 nomprécisé dans l'en-tête HTTP

● vhost : support des domaines multiples

● vport : support des domaines multiples basé sur IP

Page 51: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 51 / 62

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

Page 52: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 52 / 62

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 contenantla clé publique et la clé privée

– si cert.pem ne contient pas la clé privée, key contientchemin vers la clé privée

Page 53: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 53 / 62

Squid configuré en surrogate server

● Options de la directive https_port

● defaultsite : site par défaut à utilisé si nompré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

Page 54: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 54 / 62

Squid configuré en surrogate server

● Directive cache_peer

● indique comment Squid contact ses pairs et commentil communique avec eux

● syntaxe– cache_peer hostname_or_ip type port icp_port [options]

– hostname_or_ip : adresse du proxy, serveur, ou cachecible

– 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

Page 55: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 55 / 62

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

Page 56: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 56 / 62

Squid configuré en surrogate server

● Directive cache_peer_access

● permet de déterminer avec quelle règle Squid faitsuivre, ou non, une requête

● syntaxe– cache_peer_access peername allow|deny [!] acl_name

Page 57: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 57 / 62

Squid configuré en interception proxy

● Le mode server proxy nécessite une configurationdes navigateurs

● Le mode mode "interception proxy" est une modede "server proxy" sans configuration desnavigateurs

● autres nom : transparent caching, cache redirection,interception caching

Page 58: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 58 / 62

Squid configuré en interception proxy

● Le mode server proxy nécessite une configurationdes navigateurs

● Le mode mode "interception proxy" est une modede "server proxy" sans configuration desnavigateurs

● autres nom : transparent caching, cache redirection,interception caching

Page 59: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 59 / 62

Squid configuré en interception proxy

● En général ce mode est configuré à l'aide d'unrouteur qui re-route les demandes des clients versSquid

● Avantages

● pas de configuration des clients

● meilleur contrôle des utilisateurs, car ils ne peuventpas contourner le serveur proxy

● le routeur peut faire suivre les requêtes vers Internet sile serveur Squid tombe

Page 60: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 60 / 62

Squid configuré en interception proxy

● Inconvénients

● violation des standards TCP/IP

– les routeurs et switchs sont censés faire suivre les paquetsvers 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 lenavigateur ne "savent pas" qu'ils ne sont pas connectés à unserveur

Page 61: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 61 / 62

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 doittoujours aller directement sur Internet pour HTTPS, FTP, ...

Page 62: Squid

antislashn.org Apache JBoss Squid - Squid 6 - 62 / 62

Ressources

● Squid Proxy Server 3.1 Beginners Guide– auteur : Kulbir Saini

– éditeur : PACKT Pubisshing

– PDF open source

● Squid - The definitive guide– auteur : Duane Wessels

– éditeur : O'Reilly