Un PII 300 MHz, 256 Mo de RAM et 20 G0 de disque dur devraient largement suffire pour un réseau d'une centaine de postes. La machine de test s'appelle « venus ». Elle est indépendante du routeur NAT. Elle est animée par Lenny (testing) et nous testerons le tout avec Squid 3.0.STABLE4-1. Enfin, nous vérifierons que ce que nous avons fait est compatible avec Squid 2.6, également fourni dans la Lenny.
Rien n'empêche cependant d'installer Squid/SquidGuard sur la même machine que le routeur NAT, ce qui simplifiera même les choses, surtout si l'on souhaite rendre le proxy transparent.
Nous supposons que vous êtes sorti victorieux d'une installation de la « Lenny », que votre configuration réseau fonctionne.
Depuis Squid 2.4, beaucoup de choses ont changé dans le fichier de configuration. Quant à squidGuard, il change de version de base de données Berkeley. Ce sont toutes ces raisons qui m'ont conduit à réécrire ce chapitre.
# apt-get install squid3 Lecture des listes de paquets... Fait Construction de l'arbre des dépendances... Fait Les paquets supplémentaires suivants seront installés : squid3-common Paquets suggérés : squid3-client squid3-cgi resolvconf smbclient Les NOUVEAUX paquets suivants seront installés : squid3 squid3-common 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 985ko dans les archives. Après dépaquetage, 6312ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? Réception de : 1 http://mir1.ovh.net testing/main squid3-common 3.0.STABLE-4 [246kB] Réception de : 2 http://mir1.ovh.net testing/main squid3 3.0.STABLE-4 [739kB] 985ko réceptionnés en 2s (342ko/s) Sélection du paquet squid3-common précédemment désélectionné. (Lecture de la base de données... 26690 fichiers et répertoires déjà installés.) Dépaquetage de squid3-common (à partir de .../squid3-common_3.0.STABLE4_all.deb) ... Sélection du paquet squid3 précédemment désélectionné. Dépaquetage de squid3 (à partir de .../squid3_3.0.STABLE4_i386.deb) ... Paramétrage de squid3-common (3.0.STABLE-4) ... Paramétrage de squid3 (3.0.STABLE-4) ... Creating Squid HTTP proxy 3.0 spool directory structure 2007/05/28 18:05:46| Creating Swap Directories 2007/05/28 18:05:46| /var/spool/squid3 exists 2007/05/28 18:05:46| Making directories in /var/spool/squid3/00 2007/05/28 18:05:46| Making directories in /var/spool/squid3/01 2007/05/28 18:05:46| Making directories in /var/spool/squid3/02 2007/05/28 18:05:46| Making directories in /var/spool/squid3/03 2007/05/28 18:05:46| Making directories in /var/spool/squid3/04 2007/05/28 18:05:46| Making directories in /var/spool/squid3/05 2007/05/28 18:05:47| Making directories in /var/spool/squid3/06 2007/05/28 18:05:47| Making directories in /var/spool/squid3/07 2007/05/28 18:05:47| Making directories in /var/spool/squid3/08 2007/05/28 18:05:47| Making directories in /var/spool/squid3/09 2007/05/28 18:05:47| Making directories in /var/spool/squid3/0A 2007/05/28 18:05:48| Making directories in /var/spool/squid3/0B 2007/05/28 18:05:48| Making directories in /var/spool/squid3/0C 2007/05/28 18:05:48| Making directories in /var/spool/squid3/0D 2007/05/28 18:05:48| Making directories in /var/spool/squid3/0E 2007/05/28 18:05:48| Making directories in /var/spool/squid3/0F Restarting Squid HTTP Proxy 3.0: squid3. eros:/etc#
Comme vous le voyez, on l'installe et il démarre tout seul.
# ps aux | grep [s]quid root 571 0.0 1.8 3824 1124 ? S 16:26 0:00 /usr/sbin/squid3 -D -sYC proxy 574 0.8 8.2 8468 5068 ? S 16:26 0:03 (squid) -D -sYC
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…
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…
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.
Le fichier de configuration est /etc/squid3/squid.conf. C'est devenu une habitude de commenter copieusement le fichier de configuration, au point qu'il devient plus un « manual » qu'un fichier de configuration. J'ai personnellement du mal à m'habituer à cette tendance. Aussi, je vous propose cette petite manipulation préliminaire :
# cd /etc/squid3 # mv squid.conf squid.conf.origin # cat squid.conf.origin | egrep -v -e '^[[:blank:]]*#|^$' > squid.conf
(J'adore la clarté des expressions régulières)
Ce qui permet d'obtenir un « vrai » fichier de configuration :
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access deny all icp_access allow all http_port 3128 hierarchy_stoplist cgi-bin ? access_log /var/log/squid3/access.log squid acl QUERY urlpath_regex cgi-bin \? cache deny QUERY refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 icp_port 3130 coredump_dir /var/spool/squid3
Ceci n'empêche bien sûr pas de lire le fichier squid.conf.origin
pour se documenter sur la configuration.
Dans un premier temps, disons pour aller très vite au but, que :
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). Si cette condition n'est pas respectée, la règle suivante étant deny all
, personne ne passe. Il nous faut donc faire intervenir la notion de réseau local.
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…
Modifions le fichier squid.conf de cette manière :
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl LocalNet src 192.168.0.0/24 http_access allow manager localhost http_access deny manager 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 http_port 3128 hierarchy_stoplist cgi-bin ? access_log /var/log/squid3/access.log squid acl QUERY urlpath_regex cgi-bin \? cache deny QUERY refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 icp_port 3130 coredump_dir /var/spool/squid3
Nous avons créé une ACL nommée LocalNet
représentant notre réseau local (acl LocalNet src 192.168.0.0/24
), et lui avons donné l'autorisation de passer le proxy (http_access allow LocalNet
). Nous relançons squid :
# /etc/init.d/squid3 reload Reloading Squid HTTP Proxy 3.0 configuration files. done.
Et cette fois-ci :
Nous disposons d'un proxy cache en état de marche pour notre réseau local.