Squid

Post on 21-Jun-2015

2.395 views 0 download

description

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

Transcript of Squid

Squid

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

Proxy server

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

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

Reverse proxy

internet SERVEURWEB

reverseproxy

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

● ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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>

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

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

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

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

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

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

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)

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

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

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

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"

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

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

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

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

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

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

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

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

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

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

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

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

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>

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 admin@antislashn.orgcachemgr_passwd franck all

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

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

Configuration du moniteur Squid

● Le moniteur propose alors un ensemble de liens

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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