Squid Squid Guard

Embed Size (px)

Citation preview

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

Squid/SquidGuardNous allons mettre en place un serveur proxy, avec Squid, lui adjoindre des fonctions avances de filtrage avec SquidGuard, et mme en faire un proxy transparent avec l'aide d'IPtables. Si une mise en place minimum de Squid ne prsente gure de difficults, l'insertion du "helper" SquidGuard reste tout de mme plus dlicate et mrite que l'on y passe un peu de temps. Rendre le proxy transparent est assez simple, du moment que l'on a compris un petit peu le fonctionnement du "prerouting" avec IPtables, mais nous verrons que cette mthode impose quelques restrictions sur les possibilits de Squid. Une fois n'est pas coutume (mais pourrait y amener), nous allons travailler avec une distribution Debian dite "stable" (la Woody, l'heure o je rdige ce chapitre). Pourquoi Debian ?

Elle est stable, elle s'installe assez simplement, si l'on a dj une petite exprience de Linux, elle est trs simple mettre jour, mme en cas de mise jour de version, il y a tout ce qu'il faut comme paquetages pour ce que l'on veut faire, et mme bien d'avantage encore.

Bien que la Debian soit utilise ici, rien n'interdit de le transposer une autre distribution, sous rserve d'utiliser des paquetages de bases de donnes Berkeley compatibles avec le fonctionnement de SquidGuard. Suivant la distribution, des problmes peuvent apparatre. J'ai tout de mme rencontr pas mal de problmes avec les Mandrake 9.0 et 9.1 en ce qui concerne Squid et SquidGuard. C'est aussi une bonne raison pour le faire avec Debian.

Page 1 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

Plan du chapitreFonctionnement.................................................................................................................................... 3 Objectif............................................................................................................................................ 3 Prsentation gnrale....................................................................................................................... 3 Principe de fonctionnement............................................................................................................. 3 Administration du tout..................................................................................................................... 4 Squid.....................................................................................................................................................5 Configuration matrielle utilise..................................................................................................... 5 Installation....................................................................................................................................... 5 Configuration minimale...................................................................................................................6 Crer une ACL reprsentant le LAN.......................................................................................... 8 + sur squid.......................................................................................................................................... 11 Affiner la configuration................................................................................................................. 11 Identifier les utilisateurs............................................................................................................11 Construire un fichier d'utilisateurs....................................................................................... 11 Configurer squid pour rclamer l'authentification de vos utilisateurs..................................12 Optimiser le cache................................................................................................................ 17 Rendre le proxy transparent...................................................................................................... 17 La rgle de redirection..........................................................................................................18 Paramtrage de Squid...........................................................................................................18 Conclusions....................................................................................................................................20 SquidGuard.........................................................................................................................................21 Installation..................................................................................................................................... 21 Installer squidGuard depuis les paquetages Debian..................................................................21 Installation du module squidGuard pour Webmin.................................................................... 21 Configuration................................................................................................................................. 22 Un squidGuard.conf minimum................................................................................................. 22 Les "Source Groups".................................................................................................................30 Les "Access Control Lists"....................................................................................................... 33 + sur SquidGuard................................................................................................................................38 Que faire maintenant ?...................................................................................................................38 Destination Groups et Blacklists....................................................................................................38 Destination Groups................................................................................................................... 38 Blacklists................................................................................................................................... 38 Comment les construire ?..........................................................................................................39 Configurer les "Destination Groups"............................................................................................. 39 Construire les bases de donnes................................................................................................41 Modifier ces listes..................................................................................................................... 45 Crer de nouvelles listes partir de rien................................................................................... 45 Les Blacklists.................................................................................................................................46 Pratiquement............................................................................................................................. 46 Finalement ?...................................................................................................................................46 A propos du module webmin pour squidGuard........................................................................ 47

Page 2 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

FonctionnementObjectifInstaller un systme de proxy cache, principalement pour HTTP (ventuellement aussi pour FTP, dans certains cas). Ce proxy cache propose deux fonctions principales :

l'optimisation de la bande passante sur le lien Internet, lorsque de nombreux clients sont connects et qu'ils visitent plus ou moins les mmes sites ( la condition, bien sr, que ces sites ne soient pas trop dynamiques, ASP, JSP, PHP... le contrle et le filtrage de l'accs la toile, en se servant des URI et, ventuellement, des noms d'utilisateurs, si l'on fait de l'authentification de ces derniers, autant de choses qu'il est difficile, voire impossible de faire avec du filtrage de paquets.

Tout responsable d'un rseau local l'usage de mineurs et connect l'Internet se doit de mettre en place un tel systme de filtrage de manire viter, autant que possible, l'accs des sites que la morale rprouve. Pas besoin de faire un dessin, n'est-ce pas ?

Prsentation gnraleSquid, principal composant de ce systme, assure les fonctions de :

cache, pour optimiser la bande passante, authentification des utilisateurs, nous en verrons une simpliste, filtrage d'accs "basique", mais dj intressant. de groupes d'utilisateurs, dfinis de diverses manires. Ici, nous nous baserons sur des IPs ou des groupes d'IPs, mais il est possible d'utiliser l'authentification des utilisateurs mise en place sur Squid, de listes de domaines et d'URI qui serviront dfinir soit des cibles autorises, soit des cibles interdites, de listes de domaines et d'URI qui ne serviront qu' interdire l'accs aux cibles spcifies, de plages horaires pendant lesquelles l'accs sera autoris ou interdit.

SquidGuard propose un filtrage puissant d'accs au web, en fonction :

Et bien d'autres choses encore, que nous ne verrons pas ici.

Principe de fonctionnementSquid tourne en tche de fond (daemon). Il coute sur un port spcifique (3128 par dfaut, mais il est possible d'utiliser 8080, plus habituel pour un proxy). L'ventuel module d'authentification vient se greffer dessus, ce qui fait apparatre un certain nombre de processus fils (5 par dfaut). SquidGuard vient galement se greffer dessus et apparat lui aussi sous la forme de processus fils (galement 5 par dfaut). Page 3 sur 47 Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

Au total, une fois Squid configur, il n'y aura qu' dmarrer Squid et les processus d'authentification et de filtrage avanc dmarreront avec. Pour aller trs vite, SquidGuard utilise le format de bases de donnes Berkeley pour travailler. Pour dfinir ces bases, l'administrateur a recours des fichiers au format texte qui seront pr compils en base de donnes ou compils la vole, suivant la faon de travailler. Nous verrons que les "destination groups" constituent des bases pr compiles, alors que les "blacklists" sont compiles la vole et rsident uniquement en mmoire. Ce dtail a son importance, toute modification de l'un ou de l'autre ayant un impact diffrent sur le fonctionnement de SquidGuard, pendant la recompilation des informations.

Administration du toutIl existe deux modules Webmin suffisamment bien faits pour que l'on puisse ne pas hsiter s'en servir, mme si l'ergonomie gnrale oblige pas mal jongler entre les modules Squid et SquidGuard. Il faut faire trs attention ce que l'on fait et vrifier chaque fois que ncessaire que le but recherch est atteint. SquidGuard rserve pas mal de surprises ce propos. Bien entendu, il reste tout fait possible de n'utiliser qu'un diteur de texte, et a reste probablement la solution la meilleure, si l'on a une configuration trs complexe. Dans le cas de SquidGuard principalement, une gestion fine des bases de donnes pour les groupes de destination et les blacklists ne pourra se faire qu' partir de la ligne de commande. Nous ne ferons qu'effleurer le problme, si vous en arrivez l, c'est que vous tes dj assez pointus sur le sujet pour pouvoir vous dbrouiller tout seul avec la documentation.

Page 4 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

SquidConfiguration matrielle utiliseUn PII 300 MHz, 64 Mo de RAM et 2 G0 de disque dur devraient suffire pour un rseau d'une centaine de postes. La machine de test s'appelle "eros". Elle est indpendante du routeur NAT. Rien n'empche cependant d'installer Squid/SquidGuard sur la mme machine que le routeur NAT, a simplifiera mme les choses si l'on souhaite rendre le proxy transparent.

InstallationNous supposons que vous tes sorti victorieux d'une installation de la "Woody", que votre configuration rseau fonctionne, que vous avez install (et mis jour) Webmin et qu'il fonctionne aussi. Nous allons beaucoup l'utiliser, bien que ce ne soit pas absolument indispensable. Une fois que l'on a compris comment se dpatouiller avec le fameux "dselect", autant l'utiliser. Sinon, apt-get install fait aussi l'affaire. Debian Woody stable installe squid 2.4. C'est important, parce que beaucoup de choses peuvent changer dans le fichier de configuration, suivant la version utilise. Mandrake 9.1 fournit la version 2.5 et les "tags" du fichier de configuration ne sont pas tous identiques entre les deux versions.eros:/etc# apt-get install squid Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: squid 0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 684kB of archives. After unpacking 2334kB will be used. Get:1 ftp://ftp.fr.debian.org stable/main squid 2.4.6-2 [684kB] Fetched 684kB in 16s (40.6kB/s) Preconfiguring packages ... Selecting previously deselected package squid. (Reading database ... 47133 files and directories currently installed.) Unpacking squid (from .../squid_2.4.6-2_i386.deb) ... Setting up squid (2.4.6-2) ... Creating squid spool directory structure 2003/05/23 16:26:05| Creating Swap Directories Starting proxy server: squid. eros:/etc#

Comme vous le voyez, on l'installe et il dmarre tout seul.eros:/etc# ps aux | grep [s]quid root 571 0.0 1.8 3824 1124 ? S 16:26 0:00 /usr/sbin/squid -D -sYC proxy 574 0.8 8.2 8468 5068 ? S 16:26 0:03 (squid) -D -sYC eros:/etc#

Effectivement, il tourne. N'y aurait-il rien de plus faire ? Vrifions tout de suite, squid utilise par dfaut le port 3128. Configurons donc un navigateur du LAN pour l'utiliser et essayons un URI au hasard...

Page 5 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

C'tait trop beau... Il faudra dj mettre les mains dans le cambouis. Notez qu'il vaut mieux une configuration qui interdise trop qu'une configuration qui, par dfaut, autorise trop, comme font certains...

Configuration minimaleComme Webmin est bien install, mis jour et tout, et que le module pour squid est bien prsent, utilisons-le :

Page 6 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

Les ACL (Access Control Lists) permettent de dfinir des conditions sur les IPs, les ports, le contenu de certains textes, et j'en passe. Si vous voulez tout savoir sur les diverses ACL de Squid, ne comptez pas sur moi, comptez plutt sur la documentation officielle. Les restrictions indiquent quoi faire lorsque ces conditions sont vrifies. On autorise ou on interdit en fonction d'une ACL ou d'un groupe d'ACLs, le sens de "restriction" est donc prendre avec un peu de recul, une restriction pouvant tre une autorisation. La premire "restriction" vrifie est la bonne, d'o l'importance de l'ordre dans lequel elles sont places. Sans faire une analyse dtaille, nous voyons que dans la configuration par dfaut, seul "localhost" peut utiliser le proxy (Allow localhost). Il nous faut donc faire intervenir la notion de rseau local. Page 7 sur 47 Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

Crer une ACL reprsentant le LANNous slectionnons dans la liste droulante "Client Address" et cliquons sur "Create New ACL" : Nous pouvons dfinir une tendue, ou toute une classe, comme c'est le cas dans l'exemple. Notre LAN fonctionne avec la classe 192.168.0.0. Save...

Une nouvelle ligne est apparue dans la liste des ACLs, appele"Localnet"

Nous allons maintenant sur "Add proxy restriction, choisissons "Allow" et slectionnons "LocalNet" dans la liste "Match ACLs". Save...

Enfin, au moyen des flches de la colonne de droite, nous montons cette nouvelle restriction juste au dessus de "Deny all" N'oublions pas de faire un "Apply changes", et refaisons un essai :

Page 8 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

a marche ! Bien entendu, l'ide de faire plutt "Allow all" est une mauvaise ide. Si votre proxy a un pied dans l'Internet (s'il est install sur la passerelle), vous risquez un proxy ouvert, avec tous les usages pervertis que l'on peut en faire... A ce niveau, nous avons une premire configuration qui fonctionne. Le fichier squid.conf a cette allure :hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 10000 acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 acl Safe_ports port 70 acl Safe_ports port 210 acl Safe_ports port 1025-65535 acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591

Page 9 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTPacl Safe_ports port 777 acl Safe_ports port 901 acl purge method PURGE acl CONNECT method CONNECT acl LocalNet src 192.168.0.0/255.255.255.0 http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow LocalNet http_access deny all icp_access allow all log_fqdn on

Christian CALECA http://christian.caleca.free.fr/squid/

Page 10 sur 47

Ralis partir des pages du site, du 6 mars 2005 par Laurent BAYSSE

Le protocole HTTP

Christian CALECA http://christian.caleca.free.fr/squid/

+ sur squidAffiner la configurationIl y a deux points importants, qu'il peut tre utile d'tudier, et qui correspondent aux deux fonctions principales d'un proxy.

Identifier les utilisateursAttention : Vous aurez des ennuis pour authentifier vos utilisateurs, si vous comptez rendre votre proxy transparent. Les deux fonctionnalits sont incompatibles. Dans la configuration mise en oeuvre ici, nous ne faisons pas de contrle sur les utilisateurs, seulement sur les IPs des machines clientes. Vous pouvez souhaiter identifier vos utilisateurs lorsqu'ils vont surfer sur le Net. Dans ce cas, il vous faudra mettre en place un systme d'authentification. Il y a plusieurs mthodes disponibles pour authentifier les utilisateurs du proxy. Elles font toutes appel un programme extrieur, diffrent suivant le moyen choisi. Debian propose les modules suivants : ncsa_auth, smb_auth, getpwnam_auth, ldap_auth, pam_auth Les plus intressants sont probablement :

ldap_auth, qui permet d'authentifier les utilisateurs depuis un annuaire LDAP (si vous matrisez dj LDAP), smb_auth, qui permet d'utiliser un contrleur de domaine Windows NT, ncsa_auth, qui utilise un fichier d'utilisateurs local.

Nous allons mettre en oeuvre ncsa_auth, c'est le plus simple, ce ne sera peut-tre pas le plus utile, surtout si le rseau local est un domaine Microsoft Windows.

Construire un fichier d'utilisateursNous allons crer un fichier /etc/squid/users# touch /etc/squid/users

Nous le remplissons ensuite avec la commande htpasswd, normalement fournie dans le paquet apache-common (normalement vous l'avez puisque Debian utilise par dfaut Apache pour faire tourner Webmin) :# htpasswd -b /etc/squid/users