Aller au contenu

Créer un Proxy Cache avec le Raspberry Pi et Squid

Squid est un serveur proxy (ou serveur mandataire en français) libre de droit multiplateformes et distribué sous Licence GNU GPL.  Le rôle d’un serveur proxy tel que Squid est de traiter les requêtes d’entrée/sortie sur le réseau, de les trier, de les classer et de les garder en mémoire (mise en cache) afin qu’elles soient rapidement disponibles lorsqu’une machine les redemande.

Squid Cache logoEt là, vous allez me dire : Mais quel est donc l’intérêt d’une telle solution dans le cadre d’un petit réseau domestique avec une Box ? Et bien, je vous répondrai, que outre le plaisir de bidouiller quelques lignes de configuration sous Linux, il peut y avoir quelques avantages à configurer un Proxy Cache à domicile.

 

  • Tout d’abord, il faut savoir que le gros des requêtes internet dans le cadre d’un usage familial a lieu le plus souvent aux mêmes heures (souvent après le travail ou le Weekend) et que celles-ci concernent fréquement les mêmes adresses internet (Webmail du FAI, Facebook, Youtube, Twitter, Steam, Google, Pinterest…). C’est déjà une bonne raison pour économiser de la bande passante pour tout le monde, surtout si la connexion ADSL est capricieuse. (PS: amis détenteurs de la fibre, passez votre chemin. Quoique…).
  • De plus, de nos jours, le nombre de machines qui accèdent au net à domicile va croissant (PC, tablette, smartphone, jouets, téléviseurs, montres, thermostat…) et l’on peut vite se retrouver avec une bonne dizaine d’objets connectés.
  • Enfin, utiliser un Raspberry Pi n’est pas dénué de sens car : la plateforme matérielle est largement suffisante pour ce genre de tâche, la consommation électrique est moindre et le gain de place n’est pas négligeable.

Nous allons donc voir ci-dessous comment installer et configurer Squid en simple Proxy Cache sur une distribution Raspbian.

  1. Première étape :  il vous faut un Raspberry Pi avec Raspbian installé sur une carte microSD. Pour que le système soit réactif, choisissez une carte microSd de 4Go ou plus et au minimum de classe 6. (La distribution Lite de Raspbian est largement suffisante). Une fois Raspbian installé, vous devrez lors du premier démarrage, configurer le système et activer le serveur SSH. Tutoriel pas à pas ici.
  2. Deuxième étape : Installation de Squid

Il faut donc vous connecter en root en local ou à distance(ex: avec Putty) au serveur SSH de votre Raspberry:

# On procède d'abord à une mise à jour du système avec la commande :
sudo apt-get update

# On met à jour les éventuels nouveaux paquets avec la commande :
sudo apt-get upgrade

On procède ensuite à l’installation de Squid :

# Installation de Squid avec la commande :
sudo apt-get install squid3

Vue la complexité et la densité du fichier de configuration de Squid je vous conseille fortement d’en faire une copie avant toute modification :

# Sauvegarde (copie) de la configuration initiale de Squid avec la commande :
cp /etc/squid3/squid.conf /etc/squid3/squid.conf.backup

# On peut bien évidement sauvegarder ce fichier où bon nous semble (ex : le répertoire /home/dossier_utilisateur)
# .backup n'étant qu'une extension créée pour repérer facilement le fichier de sauvegarde.
# N'importe quelle autre extension comme : .original ou .copie ... peut convenir

Avant de commencer à paramétrer et optimiser le fichier de configuration, nous allons d’abord créer un répertoire de cache exclusivement dédié à Squid :

# Création à la racine du système d'un répertoire de cache pour Squid avec la commande :
mkdir /CacheSquid

Ensuite, nous allons monter automatiquement ce répertoire en mémoire vive (RAM) avec le système de fichiers temporaires Linux “tmpfs” et cela va permettre trois choses :

  • Limiter les accès en écriture sur notre carte microSD et donc se prémunir d’une panne due une à une usure prématurée.
  • Améliorer la réactivité du cache proxy et donc accélérer encore notre navigation internet.
  • Détruire et nettoyer les données du cache à chaque redémarrage du Raspberry.
# Pour monter un disque automatiquement, on édite le fichier
# /etc/fstab avec l'éditeur nano de la manière suivante :
sudo nano /etc/fstab

# Et on y déclare notre répertoire de cache en mémoire
# afin qu'il se monte au démarrage du Raspberry :
tmpfs /cache tmpfs defaults,noatime,nosuid,size=448m 0 0

J’ai volontairement choisi une taille en mémoire de 448 Mo afin de laisser assez de mémoire libre pour Raspbian (576 Mo). En sachant qu’un cache proxy de 448 Mo pour un usage domestique est déjà plus que largement suffisant. Et nous allons faire en sorte, ci-dessous,  dans le fichier de configuration de Squid que ce cache ne soit jamais utilisé à plus de 80% de sa capacité totale.

Modifions donc maintenant notre fichier squid.conf :

# Pour ce faire, on édite le fichier /etc/squid3/squid.conf
# avec l'éditeur nano de la manière suivante :
sudo nano /etc/squid3/squid.conf

Pour vous faciliter la vie, et trouver facilement les lignes à modifier, vous pouvez utiliser la commande de recherche Ctrl+W dans l”éditeur Nano ou, si les lignes de codes vous rebutent, installer Webmin est faire toutes ces modifications via l’interface graphique dédiée au serveur Proxy Squid.

Une autre solution peut être aussi de supprimer toutes les lignes présentes et d’y copier le code ci-dessous qui suffit à faire fonctionner Squid :

# Autoriser son réseau local dans les ALC avec la ligne ci-dessous :
acl localnet src 192.168.1.0/24 # (à adapter en fonction de votre adressage réseau)

acl SSL_ports port 443          # https
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 deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

http_access allow localnet # Autorise les machines de votre réseau à accéder au Proxy
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128 # Déclaration du port d'écoute de Squid (3128 par défaut mais peut être changé ici)

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid3

# Add any of your own refresh_pattern entries above these.

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


# Déclaration du répertoire de cache utilisé par Squid et de la taille utilisable (ici 80%)
cache_dir ufs /CacheSquid 358 16 256

# Les valeurs off et deny all servent à masquer les adresses IP locales dans les requêtes HTTP
# Un peu de confidentialité ne peut jamais faire de mal 😉
via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access X-Forwarded-For deny all
header_access X_Forwarded_For deny all

# Paramètres des connections persistantes
half_closed_clients off
server_persistent_connections off # on interdit les connexions persistantes des serveurs
client_persistent_connections on
client_lifetime 15 minutes
persistent_request_timeout 2 minutes

# Delais de connexions des serveurs
connect_timeout 30 seconds
request_timeout 2 minutes
read_timeout 2 minutes

Une fois tous ces paramètres renseignés et enregistrés, il ne vous reste qu’a stopper Squid, à nettoyer le cache et à le relancer pour qu’il fonctionne.

# Arrêt et relance du serveur Proxy Squid avec les commandes suivantes :
sudo service squid3 stop
sudo squid3 -z
sudo service squid3 start

Pour finir, rendez-vous dans les paramètres réseau de vos machines et de vos navigateurs pour y déclarer l’adresse IP de votre Raspberry Pi et le port de connexion 3128.

parametres_reseau

Pour plus d’information sur les possibilités et les options offertes par Squid, rendez-vous sur le site officiel du logiciel et notamment la page des directives.

Et voilà vous savez maintenant configurer un Proxy Cache et bien évidement la procédure est sensiblement  la même quelque soit la plateforme utilisée (notamment un pour système basé sur Linux).

A bientôt.