Installation d’un proxy (Squid et SquidGuard)

Tout d’abord, qu’est-ce que c’est un proxy ? Eh bien, un proxy est un service qui sert de mandataire, il sert également à mettre en cache des ressources et à filtrer.

Le proxy va effectuer toutes les requêtes WEB à notre place, les ressources qu’il téléchargera pourront être mise en cache comme ça si deux personnes demande la même page, la page étant en cache elle se chargera plus rapidement. Il faut faire attention avec le cache car aujourd’hui beaucoup de site sont dynamique, si on les récupère dans le cache se seront les anciennes versions de la page en question.

Le proxy a un autre avantage, le serveur WEB ne verra pas votre adresse public mais celle du proxy. Il permet aussi de filtrer, bloquer les sites indésirables.

Dans cette article nous allons mettre en place Squid sous Linux, il peut aussi être installés sous MACOS et même sous Windows, mais je ne traiterais que le cas de linux.

Dans mon cas j’ai une Debian 9. Une fois que nous aurons installés Squid nous ajouterons SquidGuard. Squid est un serveur proxy cache tandis que SquidGuard est un logiciel supplémentaire qui permet de filtrer. Squid fonctionne sur le port proxy par défaut, le 3128.

La configuration de mon réseau est un peu particulière étant donné que j’utilise un deuxième proxy. Mon proxy sera donc un intermédiaire entre mes clients et l’autre proxy.

Mon proxy a pour adresse IP 172.16.6.104 et le deuxième proxy à l’adresse 192.168.20.100.

I) Squid

Pour installer Squid c’est très simple il suffit de faire : apt-get install squid3.

Et voilà c’est fini… Non je plaisante ! Maintenant qu’il est installé il faut le configurer. Les fichiers de configuration de Squid se trouve dans /etc/squid. Nous allons commencer par faire un backup du fichier /etc/squid/squid.conf (je le copie en squid.conf.back).

Une fois le backup fait nous allons supprimer tous les commentaires, comme j’utilise vi, il me suffit d’entrer la commande :g/^#/d, mais je comprends pas il me reste des lignes vide !? C’est normal, lançons la commande :g/^\s*$/d.

On va ensuite ajouter des ACL (Access Control List) pour chaque Vlan qui utilisera le proxy.

Les ACL sont des raccourcies qui permettent dans nos règles de préciser le nom de l’ACL et non pas indiquer une règle par personne concerné. Les lignes http_access sont des règles qui permettent de dire qui a le droit de sortir ou non. Quant au http_port il permet de préciser le port de notre serveur Squid.

On ajoute la ligne http_access allow lan qui va autoriser les LAN à utiliser le serveur.

Comme je l’ai précisé, mon proxy est un intermédiaire vers un autre proxy, je vais donc ajouter deux lignes à mon fichier qui permettront d’indiquer le proxy suivant.

Cache_peer indique le prochain proxy dans la hiérarchie, ensuite on indique l’adresse IP du prochain proxy, « parent » est le type de proxy (il en existe trois, « parent« , « sibling » et « multicast« ). Après le type de proxy (parent) il y a le port du proxy (8080). Le ‘0‘ correspond au port ICP, l’ICP est la mise en cache, ‘0‘ indique que je n’utilise pas le cache du serveur proxy. Ensuite on ajoute « no-query » qui indique qu’il ne faut pas faire de demande ICP au proxy. « default » indique que ce proxy est utilisé par défaut.

La ligne never_direct est indispensable, elle sert à dire à notre serveur proxy de ne jamais faire de requête direct (toujours passer par le proxy parent). En fait on autorise (allow) pour tous (all) de ne jamais être direct (never_direct).

II) SquidGuard

Maintenant qu’on en a fini avec Squid, nous allons nous mettre à SquidGuard. SquidGuard va servir à filtrer les requêtes qui passent par le serveur proxy.

Pour l’installer on utilise notre gestionnaire de paquet préféré et on ajoute le paquet squidguard (dans mon cas apt-get install squidguard)

On va commencer par télécharger une blacklist, une blacklist c’est une liste de nom de domaine, d’adresse IP ou d’URL, qui sont bloqué par le proxy. Il existe également les whitelist qui autorise certain site. Avec un whitelist on bloque tout sauf la whitelist alors qu’avec une blacklist on autorise tout sauf ce qui est dans la blacklist.

Je lance la commande : wget http://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz

Vous êtes libre de prendre la blacklist de votre choix, par exemple il y en a quelques-unes sur le site de squidguard.

Ensuite je vais extraire (tar xzf) le fichier dans le dossier /etc/squidguard/db, pour l’exemple je vais conserver uniquement les blacklists « porn » et « hacking ».

Passons à la modification du fichier de configuration de SquidGuard (/etc/squidguard/squidGuard.conf).

On commence par modifier la ligne dbhome, cette ligne précise à SquidGuard ou se trouve les blacklists, comme je les mets dans le dossier /etc/squidguard/db, j’indique donc ce chemin, vous êtes libre de l’emplacement de vos listes dans tous les cas faites attention à bien indiquer le bon chemin. La seconde ligne est l’emplacement des logs de SquidGuard, je les laisse dans le dossier par défaut.

On définit les sources (src), les sources sont les entités qui utilisent le proxy. Ici j’ai définis une source, mon réseau locale (localnet). L’étape suivante consiste à définir les destinations (dest), les destinations sont les domaines, URLs, IP, etc. vers lesquelles les sources se diriges.

Je n’ai pas touché aux destination de base, « good » et « local » et j’en ais ajoutés deux « porn » et « hacking« .

Maintenant que nous avons nos sources et nos destinations nous allons définir des ACL, des règles qui définissent les autorisations de nos sources vers nos destinations.

Par défaut on ne laisse rien passer (pass none), pour le réseau local, on laisse tout passer (any) sauf « porn » (!porn) et « hacking » (!hacking).

Ensuite on crée un lien du fichier squidGuard.conf dans le dossier de Squid3 (ln -s squidGuard.conf /etc/squid/)

On ajoute également une ligne dans le fichier squid.conf, cette ligne permet d’indiquer à Squid de rediriger les requêtes reçues par le service Squid vers le module SquidGuard.

SquidGuard fonctionne avec des fichiers de base de données, pour générer ces fichiers on lance la commande squidGuard –C all, qui va générer une base de données pour chaque liste de domaine et d’URL contenus dans son dossier dbhome.

Pour finir on attribue le propriétaire de tous les fichiers dans le dossier dbhome a l’utilisateur de Squid.

Maintenant il nous reste plus qu’à tester tout ça. Une fois le proxy configuré sur le client (dans les options de connexion de votre navigateur préféré) choissisez un ou deux sites parmis les listes qui sont bloqué et vérifier le bon fonctionnement du proxy.

III) La redirection vers une adresse locale

Dans notre contexte on a, en plus du proxy, un DNS et un serveur web, on a ajouté un enregistrement de type A vers le serveur web donc quand on tape www.kvbooktic.local on fait, en réalité, 172.17.0.98:80.

Plus tôt dans cet article SquidGuard redirigeait vers le 172.17.0.100, depuis l’article sur LVS on utilise l’adresse 172.17.0.98 pour atteindre le serveur web.

Notre fichier squidGuard.conf ressemble donc à ceci :

Remarque : Il ne faut surtout pas oublier le http:// !!! Je m’explique si on écrit http://www.kvbooktic.local SquidGuard enverra cette information à Squid et tout fonctionnera bien par contre si on écrit www.kvbooktic.local SquidGuard envoie cette information à Squid et Squid ne sait pas quoi faire d’un www.kvbooktic.local car il ne sait pas quel protocole utiliser pour cette information.

Il y a encore un problème, lorsque Squid reçoit l’information http://www.kvbooktic.local, il envoie cette information au proxy parent car on a mis, dans le fichier squid.conf, les options cache_peer et never_direct. La solution à ce problème est d’ajouter, toujours dans le fichier squid.conf, une acl pour notre nom de domaine et de dire au proxy de faire les requêtes directement pour cette acl.

Comme on le voit sur l’image juste au-dessus, on a déclaré une acl pour notre nom de domaine (acl dmz dstdomain www.kvbooktic.local) ainsi qu’une règle autorisant (allow) notre acl (dmz) à être résolue directement (always_direct) par notre proxy.

sources : site officiel de squid ; site officiel de squidguard ; forum de stack exchange

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.