L’accès à internet est devenu une partie intégrante de notre vie quotidienne, que ce soit pour le travail, les loisirs ou la communication. Cependant, la rapidité de navigation sur le Web peut être entravée par divers facteurs, tels que la bande passante limitée, le trafic réseau dense et les temps de latence élevés. C’est là que les solutions de mise en cache, comme Squid Cache, entrent en jeu pour améliorer considérablement l’expérience utilisateur en optimisant le processus de récupération de contenu en ligne.

Cet article a donc pour but de vous permettre de mettre en place Squid Cache comme un proxy cache HTTP et HTTPS !

Introduction

Squid Cache est un serveur proxy et un logiciel de mise en cache open source qui agit comme un intermédiaire entre les utilisateurs et les serveurs Web. Il fonctionne en stockant temporairement les données web souvent utilisées sur un serveur local, permettant ainsi aux utilisateurs de récupérer rapidement ces données sans avoir à accéder à nouveau au serveur d’origine. En d’autres termes, Squid Cache agit comme un gardien de contenu qui stocke localement les pages web, les images, les vidéos et d’autres ressources fréquemment demandées.

Lorsqu’un utilisateur accède à une ressource en ligne pour la première fois, Squid Cache vérifie si cette ressource est déjà stockée dans sa mémoire cache locale. Si c’est le cas, il la renvoie directement à l’utilisateur, ce qui accélère considérablement le temps de chargement. Si la ressource n’est pas présente dans la cache, Squid Cache la récupère depuis le serveur d’origine, la stocke localement et la renvoie à l’utilisateur. Les futures demandes de cette même ressource seront satisfaites à partir de la mémoire cache, réduisant ainsi le trafic sur le réseau et les temps de latence.

Fonctionnalités

  • Amélioration des performances : Squid Cache réduit les délais de chargement en fournissant des ressources stockées localement, ce qui permet aux utilisateurs d’accéder rapidement aux pages web et aux médias.

  • Réduction du trafic réseau : En stockant et en fournissant des ressources en cache, Squid Cache diminue le trafic entre les utilisateurs et les serveurs d’origine, allégeant ainsi la charge des serveurs et améliorant la bande passante globale.

  • Économie de bande passante : Les fournisseurs de services internet et les entreprises peuvent économiser de la bande passante en utilisant Squid Cache, car les ressources sont récupérées localement plutôt qu’à partir de serveurs distants.

  • Contrôle d’accès : Squid Cache permet également de mettre en place des politiques de contrôle d’accès pour restreindre l’accès à certains contenus, garantissant ainsi une utilisation appropriée du réseau.

  • Gestion du trafic : Les administrateurs réseau peuvent configurer Squid Cache pour distribuer intelligemment la charge du trafic sur plusieurs serveurs d’origine, optimisant ainsi les performances et la disponibilité.

Fichiers requis

docker-compose.yml

[Fichier]

version: "3.0"

#
# updated: 2023-08-10
# stack:   squid
#

x-logging: &x-logging
  logging:
    driver: loki
    options:
      loki-url: "http://loki:3100/loki/api/v1/push"
      loki-retries: "5"
      loki-batch-size: "400"
      keep-file: "false"
      max-size: "100m"
      max-file: "1"

x-environment: &x-environment
    TZ: "Europe/Paris"
    PUID: 1000
    PGID: 1000

x-common: &x-common
  <<: *x-logging
  restart: "no"
  stop_grace_period: 5s
  stdin_open: true
  tty: true
  privileged: false
  security_opt:
    - no-new-privileges=true
  cap_drop:
    - ALL
  cap_add:
    - KILL
  dns:
    - 1.1.1.1
    - 8.8.8.8
    - 1.0.0.1
    - 8.8.4.4
  ipc: "shareable"
  extra_hosts:
    - "template.home:1.2.3.4"
  user: 1000:1000
  environment:
    *x-environment
  labels:
    com.centurylinklabs.watchtower.enable: true
    logging: "promtail"
    com.stack.name: "common"
    com.stack.service.name: "common"
  devices:
    - /dev/kmsg:/dev/kmsg
  deploy:
    resources:
      limits:
        cpus: "0.50"
        memory: 64M
  ulimits:
    nproc: 65535
    nofile:
      soft: 20000
      hard: 40000
  tmpfs:
    - /tmp:rw,noexec,nosuid,size=64k
  sysctls:
    net.core.somaxconn: 1024
    net.ipv4.tcp_syncookies: 0
x-volume-timezone: &x-volume-timezone "/etc/timezone:/etc/timezone:ro"
x-volume-localtime: &x-volume-localtime "/etc/localtime:/etc/localtime:ro"
x-volume-docker-socket: &x-volume-docker-socket "/var/run/docker.sock:/var/run/docker.sock:rw"
x-volume-cgroups: &x-volume-cgroups "/proc/cgroups:/cgroup:rw"
x-volume-ssl: &x-volume-ssl "/opt/docker/ssl:/ssl:ro"

services:
  squid:
    <<: *x-common
    user: 0:0
    privileged: true
    cap_add:
      - DAC_OVERRIDE
      - DAC_READ_SEARCH
      - CHOWN
      - FOWNER
      - FSETID
      - SETGID
      - SETUID
      - MKNOD
      - SYS_ADMIN
      - BPF
      - SETFCAP
      - SETPCAP
      - SYS_CHROOT
      - SYS_RAWIO
      - IPC_LOCK
      - IPC_OWNER
      - NET_BIND_SERVICE
      - NET_ADMIN
      - NET_RAW
      - NET_BROADCAST
    container_name: squid
    hostname: squid
    image: distahl/squid:latest
    restart: always
    ports:
      - "3128:3128"
      - "3129:3129"
    expose:
      - "3128"
      - "3129"
    healthcheck:
      test: [ "CMD", "squid", "--version" ]
      interval: 30s
      timeout: 30s
      retries: 5
      start_period: 30s
    environment:
      <<: *x-environment
      PROXY_UID: 1000
      PROXY_GID: 1000
    labels:
      com.stack.name: "squid"
      com.stack.service.name: "squid"
    deploy:
      resources:
        limits:
          cpus: "4.0"
          memory: 1G
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=512M
    volumes:
      - *x-volume-timezone
      - *x-volume-localtime
      - *x-volume-cgroups
      - /opt/docker/squid/conf:/etc/squid
      - /opt/docker/squid/datas/logs:/var/log/squid
      - type: tmpfs
        target: /var/spool/squid
        tmpfs:
          size: 1G
          mode: 01777

conf/conf.d/zhome.conf

[Fichier]

# 2023-08-10

cache_mgr hostmaster@local
visible_hostname squidcache

dns_defnames on
dns_nameservers 1.1.1.1 8.8.8.8 1.0.0.1 8.8.4.4
positive_dns_ttl 6 hours
negative_dns_ttl 1 minute

error_default_language fr

cache_dir aufs /var/spool/squid 1024 32 512 max-size=1048576
coredump_dir /var/spool/squid

#access_log daemon:/var/log/squid/access.log squid
access_log none

#cache_log /var/log/squid/cache.log
cache_log /dev/null

forwarded_for on
uri_whitespace strip

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

redirect_children 16
memory_cache_mode always

cache_mem 1024 MB
maximum_object_size_in_memory 1 MB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
minimum_object_size 0 KB
maximum_object_size 4 MB
offline_mode off
cache_swap_low 90
cache_swap_high 95
cache allow all
request_body_max_size 0 KB

range_offset_limit 0
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 70

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

http_access allow localhost
http_access allow localnet

Prérequis

Je pars du principe que vous utilisez Portainer, que vous savez vous servir d’un éditeur de texte et que vous connaissez vos machines.

Avant de commencer, assurez-vous d’avoir Docker installé sur votre serveur. Docker est une plateforme de virtualisation légère qui permet d’exécuter des applications dans des conteneurs isolés.

Il vous sera aussi nécessaire de créer les répertoires suivants :

  • /opt/squid/conf/conf.d/
  • /opt/squid/datas/logs/

Si vous choisissez de placer l’ensemble des fichiers ailleurs, il sera donc nécessaire de mettre à jour les chemins dans le docker-compose entre autre.

Ces informations doivent refléter votre propre besoin ou organisation sur votre disque.

Procédure

Par défaut, pour des raisons de sécurité, l'ensemble des répertoires que j'utilise est positionné avec les droits utilisateur 1000:1000. Ce sera donc à ajuster au besoin selon votre cas.

Lorsque c’est fait, vous créez une nouvelle stack sous Portainer et copier/coller le contenu du fichier docker-compose.yml dans l’éditeur et vous lancez sa création.

Exploitation

Lorsque Squid Cache sera lancé et plainement fonctionnel, il vous suffira de renseigner l’adresse ip du serveur hébergeant Squid et de spécifier le numéro de port3128.

Par exemple, pour Firefox celà se configure sous Paramètres /Paramètres réseaux / Paramètres comme suit :

Conclusion

Squid Cache est un outil puissant pour optimiser l’accès au contenu web, en accélérant la navigation et en améliorant l’expérience utilisateur. Son rôle de serveur proxy et de cache contribue à réduire les temps de latence, à économiser la bande passante et à alléger la charge des serveurs d’origine. Les entreprises, les fournisseurs de services internet et même les utilisateurs individuels peuvent bénéficier de l’installation et de la configuration de Squid Cache pour optimiser leurs activités en ligne. En fin de compte, Squid Cache est un élément clé de l’arsenal technologique visant à créer un Web plus rapide et plus fluide pour tous.