Vous êtes sur la page 1sur 44

www.udivers.com contact : tssri-reseaux@hotmail.

fr

Proxy cache
Squid

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

INTRODUCTION………………………………………………………
Premier chapitre : PRESENTATION DE SQUID :
1. Définition du Proxy cache ……………………………………….
2. La fonction du Proxy …………………………………………….
3. La fonction de cache …………………………………………….
4. Définition de Squid……………………………………………….
5. Squid en tant que Proxy …………………………………………..
6. Squid en tant que cache…………………………………………....
7. Filtrage…………………………………………..............................
8. INSTALLATION ET CONFIGURATION……………………….

Deuxième chapitre : TRAVAUX EFFECTUÉS

Conclusion……………………………………………33

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

INTRODUCTION

Dans le cadre de notre formation à l’Ecole Supérieure de


Technologie d’Oujda, nous sommes appelés à réaliser un projet de fin d’étude
afin de compléter nos connaissances théoriques acquises au sein de l’école et
mieux appliquer notre savoir faire et savoir être.

Le présent document constitue le projet de fin d’étude, notre projet


consiste à installer et configurer un serveur nommée « Serveur Squid », dans le
réseaux de notre école « Ecole Supérieur de Technologie de Oujda ».
Le réseau dans lequel on a travaillé a la forme suivante :

Passerelle : 172.16.1.254
Squid : 172.16.1.3
Haut

Le Bloc
Informatique
DR ON
Haut

Couloir

4 m carré

Couloir

56 m carré

Ordinateur Ordinateur Ordinateur


Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur

Salle des serveur


du Domaine ENS
Ordinateur Ordinateur Ordinateur
Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur

Ordinateur Ordinateur Ordinateur


Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur

8U
Serveur CD Samba Web
8U Ordinateur Ordinateur
Ordinateur
Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur

Salles de TP
Salle BETA 3 Salle BETA 2 Informatique Salle BETA 1

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

De ce qui concerne le domaine de travail, il est limité au niveau de sous réseau


ENS et consiste à avoir une machine linux sur laquelle tourne un serveur Squid
et des machines Windows cliente.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

PRESENTATION DE SQUID :
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr

9. Définition du Proxy-cache :

On dénomme proxy-cache toute solution (logicielle ou matérielle)


permettant d’assurer deux rôles essentiels :

a. La fonction du proxy :

Il s’agit d’une fonction de sécurité généralement effectuée par des


firewalls. Elle permet de masquer l’origine d’une requête vers un serveur et
d’effectuer un certain nombre de contrôles sur les flux (contrôle d’accès,
filtrage, journalisation…).

Un Proxy peut agir en deux modes différents : 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 requêtes seront alors formées comme lors d'une
communication sans intermédiaire.
b. La fonction de cache :

La fonction de cache n’assure pas de service de sécurité mais permet le


stockage local des données les plus demandées afin de fournir directement
aux clients ces données sans réaliser de nouvelles requêtes vers le serveur
distant. Elle permet de diminuer les temps de réponse et la consommation
de la bande passante.

2. Définition de Squid

Squid est un serveur proxy/cache libre très connu du monde Open


Source, ce serveur est très complet et propose une multitude d'options et de

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

services qui lui ont permis d'être très largement adopté par les
professionnels mais aussi dans un grand nombre d'école ou administrations
travaillant avec systèmes de type Unix.

a. Squid en tant que proxy :

Le rôle de Squid est le plus souvent de partager un accès internet entre


plusieurs clients d'un réseau privé. A la différence 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


tâches :

• Filtrage des requêtes des clients ;


• Restriction de l'accès à internet ;
• Authentification des clients ;
• Accélération des accès aux ressources grâce au système de cache ;
• Réécriture des requêtes vers internet.

Mis à part les fonctions essentielles d'un proxy, Squid propose beaucoup
d'autres services. Ces services ont très largement contribué à faire de Squid
une référence en matière 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 intégrante de Squid et justifie à lui seul l'utilisation de Squid pour un
réseau partageant un même accès à Internet.

Le rôle d'un serveur cache est de stocker les objets demandés par les
utilisateurs pour la première fois via les protocoles HTTP, FTP. Ainsi, lors
des demandes futures sur un objet présent en cache, le serveur de cache
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr

n'aura pas besoin d'aller chercher cet objet sur internet et retournera
directement celui qu'il a en mémoire. Les objets stockés peuvent être de tout
type : texte, image, vidéo, ...

Ce mécanisme procure deux grands avantages non négligeables:

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


de données représentée par l'objet. Le nombre de requête qui pourront
être détournées vers le cache dépend de plusieurs paramètres comme la
durée d'activité du cache, la durée de vie des objets dans le cache, le
nombre de clients et de requêtes sur le réseau, etc .
 Un gain de temps pour les utilisateurs internet. Effectivement lorsque
le cache prend en charge une requête, le délais d'accès à un objet
devient celui de la recherche de cet objet dans le cache + les temps
d'accès réseau.

3. Filtrage

Autorisation d'accès par filtrage :

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Squid offre la possibilité de filtrer les requêtes des clients. Ainsi, il est
possible de restreindre l'accès aux ressources en fonction de plusieurs
paramètres différents. Voici une liste de paramètre pouvant intervenir dans
le rejet d'une requête répondant à l'un des critère :

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


contenant "winnie" 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'accès à
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 méthode utilisée. Peut permettre d'empêcher la méthode HTTP
comme POST par exemple ;
• Le type du navigateur utilisé. Peut permettre d'empêcher l'utilisation
d'IE par exemple.

Squid n'est capable de filtrer que les requêtes 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).

Réécriture des entêtes de requêtes :

Il est possible de réécrire les entêtes des requêtes des clients. Cela a
pour utilité par exemple de rendre les demandes anonymes. Ceci se fait très

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

simplement en indiquant dans la configuration de Squid quels sont les


champs HTTP autorisé et en précisant que tous les autres ne le sont pas. Il
est aussi possible de remplacer le contenu d'un champ.

Voici un schéma représentant le rôle de Squid :

Installation
2.1. Téléchargement

Nous devons télécharger les sources de Squid sur :


http://www.squid-cache.org/Versions/v2/2.5/
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr

Il s'agit de la version stable mais nous pouvons bien sûr nous aventurer sur la
version de développement.

2.2. Compilation et Installation

- Dans le répertoire où nous avons téléchargé le TarBall on va taper la


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

- Décompresser 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.

-Création 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 défaut assez imposant (plus de 4000

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

lignes), c’est dans ce fichier que l’administrateur peut configurer son réseau.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

I. INSTALLATION DE REDHAT 9:

Après l’insertion du 1er cd, un écran d'accueil s’affiche qui nous


demande si on veut lancer l'installeur de manière graphique bien sûr on va
appuyer sur la touche Entrée. Le noyau se charge et notre configuration est
détectée (des lignes de commandes apparaissent sur notre écran).

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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 qu’il
est complet, et On a appuyé sur la touche Entrée. Nous avons ensuite le
choix entre :

 insérer l’autre cd et le tester TEST


 continuer l'installation Continue

On a testé les 3 cd (environ 5 minutes par cd) dés le début, et lancé


l'installation après.

Une fois les 3 cd testés on a sélectionné Continue avec les fléches du


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

Une page s'affiche, composée d’une colonne d'aide à gauche qui sera
présente tout au long de l'installation, et de l'installeur au centre. cette
première page nous renseigne sur l’endroit où se trouve une copie du
manuel d'installation, l’orsqu’on Clique sur NEXT on choisi après la
Langue qui nous convient (Français), et on clique de nouveau sur NEXT.
Il nous propose le clavier :

 french
 french Canadian
 french latin 0
 french latin 1 (choix par défaut)

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

 french (pc) ....

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


choisir notre type d’installation, les trois types proposés sont :

 bureau personnel
 poste de travail
 serveur
 personnalisée

Dans notre cas on va choisir une installation de type serveur car elle est
plus appropriée si on veut que notre système fonctionne comme un serveur
basé sur Linux.

L'étape suivante était le partitionnement. L’installeur nous propose un


partitionnement :

 Automatique qui propose 3 choix (supprimer toutes les partitions


Linux du système, Supprimer toutes les partitions du système,
conserver toutes les partitions et utiliser l'espace libre)
 Partitionnement manuel.

On a choisi la 2ème méthode, le partitionnement manuel. On a fait


deux partitions pour accueillir notre Red Hat 9 :

 une pour le système 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 première libre (/dev/sdc), ensuite on a cliqué sur nouveau ,on a défini
le point de montage / en cliquant sur la liste déroulante (on a choisi swap),
comme système de fichier on a choisi ext3, et la taille qu’on lui a attribué
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr

est (700), ensuite on a coché éventuellement la vérification des blocs


défectueux, et cliqué sur Valider. Et de même avec la partition /root, on lui
attribut l’espace mémoire restant.

L’étape suivante était de Choisir le chargeur de démarrage :

 grub (choix par défaut)


 lilo
 rien (dans ce cas on fera une disquette de démarrage à la fin de
l'installation).

On a laissé le choix par défaut 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
réseau(255.255.0.0), le nom de la machine(serveur), l’adresse du
DNS(172.16.1.1) et l’adresse de la passerelle(172.16.1.254à). Ensuite, il
nous propose naturellement de configurer le niveau du pare-feux :

 élévé
 moyen
 pas de pare-feux

et éventuellement de personnaliser ces réglages en définissant un


périphérique sûr, et d'autoriser différents services en entrée, et de
sélectionner les paquetages dont on a besoin :

 www
 ftp
 ssh
 dhcp

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

 mail
 telnet
 autres ports

Après on a cliqué sur suivant,Par la suite on a ajouté le support de langues


supplémentaires et cliqué sur Suivant. Il faut Sélectionner le fuseau horaire
puis cliquer sur Suivant.

Ensuite l’installeur nous demande de définir un mot de passe pour


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

L'installeur nous a proposé une série de paquetages à installer nous


avons le choix entre accepter ce qui est proposé ou personaliser les paquets
(logiciels) installés, bien sûr on a choisi les paquetages nécessaires (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 série de
message s'affichent sans que nous ayons de manipulations à faire :

 Vérifications des blocs défectueux (environ 5 minutes).


 Formatage du système 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).
 Démarrage du programme d'installation, on a patientés quelques
minutes. (20 secondes à 2 minutes).
 Préparation de l'installation (20 secondes à 1 minute).

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

20 minutes à 1h15 plus tard, il nous propose la création de la disquette de


démarrage (on a annulés). Notre carte graphique a été correctement
détectée, ensuite on a cliqué sur suivant. Il nous faut choisir la résolution
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 terminée,


félicitations ! ..., on a cliqué sur Quitter.

Un écran nous indique Bienvenue il reste quelques étapes ..., on a cliqués


sur suivant. Nous avons réglés la date et l'heure :

Un dernier écran nous a signalé que c'est terminé, on a cliqués sur suivant.
Le serveur graphique démarre, Nous avons l'invité pour nous logguer :

 identifiant
 password

3.2. Création du user squid

Pour des raisons de sécurité, il faut éviter de lancer squid en root. Nous
allons donc créer un user squid ainsi qu'un groupe squid.
Le démon sera lancé par cet utilisateur. Nous stipulerons plus tard à Squid
que le user squid a le droit de lancer le démon (tous les users n'ont pas le
droit de lancer Squid).Procédez comme ceci :

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

------:~# 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
nécessaire, procéder 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 défaut contient (plus de 4000 lignes).
Dans notre présent rapport on va présenter le fichier de configuration par
défauts, et les lignes de commandes qu’on a ajoutés afin de configurer notre
réseau.

Squid.conf par défaut :

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

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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 :

Spécifie le port d'écoute de Squid, par défaut squid écoute sur le port 3128
mais beaucoup d'administrateurs préfèrent le port 8080.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

icp_port 0:

Spécifie le port sur lequel Squid va envoyer et recevoir les requêtes ICP
(utile lorsqu'il y a plusieurs serveurs proxy), dans notre cas nous
le désactivons en mettant le port à 0.

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

Règle de sécurité 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 conséquence).

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

Spécifie les attributs du cache : le premier argument spécifie le type de


stockage
ici UFS, le second argument, le répertoire du cache ici
/usr/local/squid/var/cache
(le répertoire où l'on a mis les droits pour le user squid), le troisième
argument
spécifie la taille en MO du cache ici 1024Mo (1Go), le quatrième et
cinquième
arguments sont un peu particulier, il s'agit de nombre de sous répertoires qui
peuvent être créés dans /usr/local/squid/var/cache ici 16, et combien de sous
répertoires peuvent être créés dans chaque sous répertoire ici 256.

acl localnet src 172.16.0.0/255.255.0.0 :

ACL désignant notre réseau local.


acl localhost src 127.0.0.1/255.255.255.255 : ACL désignant le

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

localhost.
acl Safe_ports port 80 443 21 1025-65535 :

ACL désignant les ports 'de confiances'.


acl CONNECT method CONNECT : ACL désignant une connection directe
sur le proxy.
acl all src 0.0.0.0/0.0.0.0 : ACL désignant 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 stipulés
dans l'ACL Safe_ports.
http_access deny CONNECT : On refuse l'ACL CONNECT pour éviter que
des personnes étrangères au réseau 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 : Spécifie l'adresse mail de la personne


responsable du proxy.

cache_effective_user squid et cache_effective_group squid : Spécifie


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 requêtes


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 même pour toutes les opérations qui peuvent être faites grâce à ce script.

buffered_logs on : Cette option permet d'accélérer l'écriture de certains


logs.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

2. Lancement de Squid
a. Initialiser le cache

Il faut maintenant initialiser le cache avec les options stipulées dans le


fichier de configuration:

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

b. Démarrage de Squid

Pour lancer Squid, On a procédé comme ceci:

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

L'option -D permet de dire à Squid de se lancer en Démon.

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
défaut
-i : Pour désactiver le cache IP
-u : Spécifie un port pour les requêtes ICP
-v : Pour indiquer la version de Squid
-z : Pour effacer le contenu du cache sur le disque ou pour créer un fichier
swap.
-k : Pour envoyer des instructions à squid lorsque celui-ci est lancé : rotate|
reconfigure|shutdown|interrupt|kill|debug|check.

Pour vérifier que Squid s'est bien lancé :


squid@ades:~$ ps aux | grep squid

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

(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 problème lancer Squid de cette manière :


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

-N Permet d'interdire l'arrière plan et -d pour spécifier le niveau de détail ici


c’est 2.

Les fichiers de log sont situés dans /usr/local/var/log dont les plus
intéressants sont:

- cache.log : Log référençant les messages de Squid lors de son lancement


- access.log : Log référençant toutes les requêtes des clients.
- store.log : Log tous les objets contenus dans le cache.

Pour des raisons de confort nous avons crées 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

Après avoir le fichier de configuration, on a configuré les clients pour


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

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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

Paramètre LAN et remplissez les champs adéquats.

4. Scripts
a. Script de démarrage

Voici un exemple de script de démarrage qui nous permettra de lancer


(ou arrêter) squid de cette manière :
/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`
# Déjà 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)

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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

Ce script permet de vérifier si Squid est actuellement lancé, et si non il le


lance et envoie un mail à l'administrateur pour le prévenir.
Il est intéressant de combiner ce script avec une règle crontab afin d'être sûr
que notre Proxy soit toujours actif.
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr

#!/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 "redémarrage de Squid" | mail -s "[Squid] Redémarrage de
Squid " grari@est.ump.ac.ma
fi

4. Optimisation de Squid
a. Sécurité

Pour des raisons de sécurité, il peut être intéressant de léguer une


partition pour le cache, afin que le cache ne soit pas sur la même partition que
celle du système.

Il peut être aussi intéressant de protéger 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 manières :

-Le réinitialiser : Avec l'option -z


-Le purger : Il faut alors rajouter ces lignes pour pouvoir le purger seulement
depuis le serveur :
acl PURGE method purge

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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 régulièrement la totalité du cache. Procédez 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
complètement 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 définir une règle iptables
permettant de rediriger toutes les connections à destination du port 80 vers le
port de notre proxy (8080). A savoir que Squid ne gère 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

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

httpd_accel_uses_host_header on
httpd_accel_single_host off

Voici la règle iptables nécessaire 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 même 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 accès

Il est possible de restreindre les accès à Internet via Squid. Nous avons
interdit l'accès à 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'accès à un domaine

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Nous avons interdis l'accès au domaine toto.com, voici comment procéder


:
acl interdit dstdomain toto.com
http_access deny interdit

b. Interdire les sites contenant un mot donné

Imaginons que nous voulons interdire l'accès au site Web contenant le mot
"toto", voici comment procéder :
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 procéder :
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
présent, utilisons-le :

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Les ACL (Access Control Lists) permettent de définir 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 plutôt sur la documentation officielle.

Les restrictions indiquent quoi faire lorsque ces conditions sont vérifiées. 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 première
"restriction" vérifiée est la bonne, d'où l'importance de l'ordre dans lequel elles sont placées.

Sans faire une analyse détaillée, nous voyons que dans la configuration par défaut, seul
"localhost" peut utiliser le proxy (Allow localhost). Il nous faut donc faire intervenir la notion
de réseau local.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Créer une ACL représentant le LAN


Nous sélectionnons dans la liste déroulante "Client Address" et cliquons sur "Create New
ACL" :

Nous pouvons définir 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, appelée"Localnet"

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


sélectionnons "LocalNet" dans la liste "Match ACLs".

Save...

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Enfin, au moyen des flèches 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'idée de faire plutôt "Allow all" est une mauvaise idée. 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...

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

A ce niveau, nous avons une première 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

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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 fonctionnalités sont incompatibles.
Dans la configuration mise en oeuvre ici, nous ne faisons pas de contrôle 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 système
d'authentification.
Il y a plusieurs méthodes disponibles pour authentifier les utilisateurs du proxy. Elles font
toutes appel à un programme extérieur, différent suivant le moyen choisi. Debian propose les
modules suivants :
ncsa_auth, smb_auth, getpwnam_auth, ldap_auth, pam_auth
Les plus intéressants sont probablement :
•ldap_auth, qui permet d'authentifier les utilisateurs depuis un annuaire LDAP (si vous
maîtrisez déjà LDAP),
•smb_auth, qui permet d'utiliser un contrôleur 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 réseau local est un domaine Microsoft Windows.
Construire un fichier d'utilisateurs.
Nous allons créer 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 défaut Apache pour
faire tourner Webmin):
# htpasswd -b /etc/squid/users <nom de l'utilisateur> <mot de passe>
A répéter autant de fois que nécessaire 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 chiffrés. Il aurait été possible d'utiliser le fichier passwd des
utilisateurs Linux, mais ce n'est pas forcément une très bonne idée...

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Vérifions que ça fonctionne, en lançant "à 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, séparés par un espace :
# /usr/lib/squid/ncsa_auth /etc/squid/users
chris *******
OK
chose truc
ERR

Le système répond par OK ou par ERR suivant que l'authentification réussit ou non.
Sortez de la boucle avec un "ctrl-d".
Si ça fonctionne comme ça, c'est déjà bon signe.
Configurer squid pour réclamer l'authentification de vos utilisateurs.
On peut le faire avec Webmin, faisons-le donc.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Pour Authentification program, indiquez le chemin du module ncsa_auth, suivi du chemin


du fichier des utilisateurs, séparés 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 défaut de 5. Si vous avez de nombreux utilisateurs, il sera peut-être nécessaire
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 réussie, 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 même utilisateur essaye de s'authentifier depuis deux machines différentes dans un laps
de temps trop court, il sera refusé. Ceci peut être utilisé pour empêcher le partage d'un droit
d'accès entre plusieurs utilisateurs.
Cette dernière option est tout à fait digne d'intérêt...
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.
Vérifions tout de même qu'après rechargement de squid le module d'authentification est bien
présent :
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.

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Passons donc aux ACLs. On a déjà vu comment s'y prendre, nous créons une nouvelle ACL
de type "External auth" :
(save)

Nous plaçons une nouvelle ligne dans les restrictions, en interdisant (deny) à tous ceux qui ne
satisfont pas (Don't match ACLs) à l'ACL Users.
(save)

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Enfin, nous remontons cette restriction juste au dessus de allow LocalNet


Application des changements, nous vérifions 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 accéder au monde extérieur, Squid nécessite maintenant une authentification.
Comme nous l'avons paramétré, 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 dernières lignes de /var/log/squid/access.log, nous
constatons que le nom d'utilisateur figure pour chaque requête :

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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 présent...
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

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

Notez que vous pouvez aussi gérer 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, même 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 déjà d'une
source d'authentification sur votre LAN, intéressez-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 contrôleur de
domaine Microsoft, ça fonctionne, mais SAMBA doit être installé sur le proxy, même s'il ne
tourne pas. Suivant l'exposition de votre proxy par rapport au lien Internet, ça peut présenter
quelques risques.
Sa mise en place ne pose pas de problèmes 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 utilisée sur le Net, en permettant de garder en
cache les pages les plus souvent visitées. Si c'est une de vos principales préoccupations, il sera
probablement nécessaire d'agir sur les diverses options du cache. Passez alors du temps à lire
la documentation. Vous pourrez agir sur la taille du cache, sa répartition sur les divers disques
durs...
Pour réaliser correctement une telle opération, il vous faudra installer d'abord des outils
d'audit de performance dudit cache. Détailler ces opération ici nous mènerait trop loin. (Il y a
une doc assez complète avec Squid ;-))

Rendre le proxy transparent.


Utiliser un proxy nécessite normalement de configurer son "butineur" de manière à ce qu'il
interroge toujours le proxy, quelle que soit la cible.
Vos utilisateurs ont donc généralement la main sur ce paramétrage, et pourront probablement
passer outre le proxy, s'ils le décident, contournant par le fait toutes vos stratégies. Il existe
cependant deux moyens d'éviter cela :
•utilisez votre firewall pour bloquer pour vos postes clients l'accès direct à l'Internet par
les ports http et https (80, 443, 563...). De cette manière, 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 configurés ou non, les requêtes http
passeront quand même par le proxy. Pour arriver à ce résultat, il faut réaliser deux
opérations :
•Rediriger en PREROUTING le port 80 (vous devrez vous contenter d'un seul port
transparent) vers le port proxy sur son port (3128 par défaut pour squid), ça se fait
sans problèmes sur votre routeur NAT avec IPtables,
•Configurer correctement squid pour qu'il interprète convenablement les requêtes
HTTP qu'il reçoit.
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr

Attention...
•Cette méthode est incompatible avec l'authentification des utilisateurs. Même si
squid est configuré comme nous l'avons vu pour l'authentification ncsa, celle-ci ne
fonctionnera plus.
•cette méthode ne supporte que HTTP. FTP est impossible en mode transparent,
•un seul port peut être redirigé de façon transparente, le 80, de préférence, puisque
c'est le port habituel pour HTTP.
La règle de redirection.
Voici la règle à ajouter sur votre passerelle, en admettant que votre réseau est dans
192.168.0.0 et que votre proxy possède l'adresse 192.168.0.252. Nous supposons que le proxy
est installé sur la machine qui assure également le rôle 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 façon transparente sur un proxy installé sur une autre machine
que la passerelle, à la condition que cette dernière soit placée dans un autre réseau IP que le
LAN, faute de quoi, la translation de port ne fonctionnera pas correctement.
Avec un routeur à trois voies, par exemple deux réseaux IP (disons 192.168.0.0 et
192.168.1.0), et un accès 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 règle 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 réseaux 192.168.0.0 et 192.168.1.0.
Dans la pratique, vous devrez donc disposer de trois interfaces réseau sur votre routeur NAT.
Paramétrage de Squid.
Comme nous l'avons vu dans le chapitre sur HTTP, Le client HTTP n'agit pas de la même
manière 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" :

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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

www.udivers.com contact : tssri-reseaux@hotmail.fr


www.udivers.com contact : tssri-reseaux@hotmail.fr

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 entraîne 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.
Beaucoup d'autres choses sont possibles, je ne les pas encore essayées, je vous laisse faire.
Pour ce qui est du filtrage d'accès, il est possible de faire déjà des choses avec Squid tout seul,
mais le "helper" SquidGuard que nous allons voir dans la suite rend inutiles les tentatives de
filtrage avec les seuls moyens de Squid.

www.udivers.com contact : tssri-reseaux@hotmail.fr

Vous aimerez peut-être aussi