Proxy HTTP avec contrôle d'accès
09/02/2005
 Christian CALECA 
Liste des cours

Squid

Accueil ] [ Fonctionnement ] [ Squid ] [ + sur squid ] [ SquidGuard ] [ + sur SquidGuard ]


Configuration matérielle utilisée

Un PII 300 MHz, 64 Mo de RAM et 2 G0 de disque dur devraient suffire pour un réseau d'une centaine de postes. La machine de test s'appelle "eros". Elle est indépendante du routeur NAT.

Rien n'empêche cependant d'installer Squid/SquidGuard sur la même machine que le routeur NAT, ça simplifiera même les choses si l'on souhaite rendre le proxy transparent.

Installation

Nous supposons que vous êtes sorti victorieux d'une installation de la "Woody", que votre configuration réseau fonctionne, que vous avez installé (et mis à jour) Webmin et qu'il fonctionne aussi. Nous allons beaucoup l'utiliser, bien que ce ne soit pas absolument indispensable.

Une fois que l'on a compris comment se dépatouiller avec le fameux "dselect", autant l'utiliser. Sinon, apt-get install fait aussi l'affaire.

Debian Woody stable installe squid 2.4. C'est important, parce que beaucoup de choses peuvent changer dans le fichier de configuration, suivant la version utilisée. Mandrake 9.1 fournit la version 2.5 et les "tags" du fichier de configuration ne sont pas tous identiques entre les deux versions.

eros:/etc# apt-get install squid
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
squid
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 684kB of archives. After unpacking 2334kB will be used.
Get:1 ftp://ftp.fr.debian.org stable/main squid 2.4.6-2 [684kB]
Fetched 684kB in 16s (40.6kB/s)
Preconfiguring packages ...
Selecting previously deselected package squid.
(Reading database ... 47133 files and directories currently installed.)
Unpacking squid (from .../squid_2.4.6-2_i386.deb) ...
Setting up squid (2.4.6-2) ...
Creating squid spool directory structure
2003/05/23 16:26:05| Creating Swap Directories
Starting proxy server: squid.

eros:/etc#

Comme vous le voyez, on l'installe et il démarre tout seul.

eros:/etc# ps aux | grep [s]quid
root 571 0.0 1.8 3824 1124 ? S 16:26 0:00 /usr/sbin/squid -D -sYC
proxy 574 0.8 8.2 8468 5068 ? S 16:26 0:03 (squid) -D -sYC
eros:/etc#

Effectivement, il tourne. N'y aurait-il rien de plus à faire ? Vérifions tout de suite, squid utilise par défaut le port 3128. Configurons donc un navigateur du LAN pour l'utiliser et essayons un URI au hasard...

error

C'était trop beau... Il faudra déjà mettre les mains dans le cambouis. Notez qu'il vaut mieux une configuration qui interdise trop qu'une configuration qui, par défaut, autorise trop, comme font certains...

Configuration minimale

Comme Webmin est bien installé, mis à jour et tout, et que le module pour squid est bien présent, utilisons-le :

access

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.

Créer une ACL représentant le LAN

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

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

Local Une nouvelle ligne est apparue dans la liste des ACLs, appelée"Localnet"
restriction Nous allons maintenant sur "Add proxy restriction, choisissons "Allow" et sélectionnons "LocalNet" dans la liste "Match ACLs".

Save...

localnet 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 :

google

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

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

Précédente ] [ Accueil ] [ Suivante ]