Squid

De NCad Wiki
Aller à la navigation Aller à la recherche
LOGO Squid.gif

Cette article semble obsolète, veuillez vous reporter à la page Squid3.


Présentation

Définition

Squid est un serveur mandataire fonctionnant sous le protocol HTTP/1.0 et HTTP/1.1. Squid offre des fonctionnalités intéressantes comme un système de cache ou d'authentification mais également une modulation avec d'autres applications qui lui permettront de se doté d'autres fonctionnalités ou d'enrichir celles qui sont déjà présentes.

Histoire

Squid est basé sur le deamon Harvest, un système de cache développé au début des années 1990. Squid a été subventionné par la société NFS (NCR-9796082), effectuant des recherches sur les systèmes de mise en mémoire cache. Le financement de IRcache ayant cessé quelques années plus tard, Squid a continué a être développé par des développeurs bénévoles et aidé également par des dons.

Aujourd'hui Squid est développé par une poingné de contributeurs passionnées qui apporte sans cesse des innovations au script de base. Squid s'expand également dans l'architecture des réseau informatique et a ainsi conquis les réseau professionnels d'entreprises l'utilisant à des fin de proxy pare-feu, mais également les établissement scolaire pour filtrer le contenu lors de la navigation des élèves.

Les Précurseurs

Parmis les précurseurs de Squid on peut citer :

  • Duane Wessels, également gérant d'une société The Measurement Factory, qui coordonne le projet et fournis l'hébergement et les services nécessaires pour permettre à Squid d'être présent sur l'Internet.
  • Henrik Nordstrà¶m, qui a organisé et gérer le support du développement de Squid2, il aide également les utilisateurs du script.
  • Alex Rousskov, contributeur du projet depuis 1997, il se consacre au développement des futures versions.
  • Adrian Chadd, développeur fortement impliqué dans le développement de Squid, il se consacre aux performances de Squid, consommation en ressource processeur et stockage mais également dans son administration. Il administre également le site web consacré au projet http://www.squid-cache.org.
  • Robert Collins, se consacre au développement de Squid3 assigné à la création d'une interface client. Il se consacre également au développement de programmes sous C++.
  • Guido Serassio, est assigné au support de Squid et de ses fonctionnalités.
  • Steven Wilton, se consacre à l'étude de Squid sous un fonctionnement de proxy transparent utilisant TProxy sous Linux.
  • Chemolli Francesco, met à jour le wiki de la communauté http://wiki.squid-cache.org mais participe également à la correction des bogues du script.

Installation

Prérequis

  • Configuration minimum
    • Processeur : Pentium 133
    • RAM : 128 MB
    • OS : FreeBSD

Installer Squid

L'installation de Squid s'effectue en deux étapes, tous d'abord installez le depuis le gestionnaire de paquet synaptic ou en ouvrant un terminal de commande et exécutez la requête suivante :

sudo apt-get install squid

Squid s'installe automatiquement, vous trouverez deux arborescence de Squid dans votre système, l'une placé dans le répertoire /etc/squid/ et une autre dans le dossier /usr/lib/squid/. Dans le cadre de l'installation nous nous préoccuperons uniquement du premier dossier contenant le fichier de configuration squid.conf.

Renseignement du fichier de configuration

Comme indiqué à l'étape précédente ouvrez le fichier de configuration situé dans le dossier /etc/squid/squid.conf.

Tous d'abord il nous faut indiquer à Squid le nom de la machine où il est installé - la valeur peut être le nom comme l'adresse IP de la machine sur votre réseau. Par exemple :

visible_hostname 192.168.1.100

Vérifiez la ligne http_port - qu'elle a pour valeur 3128 :

http_port 3128

Ensuite nous allons spécifier les paramètres de notre réseau à Squid, pour cela nous allons rajouter une acl. Recherchez dans la documentation les lignes ou sont listées les acl puis ajoutez :

acl Mon_Reseau 192.168.1.0/255.255.255.0

Maintenant nous allons informer Squid qu'il faut autoriser toutes connections venant de notre réseau dont les paramètres ont été renseignés plus haut, pour cela recherchez les directives http_access puis ajoutez cette ligne :

http_access allow Mon_Reseau

Une fois terminé, pour prendre la nouvelle configuration en considération redémarrez Squid en exécutant la commande :

sudo /etc/init.d/squid restart

Se connecter à Squid

Squid étant installé, pour s'y connecté à partir d'un navigateur Internet il faut éditer les paramètres de configuration proxy pour le navigateur web en question et y renseigné dans le cas de cette configuration :

  • Proxy HTTP : IP de la machine où est installée Squid.
  • Port : 3128 (port TCP Squid par défaut).

Et cocher la case : Utiliser ce serveur proxy pour tous les protocoles.

Cette configuration est valable pour Mozilla Firefox mais également pour tout autre navigateurs web supportant la connexion à l'Internet derrière un proxy.

Configurer Squid

Squid étant un serveur proxy offrant des fonctions de cache fournit également une protection similaire à un pare-feu. Nous allons voir ici comment exploiter certaines de ces fonctionnalités.

Blocage de ports http

Vous pouvez restreindre l'usage de certains ports http. Pour cela trouvez dans le fichier de configuration les directives acl Safe_ports. Les ports listés par cette directive sont les ports pour lesquels il y a des autorisations d'accès :

acl Safe_ports port 80                # http
acl Safe_ports port 21                # ftp
acl Safe_ports port 443 563           # https, snews
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 Safe_ports port 631               # cups
acl Safe_ports port 873               # rsync
acl Safe_ports port 901               # SWAT

Pour ajouter de nouvelles autorisations il suffit d'ajouter une ligne du type :

acl Safe_ports port <numéro du port à  autoriser>

Puis ensuite d'enregistrer le fichier et de redémarrer Squid pour prendre en compte les modifications.

Authentifier l'accès au réseau

Vous pouvez configurer Squid pour qu'il requiert un login associé à un mot de passe pour utiliser l'accès à l'Internet et aux services réseau locaux. Pour cela il faut spécifier quelques paramètres dans le fichier de configuration de Squid.

Atuhentification par .htaccess

La méthode d'authentification utilisé sera basé sur un fichier .htaccess. Pour cela vérifier la présence du paquet ncsa_auth sur votre système le cas échéant installez-le :

sudo apt-get install ncsa_auth

Ensuite nous allons créer le fichier .htaccess où nous allons y spécifier pour chaque ligne un utilisateur et son mot de passe. Nous enregistrerons notre fichier dans le dossier /etc/squid/users. Pour cela effectuez la requête suivante :

touch /etc/squid/users

Ici nous avons crée le fichier user, maintenant nous allons y renseigner les utilisateur avec leur mots de passes respectifs. Pour cela effectuez cette requête pour chaque utilisateur dont vous voulez définir des autorisations d'accès :

htpasswd -b /etc/squid/users <nom de l'utilisateur> <mot de passe>

Le fichier /etc/squid/users contiendra alors la liste de vos utilisateurs associé à leur mot de passe hashé en md5.

Une fois cette étape achevé nous allons configurer Squid pour demander l'authentification des utilisateurs. Éditez le fichier de configuration et renseigné les lignes suivantes :

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Mon proxy
auth_param basic credentialsttl 2 hours

Pour forcer l'identification rajoutez l'acl suivantes :

acl Users proxy_auth REQUIRED

Ainsi que la directive http_access suivante :

http_access allow Mon_Reseau Users

Maintenant que le fichier a été correctement paramétré, enregistrez-le puis redémarrez Squid pour prendre en compte la nouvelle configuration.

Authentification par MySQL

Tout d'abord il faut créer une nouvelle base de donnée SQL ainsi qu'un nouvel utilisateur qui détiendra tous les privilèges sur la base nouvellement crée. Dans l'exemple nous utiliserons :

  • squid_db : qui sera le nom de notre base de données mysql
  • squid : qui sera l'utilisateur associé à la base avec tous les privilèges nécessaires.

Dans cette nouvelle base il faut créer une table ou sera stockée l'ensemble des mots de passes associés pour chacun des utilisateurs :

CREATE TABLE `passwd` (
 `user` varchar(32) NOT NULL default ,
 `password` varchar(35) NOT NULL default ,
 `enabled` tinyint(1) NOT NULL default '1',
 `fullname` varchar(60) default NULL,
 `comment` varchar(60) default NULL,
 PRIMARY KEY  (`user`)
);

Une fois la table crée, il faut éditer le fichier de configuration de squid, squid.conf et y ajouter les informations suivantes :

auth_param basic program /usr/local/squid/libexec/squid_db_auth --user someuser --password xxxx --plaintext --persist
auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute
auth_param basic casesensitive off
acl db-auth proxy_auth REQUIRED
http_access allow db-auth
http_access allow localhost
http_access deny all

Une fois l'édition du fichier de configuration terminée, il faut redémarrer Squid pour prendre en compte les nouveaux paramètres :

sudo /etc/init.d/squid restart

Authentification LDAP

Notre base de données ldap est composé de l'arbre suivant :

+ dc=orcade
 |- ou=Users
    |- uid=cacheln
    |- uid=root

Ainsi, les utilisateur Users sont définis à la racine orcade. Le login de chaque utilisateur correspond à l'attribu uid qu'il faudra appeler lors d'une requête d'authentification. Voici les paramètres d'authentification LDAP pour Squid :

auth_param basic program /usr/lib/squid3/squid_ldap_auth -b ou=Users,dc=orcade -f &(uid=%s) ldap://10.0.0.21
auth_param basic children 5
auth_param basic realm Station Oxtrode, Acces Internet...
auth_param basic credentialsttl 2 hours

On peut également affiner les autorisations. Par exemple, n'autoriser uniquement l'identification des utilisateur ayant pour valeur dans le paramètre description internet. Dans ce cas, il faut modifier la ligne :

auth_param basic program /usr/lib/squid3/squid_ldap_auth -b ou=Users,dc=orcade -f &(uid=%s) ldap://10.0.0.21

par :

auth_param basic program /usr/lib/squid3/squid_ldap_auth -b ou=Users,dc=orcade -f &((uid=%s)(description=internet)) ldap://10.0.0.21

Radius

Vérification de la configuration du serveur

Nous utilisons ici le serveur FreeRadius. Dans sa configuration d'origine, le serveur comprend un nas par défaut configuré dans le fichier /etc/freeradius/clients.conf et ayant pour identifiants :

  • login : localhost ou 127.0.0.1
  • mot de passe : testing123

Ainsi qu'un utilisateur configuré dans le fichier /etc/freeradius/users.conf :

  • login : steve
  • mot de passe : testing

Vérifiez que les informations de configuration de l'utilisateur dans le fichier users.conf soient bien décommentées !

Configuration pour Squid

Voici les paramètres d'authentification à ajouter dans le fichier squid.conf :

auth_param basic program /usr/lib/squid3/squid_radius_auth -h 127.0.0.1 -w testing123
auth_param basic children 5
auth_param basic realm Station Oxtrode, Acces Internet...
auth_param basic credentialsttl 2 hours

Cette {{{1}}} est en cours de rédaction.

Proxy transparent / proxy reverse

L'utilisation de Squid comme proxy transparent n'est pas compatible avec les méthodes d'authentifications décrites ci-dessus.

L'utilisation de Squid comme proxy transparent permet d'éviter d'avoir à configurer pour chaque machine l'accès au proxy depuis les paramètres de configuration de chaque navigateurs Internets des postes clients. Cependant la mise en place de ce mode de fonctionnement est diffèrente selon les versions de Squid utilisées.

Depuis une version de Squid inférieure à 2.6

Il faut rejouter rajouter quatre directives au fichier de configuration :

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Depuis une version de Squid supérieure à 2.6

Depuis une version de Squid supérieure à 2.6 - la méthode décrite précédement ne fonctionne pas. Il faut modifier la ligne http_port du fichier de configuration de Squid et la remplacer par :

http_port 3128 transparent
ICON Balance.png

Conformité avec la loi...

Les personnes soumises au filtrage des requêtes via cette méthode ne pouvant se douter qu'elles sont derrières un proxy, vous êtes dans l'obligation de les informer de la présence d'un système de filtrage en amont sur le réseau.

Règle iptable

Si le serveur où est installé Squid fait également office de routeur, il faut rediriger le traffic Internet du port TCP 80 sur le port 3128 de Squid. Pour cela il faut configurer une règle iptable. La règle iptable se construit comme ceci :

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

Quelques Liens