Squid est un serveur mandataire (proxy en anglais). Dans les réseaux locaux, il est utilisé pour des fonctions de filtrage d’URL ou en tant que cache. Les pages web sont stockées sur le serveur local, ce qui évite d’aller les recharger plusieurs fois et permet d’économiser de la bande passante Internet. Cet article décrit l’installation et la configuration de Squid sur un serveur de réseau local CentOS.
La configuration présentée ici concerne les seules connexions HTTP. Le traitement des connexions HTTPS fait l’objet d’un article à part. Cette façon de procéder est motivée avant tout par un souci pédagogique, étant donné que la gestion des connexions sécurisées par Squid est passablement complexe.
- Prérequis
- Installation
- Configuration
- Utilisation
- Configuration manuelle de Firefox
- Vérifier le fonctionnement
- Configurer Squid comme proxy transparent
Prérequis
Dans la configuration par défaut, Squid utilise le port 3128 en TCP. Il faut donc songer à l’ouvrir dans le pare-feu.
$ sudo firewall-cmd --permanent --add-service=squid $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all internal (active) target: default icmp-block-inversion: no interfaces: enp3s1 sources: services: dhcp dns squid ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Installation
Squid est officiellement supporté par Red Hat Enterprise Linux et CentOS. On peut donc l’installer depuis les dépôts officiels.
$ sudo yum install squid
Configuration
Squid se configure par le biais du fichier /etc/squid/squid.conf
, qui est quasiment prêt à l’emploi, à quelques directives près. Notons que le répertoire offre déjà un fichier identique squid.conf.default
, ce qui nous évite d’effectuer une copie de sauvegarde.
J’édite ce fichier par défaut en regroupant les directives existantes et en adaptant la configuration à mon réseau. Voici à quoi cela ressemble.
# /etc/squid/squid.conf # Allow access from local network acl localnet src 192.168.3.0/24 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 # Access permissions http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet http_access allow localhost http_access deny all # Listen to port 3128 http_port 3128 # Cache size cache_mem 256 MB # Write cache to disk # cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache directory coredump_dir /var/spool/squid # Refresh patterns refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
Cette configuration mérite quelques remarques.
- Squid peut être utilisé par toutes les machines du réseau local
192.168.3.0/24
. La directiveacl localnet
définit une variablelocalnet
qui indique l’étendue du réseau local. - Cette directive fonctionne de pair avec
http_access localnet
, qui autorise toutes les machines du réseau local à utiliser le cache. Le nomlocalnet
est une convention, et on est libre d’en utiliser un autre. - Dans l’exemple ci-dessus, le cache est uniquement écrit dans la RAM du serveur. La directive
cache_mem
permt de définir la taille du cache. Si l’on ne souhaite pas utiliser le disque dur pour le cache, il faut s’assurer de n’utiliser aucune directivecache_dir
.
Utilisation
J’active et je démarre le service.
$ sudo systemctl enable squid --now
Je vérifie l’état de fonctionnement.
$ systemctl status squid
Configuration manuelle de Firefox
Lorsque Squid n’est pas utilisé comme proxy transparent, il faut procéder à une configuration individuelle des navigateurs web sur les postes clients. Pour Firefox, ouvrir Préférences > Paramètres réseau > Paramètres et indiquer le nom d’hôte ou l’adresse IP ainsi que le port du proxy.
Vérifier le fonctionnement
Pour voir si les postes clients utilisent effectivement le proxy, on peut afficher en direct le contenu du journal /var/log/squid/access.log
.
$ sudo tail -f /var/log/squid/access.log 1519986674.236 166 192.168.2.2 TCP_MISS/200 4330 GET http://www.slackware.com/ - HIER_DIRECT/95.100.252.163 ... 1519986674.607 45 192.168.2.2 TCP_MISS/200 676 GET http://www.slackware.com/favicon.ico - ...
Pour l’instant Squid ne gère que les connexions HTTP. On prendra donc soin de tester la configuration avec des sites qui n’utilisent pas le chiffrement, comme par exemple http://www.slackware.com ou http://www.tldp.org.
Configurer Squid comme proxy transparent
Jusqu’ici, l’utilisation du proxy cache s’effectue de manière volontaire, c’est-à-dire que Squid est utilisé si les postes clients ont configuré leurs navigateurs Web en conséquence, comme nous venons de le voir. Si cette configuration n’est pas effectuée, les utilisateurs vont simplement contourner le cache.
Pour éviter cela, on va tout simplement rediriger toutes les requêtes HTTP (port 80) vers le port 3128 pour obtenir un proxy transparent. Ce qui signifie que le cache est utilisé automatiquement, sans la moindre configuration de la part de l’utilisateur. Évidemment, cela suppose que Squid tourne sur la machine qui fait office de passerelle dans le réseau local.
Dans le fichier /etc/squid/squid.conf
, il faudra modifier une seule ligne.
# Port du proxy
http_port 3128 transparent
Ne pas oublier de prendre en compte les modifications.
$ sudo systemctl reload squid
On va partir du principe que le relais des paquets est déjà activé. Il ne reste plus qu’à rediriger les paquets IP via le pare-feu. Voici à quoi cela peut ressembler.
$ sudo firewall-cmd --permanent \ --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=192.168.3.1 $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all internal (active) target: default icmp-block-inversion: no interfaces: enp3s1 sources: services: dhcp dns squid ssh ports: protocols: masquerade: no forward-ports: port=80:proto=tcp:toport=3128:toaddr=192.168.3.1 source-ports: icmp-blocks: rich rules:
Là aussi, il faut afficher les logs « à chaud » pour voir si le proxy transparent est effectivement utilisé par les postes clients.
$ sudo tail -f /var/log/squid/access.log
Une fois qu’on a opéré la transition vers une configuration transparente du proxy, il faudra évidemment songer à supprimer la configuration manuelle du proxy dans les navigateurs web des postes clients.
Dans notre prochain article, nous nous intéresserons de plus près à la gestion des connexions HTTPS avec Squid.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
3 commentaires
thiegna · 26 mai 2020 à 10 h 45 min
bonjour
j’ai installé squid 3.4 qui marche bien.
mais j’ai un soucis avec le traffic smtp.
pouvez-vous m’aider sur cet aspect
kikinovak · 26 mai 2020 à 14 h 11 min
Je ne comprends pas le sens de votre question. Squid est un serveur proxy censé intercepter le trafic HTTP/HTTPS. Et c’est tout.
Le blog technique de Microlinux – C'est bien fait pour vous > Seekalgo · 20 décembre 2020 à 13 h 51 min
[…] Serveur proxy cache HTTP avec Squid sous CentOS 7 […]
Les commentaires sont fermés.