Présentation et installation de Squid

Squid est le nom d’un serveur mandataire (proxy). Nous allons voir ici à quoi sert un proxy, puis procéder à l’installation d’un tel serveur .squid1

1 Utilités d’un serveur mandataire

Un serveur mandataire est un intermédiaire par lequel passe la connexion réseau. Cet intermédiaire peut être placé à différents endroits du réseau, en fonction de l’utilisation que l’on souhaite en faire. En voici quelques-unes :

1.1 Contourner une censure

Prenons l’exemple d’un site américain qui propose des vidéos en streaming. En raison des règles de copyright, le site en question n’a pas le droit de diffuser ces vidéos en dehors du territoire américain.
PC1 souhaite visionner une vidéo du serveur vid.tld, mais ne parvient pas à y accéder. En effet, le serveur vid.tld voit l’adresse IP publique de PC1 (celle de la BOX), et sait qu’elle provient de France : ainsi il ne lui envoie pas la vidéo demandée.
Pour contourner ce blocage, PC1 va utiliser un serveur mandataire prox.tld situé aux États-Unis. Ainsi la connexion de PC1 est déviée vers le territoire américain : c’est le serveur prox.tld qui va effectuer la requête au serveur vid.tld. Le serveur vid.tld enverra donc la vidéo demandée à prox.tld, qui la renverra à PC1.

1.2 Serveur cache

Encore aujourd’hui, les connexions Internet sont limitées en bande passante. Pour ne pas encombrer le réseau, il peut être utile de posséder une copie de certaines données à un endroit plus proche.
Exemple : PC1 est sous debian. Il souhaite installer le logiciel imagemagick : le téléchargement des paquets se fait à partir du serveur dep.tld, et prend un certain temps. En effet, la connexion ADSL qui relie BOX à Internet est très lente…
Si plusieurs ordinateurs font de même, on multiplie ce temps par le nombre d’ordinateurs, ce qui peut vite saturer la connexion.
Pour pallier à cela, on peut alors avoir recours à un serveur cache sur le réseau local. Si prox.local est configuré en tant que cache, le téléchargement effectué par PC1 est gardé en mémoire par prox.local. Lorsqu’un autre ordinateur du réseau local souhaite télécharger le même fichier, le serveur prox.local lui fournira alors celui-ci sans passer par Internet.
Dans cette configuration, il faut que les ordinateurs PC1 et PC2 soient correctement configurés pour utiliser prox.local en tant que proxy. Si on souhaite forcer l’utilisation du proxy sur le réseau, il faut le placer physiquement entre les ordinateurs et Internet (par exemple sur l’ordinateur Netbook), ou configurer le Routeur de façon adéquate.

1.3 Contrôle d’accès

Un serveur proxy peut également servir à contrôler les accès : qui a le droit d’accéder à quoi. On peut retrouver ce fonctionnement dans des réseaux ouverts (hotspots), des entreprises, lycées… Une utilisation particulière est le cas du contrôle parental (squidguard).

2 Installation d’un serveur Squid sur debian 8

Il serait intéressant de pouvoir disposer d’un serveur cache sur notre réseau local afin d’accélérer la navigation et les téléchargements. Nous allons donc installer et configurer Squid sur l’ordinateur Netbook.

2.1 Installation et configuration de base

Sur le serveur, on lance ces commandes :

# apt-get update
# apt-get install squid

Le serveur proxy est installé ! Sa configuration se trouve dans /etc/squid/squid.conf. Éditer ce fichier avec nano, et ajouter après la ligne « acl localhost src » la ligne suivante :

acl allowedips src 10.42.0.0/24

Cette ligne autorise les paquets en provenance du routeur à accéder au proxy (Le routeur a une adresse en 10.42.0.x). Quand un PC veut accéder au proxy, c’est l’adresse IP du routeur que le proxy voit, car il se trouve entre les deux.
Pour contenir le cache, nous avons à disposition un disque externe de 60Gio préalablement formaté en ext4. Une fois branché, repérer le nom de la partition à l’aide de la commande fdisk -l. Dans notre cas, c’est /dev/sdc1
Créons un point de montage, puis montons la partition :

# mkdir /proxy
# mount /dev/sdc1 /proxy

On crée ensuite un sous-dossier, et on change son propriétaire :

# mkdir /proxy/cache
# chown -R proxy /proxy/cache

Retournons dans la configuration du proxy. Rechercher dans le fichier squid.conf la ligne :

# cache_dir ufs /var/spool/squid 100 16 256

Pour autoriser davantage de stockage (100Mo par défaut, mettons 5Go), il faut dé-commenter la ligne (enlever le #) et la modifier comme ceci :

cache_dir ufs /var/spool/squid 5000 16 256

On va également augmenter la taille maximum des éléments enregistrés dans le tampon :

maximum_object_size 35 MB

Enregistrer les modifications. Squid est lancé par défaut avec des droits restreints, pour des questions de sécurité, avec l’utilisateur « proxy ». Pour que Squid puisse écrire des fichiers de log, on va donc créer un répertoire et ajuster les permissions :

# adduser proxy root
# mkdir /proxy/log
# chown -R proxy:root /proxy/log

Les fichiers présents dans /proxy/log peuvent être très utiles en cas de dépannage du proxy. Généralement ceux-ci se trouvent dans /var/log/squid (répertoire qu’il faut alors créer), mais j’ai choisi de placer ces logs sur le disque externe pour des raisons de place et pour limiter le nombre d’écritures sur le disque interne du Netbook.

On doit alors dire à Squid de mettre les logs dans le répertoire que nous venons de créer. Pour cela, on va rechercher dans squid.conf les lignes commençant par «access_log», «cache_log» et «cache_store_log», et on va les renseigner ainsi:

access_log /proxy/log/access.log squid
cache_log /proxy/log/cache.log
cache_store_log /proxy/log/store.log

Maintenant il faut initialiser le cache pour une première utilisation, puis relancer le proxy.

# service squid stop
# service squid -z
# service squid start

2.2 Test du proxy

À ce stade le serveur doit déjà être fonctionnel. Pour le tester, sur les ordinateurs PC1 et PC2, on va paramétrer Firefox de façon à ce qu’il utilise le proxy. Cela se passe dans les paramètres : Options > Avancé > Réseau > Paramètres…
On coche « Configuration manuelle du proxy », dans « Proxy HTTP » on met l’adresse ip du serveur proxy (10.42.0.1), et dans port on met « 3128 ». On active également le proxy pour tous les protocoles en cochant la case correspondante.

La navigation sur le web devrait se faire sans changement notable. Poursuivons le test : sur PC1 on va procéder au téléchargement d’un fichier un peu lourd (5Mo). On fera attention au temps que prend le téléchargement. Quand cela est fait, on fait de même sur PC2. Le téléchargement devrait être instantané : le fichier ne provient plus d’Internet mais du cache Squid local, qui est beaucoup plus rapide.

À la fin du test, ne pas oublier de rétablir les paramètres de Firefox (« pas de proxy »).

2.3 Montage du disque dur

Nous avons monté la partition du disque dur manuellement. Si Netbook est redémarré, le montage ne se fera pas tout seul : il faut paramétrer cela.

Lorsque nous branchons le disque, il est automatiquement reconnu par le système, et numéroté en fonction de l’ordre de branchement. Ainsi le disque système est sda, les périphériques suivants se nommeront sdb, sdc, etc… L’ordre risque de ne pas toujours être le même, il faut alors avoir un moyen de nommer le disque sans ambiguïté. Cela se fait avec l’UUID, qui est un identifiant unique désignant la partition. Il peut se trouver avec la commande :

# ls -l /dev/disk/by-uuid

Commençons par démonter la partition :

# umount /proxy

Nous allons nous servir de l’UUID trouvé pour ajouter des lignes au fichier /etc/fstab (c’est le fichier de configuration gérant le montage des partitions) :

#Partition pour Squid
UUID=c3cc32c0-b4bd-49f6-b23c-35fed37adea5 /proxy ext4 defaults 0 2

Quand cela est fait, on peut remonter la partition avec :

# mount /proxy

Notez qu’on n’a plus besoin de spécifier quel périphérique nous souhaitons monter (/dev/sdc), car cela est déjà paramétré dans le fichier fstab.

2.4 Forcer l’utilisation du proxy

Nous voulons que tous les ordinateurs du réseau passent par le proxy. Plutôt que de faire la configuration manuellement sur chaque ordinateur, qui sera à refaire quand l’ordinateur se connecte à un autre réseau, on peut forcer l’utilisation du proxy sur le réseau.

Pour cela, on commence par éditer le fichier de configuration de squid, et on modifie la ligne suivante :

http_port 3128

comme ceci :

http_port 3128 transparent

Il faut maintenant forcer tout le trafic réseau provenant de la carte filaire (eth0) à passer dans Squid (port 3128). Cela se fait avec une règle iptables :

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

On teste avec PC1 et PC2, si cela fonctionne il faut rendre la règle permanente. On édite le fichier /etc/rc.local, et on ajoute à la fin la ligne :

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 &

Ainsi la commande sera exécutée au redémarrage de Netbook.

Note : on ne redirige que le port 80, qui correspond au trafic web HTTP. Le trafic HTTPS ne peut pas être géré par Squid, car il est chiffré de bout en bout : le serveur Squid ne voit pas les fichiers qui transitent, et ne peut donc pas les mettre en cache.

3 Liens externes

https://doc.ubuntu-fr.org/squid
https://doc.ubuntu-fr.org/tutoriel/monter_un_volume_automatiquement
https://doc.ubuntu-fr.org/mount_fstab

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Blue Captcha Image
Refresh

*