Vous êtes sur la page 1sur 46

Proxy cache

Squid
INTRODUCTION
Premier chapitre : PRESENTATION DE SQUID :
1. Dfinition du Proxy cache .

2. La fonction du Proxy .

3. La fonction de cache .

4. Dfinition de Squid.

5. Squid en tant que Proxy ..

6. Squid en tant que cache....

7. Filtrage..............................

8. INSTALLATION ET CONFIGURATION.

Deuxime chapitre : TRAVAUX EFFECTUS

Conclusion33
INTRODUCTION

Dans le cadre de Votre formation lEcole SUPTECHNOLOGY,


vous tes appels raliser un mini projet afin de complter vos connaissances
thoriques acquises au sein de lcole et mieux appliquer votre savoir faire et
savoir tre.

Le prsent document constitue lun de vos minis projets, votre projet


consiste installer et configurer un serveur nomme Serveur Squid , dans le
rseaux de votre cole suptechnology .
Le rseau dans lequel vous allez travailler sous la forme suivante :

Passerelle : 172.16.1.254
Squid : 172.16.1.3
De ce qui concerne le domaine de travail, il est limit au niveau de sous rseau
suptechnology.lan (ENS) et consiste avoir une machine linux sur laquelle
tourne un serveur Squid et des machines Windows cliente.
PRESENTATION DE SQUID :

9. Dfinition du Proxy-cache :

On dnomme proxy-cache toute solution (logicielle ou matrielle)


permettant dassurer deux rles essentiels :

a. La fonction du proxy :

Il sagit dune fonction de scurit gnralement effectue par des


firewalls. Elle permet de masquer lorigine dune requte vers un serveur et
deffectuer un certain nombre de contrles sur les flux (contrle daccs,
filtrage, journalisation).

Un Proxy peut agir en deux modes diffrents : serveur ou transparent.

o En mode serveur, une configuration sera requise sur les postes clients
afin d'indiquer l'adresse du serveur et le port sur lequel il doit s'y
connecter.
o En mode transparent, les clients n'auront pas connaissance du proxy
et leurs requtes seront alors formes comme lors d'une
communication sans intermdiaire.

b. La fonction de cache :

La fonction de cache nassure pas de service de scurit mais permet le


stockage local des donnes les plus demandes afin de fournir directement
aux clients ces donnes sans raliser de nouvelles requtes vers le serveur
distant. Elle permet de diminuer les temps de rponse et la consommation
de la bande passante.

2. Dfinition de Squid
Squid est un serveur proxy/cache libre trs connu du monde Open
Source, ce serveur est trs complet et propose une multitude d'options et de
services qui lui ont permis d'tre trs largement adopt par les
professionnels mais aussi dans un grand nombre d'cole ou administrations
travaillant avec systmes de type Unix.

a. Squid en tant que proxy :

Le rle de Squid est le plus souvent de partager un accs internet entre


plusieurs clients d'un rseau priv. A la diffrence d'un routeur, celui-ci se
substituera ses clients aux yeux des serveurs distants.

Squid en tant que proxy est capable de s'affranchir de bien d'autres


tches :

Filtrage des requtes des clients ;


Restriction de l'accs internet ;
Authentification des clients ;
Acclration des accs aux ressources grce au systme de cache ;
Rcriture des requtes vers internet.

Mis part les fonctions essentielles d'un proxy, Squid propose beaucoup
d'autres services. Ces services ont trs largement contribu faire de Squid
une rfrence en matire de proxy dans le monde des serveurs de type Unix.

b. Squid en tant que cache

Le cache est bien plus qu'un service rendu par Squid vrai dire. Il fait
partie intgrante de Squid et justifie lui seul l'utilisation de Squid pour un
rseau partageant un mme accs Internet.
Le rle d'un serveur cache est de stocker les objets demands par les
utilisateurs pour la premire fois via les protocoles HTTP, FTP. Ainsi, lors
des demandes futures sur un objet prsent en cache, le serveur de cache
n'aura pas besoin d'aller chercher cet objet sur internet et retournera
directement celui qu'il a en mmoire. Les objets stocks peuvent tre de tout
type : texte, image, vido, ...

Ce mcanisme procure deux grands avantages non ngligeables:

Une conomie de bande passante d'autant plus grande que le volume


de donnes reprsente par l'objet. Le nombre de requte qui pourront
tre dtournes vers le cache dpend de plusieurs paramtres comme la
dure d'activit du cache, la dure de vie des objets dans le cache, le
nombre de clients et de requtes sur le rseau, etc .
Un gain de temps pour les utilisateurs internet. Effectivement lorsque
le cache prend en charge une requte, le dlais d'accs un objet
devient celui de la recherche de cet objet dans le cache + les temps
d'accs rseau.
3. Filtrage

Autorisation d'accs par filtrage :

Squid offre la possibilit de filtrer les requtes des clients. Ainsi, il est
possible de restreindre l'accs aux ressources en fonction de plusieurs
paramtres diffrents. Voici une liste de paramtre pouvant intervenir dans
le rejet d'une requte rpondant l'un des critre :

L'URL contient un mot interdit. Cela permet de rejeter toute url


contenant "msn" par exemple ;
L'adresse IP source/destinataire est interdite ;

Le domaine de source/destination est interdit ou contient un mot


interdit ;

La date de la demande. Par exemple, Squid peut interdire l'accs


Internet durant certaines heures (comme le soir entre 20h et 6h du
matin) ;

Le port de destination ;

Le protocole utilis. Peut permettre de bloquer les transferts FTP par


exemple ;

La mthode utilise. Peut permettre d'empcher la mthode HTTP


comme POST par exemple ;

Le type du navigateur utilis. Peut permettre d'empcher l'utilisation


d'IE par exemple.

Squid n'est capable de filtrer que les requtes de ses clients, pas le
contenu de ce qu'il relaye ceux-ci (bien qu'un proxy filtrant le contenu de
page revienne multiplier la charge d'administration par le nombre
d'interdiction malencontreuse).

Rcriture des enttes de requtes :

Il est possible de rcrire les enttes des requtes des clients. Cela a
pour utilit par exemple de rendre les demandes anonymes. Ceci se fait trs
simplement en indiquant dans la configuration de Squid quels sont les
champs HTTP autoris et en prcisant que tous les autres ne le sont pas. Il
est aussi possible de remplacer le contenu d'un champ.

Voici un schma reprsentant le rle de Squid :


Installation
2.1. Tlchargement

Nous devons tlcharger les sources de Squid sur :


http://www.squid-cache.org/Versions/v2/2.5/

Il s'agit de la version stable mais nous pouvons bien sr nous aventurer sur la
version de dveloppement.

2.2. Compilation et Installation

- Dans le rpertoire o nous avons tlcharg le TarBall on va taper la


commande suivante :
greg@ades:~$ cd /var/tmp/

- Dcompresser l'archive :
greg@ades:/var/tmp$ tar zxvf squid-2.5.STABLE2.tar.gz
ou bien :
greg@ades:/var/tmp$ tar jxvf squid-2.5.STABLE2.tar.bz2
Selon notre cas.

-Cration du makefile :
greg@ades:/var/tmp$ cd squid-2.5.STABLE2
greg@ades:/var/tmp/squid-2.5.STABLE2$ ./configure -enable-err-
language=French

- Compilation :
greg@ades:/var/tmp/squid-2.5.STABLE2$ make all

- Installation :
greg@ades:/var/tmp/squid-2.5.STABLE2$ su
Password:
ades:/var/tmp/squid-2.5.STABLE2# make install
Configuration :
3.1. Les fichiers de configuration

Les fichiers de configuration se trouvent dans /usr/local/squid/etc/


squid.conf (fichier de configuration globale de squid)
mime.conf (fichier utilis par squid ne pas diter)
Nous devrions avoir un squid.conf par dfaut assez imposant (plus de 4000
lignes), cest dans ce fichier que ladministrateur peut configurer son rseau.
I. INSTALLATION DE REDHAT 9:
Aprs linsertion du 1er cd, un cran d'accueil saffiche qui nous
demande si on veut lancer l'installeur de manire graphique bien sr on va
appuyer sur la touche Entre. Le noyau se charge et notre configuration est
dtecte (des lignes de commandes apparaissent sur notre cran).

Ensuite, on a test les cd ceci nous a permis de gagner du temps. Une


fois le 1er cd est test il nous indique que le CD est PASS c'est--dire quil
est complet, et On a appuy sur la touche Entre. Nous avons ensuite le
choix entre :

insrer lautre cd et le tester TEST


continuer l'installation Continue

On a test les 3 cd (environ 5 minutes par cd) ds le dbut, et lanc


l'installation aprs.

Une fois les 3 cd tests on a slectionn Continue avec les flches du


clavier et appuy sur la touche Entre. Une boite de dialogue nous
demande de remettre le cd1, on le met donc et on appuye sur la touche
Entre. Le message suivant s'affiche : Running Anaconda, the red hat Linux
system installer-please wait... (cela dure environ 2 minutes) puis l'installeur
dtecte les priphriques ncessaires au lancement du serveur graphique
(carte graphique, moniteur, souris) et lance ce serveur (2 minutes).

Une page s'affiche, compose dune colonne d'aide gauche qui sera
prsente tout au long de l'installation, et de l'installeur au centre. cette
premire page nous renseigne sur lendroit o se trouve une copie du
manuel d'installation, lorsquon Clique sur NEXT on choisi aprs la
Langue qui nous convient (Franais), et on clique de nouveau sur NEXT.
Il nous propose le clavier :
french
french Canadian

french latin 0

french latin 1 (choix par dfaut)

french (pc) ....

On choisi french et on clique sur SUIVANT. Nous allons ensuite


choisir notre type dinstallation, les trois types proposs sont :

bureau personnel
poste de travail

serveur

personnalise

Dans notre cas on va choisir une installation de type serveur car elle est
plus approprie si on veut que notre systme fonctionne comme un serveur
bas sur Linux.

L'tape suivante tait le partitionnement. Linstalleur nous propose un


partitionnement :

Automatique qui propose 3 choix (supprimer toutes les partitions


Linux du systme, Supprimer toutes les partitions du systme,
conserver toutes les partitions et utiliser l'espace libre)
Partitionnement manuel.

On a choisi la 2me mthode, le partitionnement manuel. On a fait


deux partitions pour accueillir notre Red Hat 9 :
une pour le systme prononcez: / root de l'anglais racine.
une autre pour les fichiers prononcez :/swap.

On voit donc nos partitions qui se suivent sur le disque, et on a cliqu


sur la premire libre (/dev/sdc), ensuite on a cliqu sur nouveau ,on a dfini
le point de montage / en cliquant sur la liste droulante (on a choisi swap),
comme systme de fichier on a choisi ext3, et la taille quon lui a attribu
est (700), ensuite on a coch ventuellement la vrification des blocs
dfectueux, et cliqu sur Valider. Et de mme avec la partition /root, on lui
attribut lespace mmoire restant.

Ltape suivante tait de Choisir le chargeur de dmarrage :

grub (choix par dfaut)


lilo

rien (dans ce cas on fera une disquette de dmarrage la fin de


l'installation).

On a laiss le choix par dfaut et on a cliqu sur suivant.

Ensuite, il nous propose de configurer la carte ethernet qui est reconnu.


Il nous a demand une adresse IP(172.16.1.3), le masque de sous
rseau(255.255.0.0), le nom de la machine(serveur), ladresse du
DNS(172.16.1.1) et ladresse de la passerelle(172.16.1.254). Ensuite, il
nous propose naturellement de configurer le niveau du pare-feux :

lv
moyen

pas de pare-feux
et ventuellement de personnaliser ces rglages en dfinissant un
priphrique sr, et d'autoriser diffrents services en entre, et de
slectionner les paquetages dont on a besoin :

www
ftp

ssh

dhcp

mail

telnet

autres ports

Aprs on a cliqu sur suivant,Par la suite on a ajout le support de langues


supplmentaires et cliqu sur Suivant. Il faut Slectionner le fuseau horaire
puis cliquer sur Suivant.

Ensuite linstalleur nous demande de dfinir un mot de passe pour


l'utilisateur root qui nous permettra par la suite de configurer lordinateur.

L'installeur nous a propos une srie de paquetages installer nous


avons le choix entre accepter ce qui est propos ou personaliser les paquets
(logiciels) installs, bien sr on a choisi les paquetages ncessaires (squid
(serveur web),). Puis on a cliqu sur Suivant pour continuer, il nous
indique qu'un journal de l'installation sera disponible dans le
fichier :/root/install.log et un autre avec les options d'installation :
/root/anaconda-ks.cfg. On a cliqu sur suivant pour poursuivre. Une srie de
message s'affichent sans que nous ayons de manipulations faire :
Vrifications des blocs dfectueux (environ 5 minutes).
Formatage du systme de fichier (1 5 minutes).

Transfert de l'image d'installation sur le disque dur (20secondes 2


minutes)

Configuration de la transaction des RPM (20 secondes 2 minutes).

Dmarrage du programme d'installation, on a patients quelques


minutes. (20 secondes 2 minutes).

Prparation de l'installation (20 secondes 1 minute).

20 minutes 1h15 plus tard, il nous propose la cration de la disquette de


dmarrage (on a annuls). Notre carte graphique a t correctement
dtecte, ensuite on a cliqu sur suivant. Il nous faut choisir la rsolution
800x600 et la profondeur de couleur 16 bits, ensuite on a cliqu sur
suivant, le cd s'jecte tout seul.

Par la suite un cran nous a annonc : votre installation est termine,


flicitations ! ..., on a cliqu sur Quitter.

Un cran nous indique Bienvenue il reste quelques tapes ..., on a cliqus


sur suivant. Nous avons rgls la date et l'heure :

Un dernier cran nous a signal que c'est termin, on a cliqus sur suivant.
Le serveur graphique dmarre, Nous avons l'invit pour nous logguer :

identifiant
password
3.2. Cration du user squid

Pour des raisons de scurit, il faut viter de lancer squid en root. Nous
allons donc crer un user squid ainsi qu'un groupe squid.
Le dmon sera lanc par cet utilisateur. Nous stipulerons plus tard Squid
que le user squid a le droit de lancer le dmon (tous les users n'ont pas le
droit de lancer Squid).Procdez comme ceci :

------:~# groupadd squid


------:~# useradd squid -g squid
------:~# passwd squid

3.3. Changer les permissions :

Etant donn que Squid va tre lanc par le user squid, il faut mettre jour
les permissions.
Lors de l'installation, squid a automatiquement cr l'arborescence
ncessaire, procder comme suit pour changer les droits (nous devons tre
root) :

ades:~# chown -R squid /usr/local/squid/var/cache/


ades:~# chgrp -R squid /usr/local/squid/var/cache/
ades:~# chmod -R 700 /usr/local/squid/

III. INSTALLATION ET CONFIGURATION :


1. Les fichiers de configuration

Les fichiers de configuration se trouvent dans etc/squid/


squid.conf (fichier de configuration globale de squid)
mime.conf (fichier utilis par squid ne pas diter)
Le fichier squid.conf par dfaut contient (plus de 4000 lignes).
Dans notre prsent rapport on va prsenter le fichier de configuration par
dfauts, et les lignes de commandes quon a ajouts afin de configurer notre
rseau.

Squid.conf par dfaut :

#### BEGIN OF squid.conf ####

http_port 8080
icp_port 0
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 32 MB
cache_dir ufs /usr/local/squid/var/cache 1024 16 256
acl localnet src 172.16.0.0/255.255.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
cache_mgr toto@toto.com
cache_effective_user squid
cache_effective_group squid
log_icp_queries off
cachemgr_passwd my-secret-pass all
buffered_logs on

#### END OF squid.conf ####

Explications

Voici les explications du fichier de configuration ligne par ligne :

Http_port 8080 :

Spcifie le port d'coute de Squid, par dfaut squid coute sur le port 3128
mais beaucoup d'administrateurs prfrent le port 8080.

icp_port 0:

Spcifie le port sur lequel Squid va envoyer et recevoir les requtes ICP
(utile lorsqu'il y a plusieurs serveurs proxy), dans notre cas nous
le dsactivons en mettant le port 0.

acl QUERY urlpath_regex cgi-bin \? et no_cache deny QUERY :

Rgle de scurit stipulant de ne pas mettre en cache certains objets


tels que les cgi.

cache_mem 32 MB:

Taille en Mega Octets de RAM que peut utiliser Squid pour les transitions
d'objets, Hot Objects ... A savoir que Squid utilise toujours un peu plus de
RAM que ce que nous lui donnons (ajuster en consquence).

cache_dir ufs /usr/local/squid/var/cache 1024 16 256 :

Spcifie les attributs du cache : le premier argument spcifie le type de


stockage
ici UFS, le second argument, le rpertoire du cache ici
/usr/local/squid/var/cache
(le rpertoire o l'on a mis les droits pour le user squid), le troisime
argument
spcifie la taille en MO du cache ici 1024Mo (1Go), le quatrime et
cinquime
arguments sont un peu particulier, il s'agit de nombre de sous rpertoires qui
peuvent tre crs dans /usr/local/squid/var/cache ici 16, et combien de sous
rpertoires peuvent tre crs dans chaque sous rpertoire ici 256.

acl localnet src 172.16.0.0/255.255.0.0 :

ACL dsignant notre rseau local.


acl localhost src 127.0.0.1/255.255.255.255 : ACL dsignant le
localhost.
acl Safe_ports port 80 443 21 1025-65535 :

ACL dsignant les ports 'de confiances'.


acl CONNECT method CONNECT : ACL dsignant une connection directe
sur le proxy.
acl all src 0.0.0.0/0.0.0.0 : ACL dsignant toutes les adresses IP possibles.

http_access allow localnet : On autorise l'ACL 'localnet'.


http_access allow localhost : On autorise l'ACL 'localhost'.
http_access deny !Safe_ports : On refuse tous les ports sauf ceux stipuls
dans l'ACL Safe_ports.
http_access deny CONNECT : On refuse l'ACL CONNECT pour viter que
des personnes trangres au rseau puissent se connecter au proxy.
acl all src 0.0.0.0/0.0.0.0 : On refuse l'ACL all (src 0.0.0.0/0.0.0.0).
cache_mgr grari@est.ump.ac.ma : Spcifie l'adresse mail de la personne
responsable du proxy.

cache_effective_user squid et cache_effective_group squid : Spcifie


sous quel UID/GID le cache va tourner, ici c'est le groupe squid et le user
squid.

log_icp_queries off : On ne souhaite pas logger (access.log) les requtes


ICP.

cachemgr_passwd my-secret-pass all : Permet d'activer un password


lorsqu'on utilise le script CGI cachemrg.cgi, all signifie que le password est
le mme pour toutes les oprations qui peuvent tre faites grce ce script.

buffered_logs on : Cette option permet d'acclrer l'criture de certains


logs.

2. Lancement de Squid
a. Initialiser le cache

Il faut maintenant initialiser le cache avec les options stipules dans le


fichier de configuration:

:~# /usr/local/squid/sbin/squid -z

b. Dmarrage de Squid

Pour lancer Squid, On a procd comme ceci:

squid@ades:~$ /usr/local/squid/sbin/squid -D

L'option -D permet de dire Squid de se lancer en Dmon.


Voici les autres options disponibles :
-h : Pour obtenir les options possibles (help)
-a : Pour indiquer un port particulier
-f : Pour utiliser un autre fichier de configuration la place de celui par
dfaut
-i : Pour dsactiver le cache IP
-u : Spcifie un port pour les requtes ICP
-v : Pour indiquer la version de Squid
-z : Pour effacer le contenu du cache sur le disque ou pour crer un fichier
swap.
-k : Pour envoyer des instructions squid lorsque celui-ci est lanc : rotate|
reconfigure|shutdown|interrupt|kill|debug|check.

Pour vrifier que Squid s'est bien lanc :


squid@ades:~$ ps aux | grep squid

(donne la liste des processus)


squid 20223 0.0 0.3 3588 1000 ? S Apr15 0:00 /usr/local/squid/
sbin/squid -D
squid 20225 0.0 2.9 9588 7700 ? S Apr15 0:12 (squid) -D

On peut aussi essayer de nous connecter en telnet :


squid@ades:~$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

En cas de problme lancer Squid de cette manire :


squid@ades:~$ /usr/local/squid/sbin/squid -N -d 2

-N Permet d'interdire l'arrire plan et -d pour spcifier le niveau de dtail ici


cest 2.
Les fichiers de log sont situs dans /usr/local/var/log dont les plus
intressants sont:

- cache.log : Log rfrenant les messages de Squid lors de son lancement


- access.log : Log rfrenant toutes les requtes des clients.
- store.log : Log tous les objets contenus dans le cache.

Pour des raisons de confort nous avons cres un lien symbolique dans
/var/log :

ades:~# ln -s /usr/local/squid/var/log/access.log /var/log/


ades:~# ln -s /usr/local/squid/var/log/cache.log /var/log/
ades:~# ln -s /usr/local/squid/var/log/store.log /var/log/

3. Configuration des clients et test du proxy

Aprs avoir le fichier de configuration, on a configur les clients pour


qu'ils se connectent internet via le proxy que nous venons de configurer.

On a Cliqu sur Outils->Option internet->Connections->

Paramtre LAN et remplissez les champs adquats.

4. Scripts
a. Script de dmarrage

Voici un exemple de script de dmarrage qui nous permettra de lancer


(ou arrter) squid de cette manire :
/etc/init.d/squid start|stop

On a plac le script dans /etc/init.d/ :


ades:~# chmod 700 /etc/init.d/squid

#####BEGIN OF THE SCRIPT#######


#. /etc/rc.d/init.d/functions # utile pour certaine distribution comme
notre cas (Red Hat)

SQUID_HOME=/usr/local/squid

[ -f $SQUID_HOME/bin/squid ] || exit 0

case "$1" in
start)
echo -n "Starting squid: "
base=`basename $1`
# Dj lanc ?
[ "`pidofproc $base`" != "" ] && return
# echo basename of the program.
echo -n "$base "
# Start
daemon $SQUID_HOME/sbin/squid -D &
echo
touch /var/lock/subsys/squid
;;
stop)
echo -n "Waiting for squid shutdown..."
PID=`pidof squid`
TIME=0
kill -TERM $PID
# on laisse squid se terminer avant de rendre la main
while kill -0 $PID 2>/dev/null
do
sleep 2
let TIME=$TIME+2
if [ $TIME = 150 ] ; then
echo "killing squid"
killproc squid
break
fi
done

echo $TIME" s elapsed"


rm -f /var/lock/subsys/squid
;;
*)
echo "Usage: squid.init {start|stop}"
exit 1
esac

exit 0

######END OF THE SCRIPT########

b. Script de vrification

Ce script permet de vrifier si Squid est actuellement lanc, et si non il le


lance et envoie un mail l'administrateur pour le prvenir.
Il est intressant de combiner ce script avec une rgle crontab afin d'tre sr
que notre Proxy soit toujours actif.

#!/bin/sh
/bin/pidof squid > /dev/null # Attention pidof peut se trouver
dans /sbin
if [ $? = 1 ]
then
/etc/init.d/squid stop
/etc/init.d/squid start
echo "redmarrage de Squid" | mail -s "[Squid] Redmarrage de
Squid " grari@est.ump.ac.ma
fi
4. Optimisation de Squid
a. Scurit

Pour des raisons de scurit, il peut tre intressant de lguer une


partition pour le cache, afin que le cache ne soit pas sur la mme partition que
celle du systme.

Il peut tre aussi intressant de protger le fichier squid.conf (lorsque


celui-ci est configur et n'a plus besoin de modifications) :

ades:~# chown squid /usr/local/squid/etc/squid.conf


ades:~# chmod 400 /usr/local/squid/etc/squid.conf
ades:~# chattr +i /usr/local/squid/etc/squid.conf

b. Le cache

On peut administrer le cache de deux manires :

-Le rinitialiser : Avec l'option -z


-Le purger : Il faut alors rajouter ces lignes pour pouvoir le purger seulement
depuis le serveur :
acl PURGE method purge
acl localhost src 127.0.0.1
http_access allow purge localhost
http_access deny purge

Ensuite il suffit de taper :


#client -m purge http://url_a_purger.fr

Il est conseill de purger rgulirement la totalit du cache. Procdez comme


suit:
#/etc/init.d/squid stop && /usr/local/squid/sbin/squid -z &&
/etc/init.d/squid start
c. Proxy Transparent

Un proxy transparent comme son nom l'indique est un proxy qui est
compltement transparent pour le client, cela signifie que le client utilise le
proxy sans le savoir.
Explication : Le client se connecte internet via le port 80, il suffit de dire
Squid d'agir comme un proxy transparent et de dfinir une rgle iptables
permettant de rediriger toutes les connections destination du port 80 vers le
port de notre proxy (8080). A savoir que Squid ne gre pas le "Transparent
HTTPS ".

Pratique :
Dans notre squid.conf nous avons ajouter les lignes suivantes :
httpd_accel_host virtual
httdp_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off

Voici la rgle iptables ncessaire au bon fonctionnement du proxy transparent


:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT
--to-port 8080

Si notre firewall n'est pas sur la mme machine que notre proxy, il suffit de
remplacer "--to-port 8080" par "--to-port ip_proxy:8080".
Il est maintenant inutile de configurer les Navigateurs internet pour qu'ils se
connectent au proxy, les navigateurs se connecteront travers le proxy "sans
le savoir".

5. Restriction des accs

Il est possible de restreindre les accs Internet via Squid. Nous avons
interdit l'accs certains sites.
Tout comme dans la configuration initiale de Squid il faut crire des ACL
(Access control list).
Voici comment fonctionnent les ACL :

acl aclname acltype string


http_access allow|deny [!]aclname

A savoir que nous devons avoir obligatoirement cette ligne au moins une fois
dans notre fichier squid.conf ( la fin) :

http_access allow all

Note : Toutes les ACL doivent se trouver dans le squid.conf.

a. Interdire l'accs un domaine

Nous avons interdis l'accs au domaine toto.com, voici comment procder


:
acl interdit dstdomain toto.com
http_access deny interdit

b. Interdire les sites contenant un mot donn

Imaginons que nous voulons interdire l'accs au site Web contenant le mot
"toto", voici comment procder :
acl mot_interdit url_regex toto
http_access deny mot_interdit

Attention url_regex est sensible la casse.


Nous pouvons aussi utiliser un fichier pour stocker toutes les adressess
"interdites" : Voici comment procder :
acl url_interdites url_regex "/usr/local/squid/etc/denied_url"
http_access deny url_interdites

Il suffit alors de mettre les adresses 'interdites' dans ce fichier.

Configuration minimale

Comme Webmin est bien install, mis jour et tout, et que le module pour squid est bien
prsent, utilisons-le :
Les ACL (Access Control Lists) permettent de dfinir des conditions sur les IPs, les ports, le
contenu de certains textes, et j'en passe. Si vous voulez tout savoir sur les diverses ACL de
Squid, ne comptez pas sur moi, comptez plutt sur la documentation officielle.

Les restrictions indiquent quoi faire lorsque ces conditions sont vrifies. On autorise ou on
interdit en fonction d'une ACL ou d'un groupe d'ACLs, le sens de "restriction" est donc
prendre avec un peu de recul, une restriction pouvant tre une autorisation. La premire
"restriction" vrifie est la bonne, d'o l'importance de l'ordre dans lequel elles sont places.

Sans faire une analyse dtaille, nous voyons que dans la configuration par dfaut, seul
"localhost" peut utiliser le proxy (Allow localhost). Il nous faut donc faire intervenir la notion
de rseau local.
Crer une ACL reprsentant le LAN
Nous slectionnons dans la liste droulante "Client Address" et cliquons sur "Create New
ACL" :

Nous pouvons dfinir une tendue, ou toute une classe, comme c'est le
cas dans l'exemple. Notre LAN fonctionne avec la classe 192.168.0.0.

Save...

Une nouvelle ligne est apparue dans la liste des ACLs, appele"Localnet"

Nous allons maintenant sur "Add proxy restriction, choisissons "Allow" et


slectionnons "LocalNet" dans la liste "Match ACLs".

Save...
Enfin, au moyen des flches de la colonne de droite, nous montons cette
nouvelle restriction juste au dessus de "Deny all"

N'oublions pas de faire un "Apply changes", et refaisons un essai :

Ca marche !

Bien entendu, l'ide de faire plutt "Allow all" est une mauvaise ide. Si
votre proxy a un pied dans l'Internet (s'il est install sur la passerelle),
vous risquez un proxy ouvert, avec tous les usages pervertis que l'on peut
en faire...
A ce niveau, nous avons une premire configuration qui fonctionne. Le
fichier squid.conf a cette allure

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563 10000
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/255.255.255.0
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow LocalNet
http_access deny all
icp_access allow all
log_fqdn on
Affiner la configuration.
Il y a deux points importants, qu'il peut tre utile d'tudier, et qui correspondent aux deux
fonctions principales d'un proxy.

Identifier les utilisateurs.


Attention.
Vous aurez des ennuis pour authentifier vos utilisateurs, si vous comptez rendre votre
proxy transparent. Les deux fonctionnalits sont incompatibles.
Dans la configuration mise en oeuvre ici, nous ne faisons pas de contrle sur les utilisateurs,
seulement sur les IPs des machines clientes. Vous pouvez souhaiter identifier vos utilisateurs
lorsqu'ils vont surfer sur le Net. Dans ce cas, il vous faudra mettre en place un systme
d'authentification.
Il y a plusieurs mthodes disponibles pour authentifier les utilisateurs du proxy. Elles font
toutes appel un programme extrieur, diffrent suivant le moyen choisi. Debian propose les
modules suivants :
ncsa_auth, smb_auth, getpwnam_auth, ldap_auth, pam_auth
Les plus intressants sont probablement :
ldap_auth, qui permet d'authentifier les utilisateurs depuis un annuaire LDAP (si vous
matrisez dj LDAP),
smb_auth, qui permet d'utiliser un contrleur de domaine Windows NT.
ncsa_auth, qui utilise un fichier d'utilisateurs local.
Nous allons mettre en oeuvre ncsa_auth, c'est le plus simple, ce ne sera peut-tre pas le plus
utile, surtout si le rseau local est un domaine Microsoft Windows.
Construire un fichier d'utilisateurs.
Nous allons crer un fichier /etc/squid/users
# touch /etc/squid/users
Nous le remplissons ensuite avec la commande htpasswd, normalement fournie dans le paquet
apache-common (normalement vous l'avez puisque Debian utilise par dfaut Apache pour
faire tourner Webmin):
# htpasswd -b /etc/squid/users <nom de l'utilisateur> <mot de passe>
A rpter autant de fois que ncessaire avec des vrais noms d'utilisateurs et des vrais mots de
passe...
Le fichier se remplit comme suit :
chris:bnIuGLzE0Gpcg
daniel:SBURpBvExhYPQ
michele:6hDQXgAjRdfXg
Notez que les mots de passe sont chiffrs. Il aurait t possible d'utiliser le fichier passwd des
utilisateurs Linux, mais ce n'est pas forcment une trs bonne ide...
Vrifions que a fonctionne, en lanant " la main" le module d'authentification
/usr/lib/ncsa_auth. Nous entrerons alors dans une boucle o il faudra entrer sur une ligne un
nom d'utilisateur et son mot de passe, spars par un espace :
# /usr/lib/squid/ncsa_auth /etc/squid/users
chris *******
OK
chose truc
ERR

Le systme rpond par OK ou par ERR suivant que l'authentification russit ou non.
Sortez de la boucle avec un "ctrl-d".
Si a fonctionne comme a, c'est dj bon signe.
Configurer squid pour rclamer l'authentification de vos utilisateurs.
On peut le faire avec Webmin, faisons-le donc.
Pour Authentification program, indiquez le chemin du module ncsa_auth, suivi du chemin
du fichier des utilisateurs, spars par un espace.
Pour Number of authentication programs:
"Defaults to 5 if an authenticator has been enabled."
Lorsqu'un programme d'authentification a t choisi, le nombre d'instances de ce programme
est par dfaut de 5. Si vous avez de nombreux utilisateurs, il sera peut-tre ncessaire
d'augmenter ce nombre.
Time to cache passwords for:
"How long Squid will cache a successful login for before querying the authentication
program again."
Combien de temps Squid va se souvenir d'une authentification russie, avant de demander une
nouvelle authentification.
Time to bind user to an IP address for:
"If the same user tries to login twice from two different IP addresses during this period, he
will benied. This can be used to prevent the sharing of proxy passwords between multiple
users."
Si le mme utilisateur essaye de s'authentifier depuis deux machines diffrentes dans un laps
de temps trop court, il sera refus. Ceci peut tre utilis pour empcher le partage d'un droit
d'accs entre plusieurs utilisateurs.
Cette dernire option est tout fait digne d'intrt...
On "save", on "apply les changes" et on croit que c'est fini, mais non... Sans ACL pour utiliser
l'authentification, squid ne demandera rien vos utilisateurs.
Vrifions tout de mme qu'aprs rechargement de squid le module d'authentification est bien
prsent :
gw2:/usr/lib/squid# ps aux | grep [s]quid
root 1536 0.0 1.1 3824 1124 ? S 14:22 0:00 /usr/sbin/squid -D -sYC
proxy 1538 0.0 7.0 9616 6712 ? S 14:22 0:04 (squid) -D -sYC
Non, il n'y est pas.
Passons donc aux ACLs. On a dj vu comment s'y prendre, nous crons une nouvelle ACL
de type "External auth" :
(save)

Nous plaons une nouvelle ligne dans les restrictions, en interdisant (deny) tous ceux qui ne
satisfont pas (Don't match ACLs) l'ACL Users.
(save)
Enfin, nous remontons cette restriction juste au dessus de allow LocalNet
Application des changements, nous vrifions que maintenant le module d'authentification est
bien charg :
gw2:/usr/lib/squid# ps aux | grep [s]quid
root 1536 0.0 1.1 3824 1124 ? S 14:22 0:00 /usr/sbin/squid -D -sYC
proxy 1538 0.0 7.0 9616 6712 ? S 14:22 0:04 (squid) -D -sYC
proxy 2178 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2179 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2180 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2181 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2182 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
Cette fois-ci, il y est. Ca devrait donc fonctionner :

Et voil. Pour accder au monde extrieur, Squid ncessite maintenant une authentification.
Comme nous l'avons paramtr, cette authentification restera valide 30 minutes (si le
navigateur n'est pas referm entre temps), et pendant ces 30 minutes, plus aucun autre
utilisateur ne pourra utiliser ce login sur toute autre machine de votre LAN.

Si nous allons faire un petit tour dans les dernires lignes de /var/log/squid/access.log, nous
constatons que le nom d'utilisateur figure pour chaque requte :
1053787250.063 7 pchris.maison.ms TCP_HIT/200 892
GET http://www.free.fr/img/picto_assunet.gif chris NONE/
-image/gif
1053787250.067 8 pchris.maison.ms TCP_HIT/200 401
GET http://www.free.fr/im/blank_F5F5F5.gif chris NONE/
-image/gif
1053787266.004 25 pchris.maison.ms TCP_HIT/200 9332
GET http://www.free.fr/promos/Egg-senior-234x75-c.gif
chris NONE/- image/gif
1053787274.083 43 pchris.maison.ms TCP_HIT/200 7789
GET http://www.free.fr/im/banniere-autopromo-edengo.gif
chris NONE/- image/gif
Big Brother se fait de plus en plus prsent...
Votre fichier squid.conf ressemble maintenant ceci :
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563 10000
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/255.255.255.0
acl Users proxy_auth REQUIRED
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny !Users
http_access allow LocalNet
http_access deny all
icp_access allow all
log_fqdn on
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/users
authenticate_ttl 30 minute
authenticate_ip_ttl 30 minute
Notez que vous pouvez aussi grer la liste des utilisateurs avec la fonction "Proxy
Authentication" du module Squid de Webmin, sans manipuler htpasswd, condition que :
vous ayez cr le fichier des utilisateurs, mme vide,
vous ayez configur Squid pour utiliser ncsa_auth
A ce moment, l'option "Proxy Authentication" fonctionnera aussi bien que "htpasswd".
Si pour vous l'authentification est une chose primordiale, et que vous disposez dj d'une
source d'authentification sur votre LAN, intressez-vous peut-tre l'existence d'un module
d'authentification qui vous permettrait de n'employer qu'une seule base d'utilisateurs...
J'ai pu effectuer quelques tests avec le module d'authentification qui s'appuie sur SMB
(smb_auth), autrement dit, qui permet d'authentifier les utilisateurs partir d'un contrleur de
domaine Microsoft, a fonctionne, mais SAMBA doit tre install sur le proxy, mme s'il ne
tourne pas. Suivant l'exposition de votre proxy par rapport au lien Internet, a peut prsenter
quelques risques.
Sa mise en place ne pose pas de problmes particuliers, la documentation est suffisamment
claire : http://www.hacom.nl/~richard/software/smb_auth.html
Optimiser le cache.
Un proxy sert a optimiser la bande passante utilise sur le Net, en permettant de garder en
cache les pages les plus souvent visites. Si c'est une de vos principales proccupations, il sera
probablement ncessaire d'agir sur les diverses options du cache. Passez alors du temps lire
la documentation. Vous pourrez agir sur la taille du cache, sa rpartition sur les divers disques
durs...
Pour raliser correctement une telle opration, il vous faudra installer d'abord des outils
d'audit de performance dudit cache. Dtailler ces opration ici nous mnerait trop loin. (Il y a
une doc assez complte avec Squid ;-))

Rendre le proxy transparent.


Utiliser un proxy ncessite normalement de configurer son "butineur" de manire ce qu'il
interroge toujours le proxy, quelle que soit la cible.
Vos utilisateurs ont donc gnralement la main sur ce paramtrage, et pourront probablement
passer outre le proxy, s'ils le dcident, contournant par le fait toutes vos stratgies. Il existe
cependant deux moyens d'viter cela :
utilisez votre firewall pour bloquer pour vos postes clients l'accs direct l'Internet par
les ports http et https (80, 443, 563...). De cette manire, vos utilisateurs n'auront
d'autre possibilit que de passer par le proxy (sauf pour des serveurs exotiques, qui
utiliseraient un autre port),
rendre le proxy transparent, ce qui veut dire que configurs ou non, les requtes http
passeront quand mme par le proxy. Pour arriver ce rsultat, il faut raliser deux
oprations :
Rediriger en PREROUTING le port 80 (vous devrez vous contenter d'un seul
port transparent) vers le port proxy sur son port (3128 par dfaut pour squid),
a se fait sans problmes sur votre routeur NAT avec IPtables,
Configurer correctement squid pour qu'il interprte convenablement les
requtes HTTP qu'il reoit.
Attention...
Cette mthode est incompatible avec l'authentification des utilisateurs. Mme si
squid est configur comme nous l'avons vu pour l'authentification ncsa, celle-ci
ne fonctionnera plus.
cette mthode ne supporte que HTTP. FTP est impossible en mode transparent,
un seul port peut tre redirig de faon transparente, le 80, de prfrence,
puisque c'est le port habituel pour HTTP.
La rgle de redirection.
Voici la rgle ajouter sur votre passerelle, en admettant que votre rseau est dans
192.168.0.0 et que votre proxy possde l'adresse 192.168.0.252. Nous supposons que le proxy
est install sur la machine qui assure galement le rle de passerelle (commande entrer sur
une seule ligne, bien entendu) :
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0
-p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
Il est possible de rediriger de faon transparente sur un proxy install sur une autre machine
que la passerelle, la condition que cette dernire soit place dans un autre rseau IP que le
LAN, faute de quoi, la translation de port ne fonctionnera pas correctement.
Avec un routeur trois voies, par exemple deux rseaux IP (disons 192.168.0.0 et
192.168.1.0), et un accs Internet, si le LAN est sur 192.168.0.0, il faudra placer le proxy sur
192.168.1.0, disons 192.168.1.2. La rgle IPtables s'crira alors :
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0
-p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.2:3128
Bien entendu, il faudra que le routage se fasse entre les rseaux 192.168.0.0 et 192.168.1.0.
Dans la pratique, vous devrez donc disposer de trois interfaces rseau sur votre routeur NAT.
Paramtrage de Squid.
Comme nous l'avons vu dans le chapitre sur HTTP, Le client HTTP n'agit pas de la mme
manire suivant qu'il a affaire un proxy ou non. Ici, le client ne sait pas qu'il y a un proxy, il
agit donc comme s'il interrogeait directement le serveur cible, alors que ce n'est pas le cas. Ca
ne fonctionnera bien entendu pas, si Squid n'est pas inform de cette situation.
Mais Squid sait contourner la difficult, voyons comment.
Allons, avec Webmin, dans l'option "Miscellaneous options" :
Je vous le donne comme une recette. En principe, je n'aime pas trop a, mais pour comprendre
ici ce que l'on fait, il faudrait tudier dans le dtail le fonctionnement du proxy, ce qui nous
conduirait crire non plus un chapitre, mais un livre entier...
Ca nous donne dans squid.conf :
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563 10000
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/255.255.255.0
acl Users proxy_auth REQUIRED
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny !Users
http_access allow LocalNet
http_access deny all
icp_access allow all
log_fqdn on
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/users
authenticate_ttl 30 minute
authenticate_ip_ttl 30 minute
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_host virtual
httpd_accel_port 80

Conclusions

Comme nous l'avons vu, la transparence du proxy entrane de nombreuses restrictions. A


moins que vous y teniez absolument, mieux vaut choisir une autre solution, principalement si
vous voulez cacher le FTP et/ou le HTTPS ou si vous devez authentifier vos utilisateurs.
Il y a le filtrage URL ainsi celui de contenu chose que font les appliances FIREWALL
permettant damliorer la productivit au sein de lentreprise

Beaucoup d'autres choses sont possibles, je ne les pas encore essayes, je vous laisse faire.