Squid3
Conformité avec la loi... Squid3 est un serveur proxy. A ce titre, il enregistre l'ensemble des requêtes qui lui sont soumises à savoir : l'url demandée - l'IP du poste client et la date. De ce fait, ces informations étant nominative, elles doivent être déclarées auprès de la CNIL. |
Installation
Depuis les dépôts
- Pour installer le serveur proxy Squid3 sans prise en charge du module ssl, il suffit d'installer le paquet squid3.
|
|
|
Si vous souhaitez un support ssl, l'installation par les sources est obligatoire. |
- Installation des paquets pour l'environnement de compilation :
|
|
- Obtention des sources du paquet Squid3 :
|
|
- Installation des dépendances :
|
|
- Pour activer le support SSL, il faut éditer le fichier squid3-3.x.x/debian/rules et y ajouter la ligne suivante :
--enable-ssl \
- Juste après la ligne :
--enable-ecap \
- On lance le script de configuration :
|
|
- Puis on construit les nouveaux packages :
|
|
|
Ce processus peut prendre plusieurs heures. |
- Une fois la compilation terminée les paquets suivants sont présents :
squid3_3.3.8-1ubuntu6.2_i386.deb squid-cgi_3.3.8-1ubuntu6.2_i386.deb squid_3.3.8-1ubuntu6.2_i386.deb squidclient_3.3.8-1ubuntu6.2_i386.deb squid3-common_3.3.8-1ubuntu6.2_all.deb squid-purge_3.3.8-1ubuntu6.2_i386.deb squid3-dbg_3.3.8-1ubuntu6.2_i386.deb
- On procède à l'installation des paquets squid3_3.3.8-1ubuntu6.2_i386.deb et squid3-common_3.3.8-1ubuntu6.2_all.deb.
|
|
Configuration de base
- Le fichier de configuration de squid3 fournit par défaut est un fichier commenté. Ce dernier contient toutes les informations nécessaires à la compréhension de chacun des paramètres.
- Nous effectuons une sauvegarde de ce fichier :
|
|
- Nous créons un nouveau fichier squid.conf vierge.
|
|
Architecture du réseau
- Dans notre topologie, le serveur Squid3 se trouve entre le routeur (Box, Modem Internet) et le LAN. Les paramètres de connexion au serveur proxy Squid3 devront être indiqués dans le navigateur web de chaque PC.
|
Dans ce type de configuration, le serveur Squid3 est utilisé comme passerelle. Pour configurer un équipement Linux comme routeur, veuillez vous reporter à l'article Routeur_Linux. |
Paramètres généraux
- Le fichier de configuration de Squid3 se trouve dans le répertoire /etc/squid3 et se nomme squid.conf.
- On définit en premier lieu le hostname qui correspond au nom de la machine.
visible_hostname prauxyla.net.ncad.fr
- On peut aussi renseigner l'adresse mail du responsable technique et qui sera communiquée dans les pages d'erreurs du proxy.
cache_mgr tech@ncad.fr
Définition des ACLs
Fonctionnement
Les ACcess Lists (Listes d'accès) permettent d'établir des règles d'accès selon plusieurs critères (adresse IP, nom d'hôte, protocole).
- La synthaxe d'une liste d'accès est la suivante :
acl <nom_reseau> src <plage_ip/adresse_ip>
Déclaration d'hôtes
- Nous allons définir une ACL pour identifier les machines du réseau local.
acl reseaulocal src 10.0.0.0/24
Déclaration des protocoles
- Nous allons définir une liste des protocoles TCP/IP qui seront autorisés à traverser le proxy.
acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 20 # ftp-data acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # ssl acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 10000 # Administration acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 5190 # AIM acl Safe_ports port 5222 # jabber acl Safe_ports port 5050 # Yahoo Messenger acl Safe_ports port 1863 # MSN Messenger 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 des raisons de commodité nous nommons de la manière suivante les protocoles listés : Safe_ports pour les protocoles standard non sécurisé - et SSL_ports pour les protocoles sécurisés. |
|
Les règles d'accès seront définies par la suite. |
Règles d'accès
Initialisation du cache
- On procède à la purge du cache de Squid3. Ce dernier sauvegarde toutes les pages consultées par les utilisateurs afin d'éviter d'avoir à les télécharger de nouveau.
acl purge method PURGE
- On autorise l'établissement du tunnel HTTP entre les clients et le proxy.
acl CONNECT method CONNECT
Définition des autorisations
- On autorise uniquement les protocoles qui ont été listés dans l'ACL Safe_ports :
http_access deny !Safe_ports
- On autorise les postes informatiques du réseau local à se connecter au serveur proxy :
http_access allow reseaulocal
- On interdit tous les autres accès non listés :
http_access deny all
- Blocage des requêtes ICP :
icp_access deny all
- Blocage des requêtes HTCP :
htcp_access deny all
Paramètres de fonctionnement du proxy
- Port d'écoute du serveur proxy :
http_port 3128
- Ne pas interroger le cache pour l'accès à des scripts cgi :
hierarchy_stoplist cgi-bin ?
- Chemin vers le fichier des logs d'accès de Squid3 :
access_log /var/log/squid3/access.log squid
- Temps de rafraîchissement du cache et durée de vie du cache :
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 0 20% 4320
- Port d'écoute du serveur proxy pour les requêtes ICP :
icp_port 3130 coredump_dir /var/spool/squid3
Application de la configuration
- Pour appliquer les changements il est nécessaire de rafraîchir la configuration du proxy.
|
|
Fichier squid.conf
- Voici le fichier de configuration ainsi obtenu :
visible_hostname prauxyla.net.ncad.fr cache_mgr tech@ncad.fr acl goulouxiou src 10.0.0.0/24 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 20 # ftp-data acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # ssl acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 10000 # Administration acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 5190 # AIM acl Safe_ports port 5222 # jabber acl Safe_ports port 5050 # Yahoo Messenger acl Safe_ports port 1863 # MSN Messenger 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 acl purge method PURGE acl CONNECT method CONNECT http_access deny !Safe_ports http_access allow reseaulocal http_access deny all icp_access deny all htcp_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? access_log /var/log/squid3/access.log squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 0 20% 4320 icp_port 3130 coredump_dir /var/spool/squid3
Authentification
|
Le module authentification n'est pas compatible avec le mode transparent/intercept de Squid3. |
Radius
|
Pour l'installation et la configuration d'un serveur RADIUS, merci de vous reporter à la page FreeRadius |
- Le programme d'authentification Radius pour Squid3 se trouve dans le répertoire /usr/lib/squid3/. Ce programme attend comme paramètres l'adresse du serveur Radius suivit du mot de passe de connexion pour le client.
auth_param basic program /usr/lib/squid3/basic_radius_auth -h 192.168.1.47 -w 123abc!? auth_param basic children 5 auth_param basic realm Passerelle Internet. auth_param basic credentialsttl 30 minutes
- Pour appliquer les changements il est nécessaire de rafraîchir la configuration du proxy.
|
|
- Il est possible de tester ce programme directement en ligne de commande. Pour cela, il suffit d'ouvrir un terminal depuis le serveur où est installé Squid3 et de saisir la ligne suivante :
|
|
- Une ligne vide apparaît, sur cette ligne il suffit de saisir le login de l'utilisateur et son mot de passe séparé par un espace puis de taper Entrée pour valider.
- Si le CLI retourne OK, l'authentification s'est déroulée avec succès.
Squid3 en mode transparent
|
L'authentification des utilisateurs n'est pas compatible avec le mode transparent de Squid3. |
- En mode transparent, Squid intercepte les requêtes HTTP pour répondre au client à la volé. Dans ce mode de configuration le proxy n'est pas configuré sur le client mais c'est le routeur - ou le pare-feu - qui lui redirige directement les requêtes.
- Pour activer ce fonctionnement, nous allons ajouter un port d'écoute dédié sur le proxy Squid. Ici, il s'agira du port TCP 3129. Dans le fichier de configuration /etc/squid3/squid.conf on va ajouter la ligne suivante après http_port 3128 :
http_port 3129 intercept
Conformité avec la loi... |
- Pour appliquer cette modification, il est nécessaire de redémarrer Squid :
|
|
Règle iptables
- Si le serveur où est installé Squid fait également office de routeur, il faut rediriger le trafic Internet du port TCP 80 sur le port TCP 3128 de Squid. Pour cela il faut configurer une règle iptables. La règle se construit comme ceci :
|
|
- Sauvegarde de la règle pour être appliquée au démarrage du système :
|
|
Squid3 avec filtrage https
|
Cette configuration fonctionne avec Squid3 en mode transparent / intercept. |
Configuration générale
- Création d'un répertoire dans lequel seront générés le certificat encodé et sa clé privée.
|
|
- On génère une clé privée suivit du certificat. A cette étape, le CLI demandera quelques renseignements.
|
|
- Le résultat de la génération produit un fichier myCA.pem. Nous allons extraire - depuis ce fichier - le certificat encodé qui devra être installé sur chaque PC client du réseau.
|
|
- Maintenant, on configure Squid3 pour s'intercaler entre les échanges sur le port 443 (SSL). Pour cela, on va lui indiquer d'écouter sur le port TCP 3127, qui sera dédié exclusivement à ce type d'échange.
https_port 3127 intercept ssl-bump \ cert=/etc/squid3/ssl_cert/myCA.pem \ generate-host-certificates=on dynamic_cert_mem_cache_size=4MB always_direct allow all ssl_bump server-first all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER
- On effectue une redirection transparente des requêtes SSL (port TCP de destination 443) sur le connecteur d'entrée du serveur proxy (port d'écoute TCP 3127).
|
|
- Pour appliquer les changements il est nécessaire de rafraîchir la configuration du proxy.
|
|
Liste d'exclusion
- Il est possible d'ignorer certains sites afin qu'ils ne soient intercepté. Tout d'abord, nous définissons une nouvelle acl qui contiendra le domaine du site à ignorer. Cette acl portera le nom de no_bump_ssl.
acl no_bump_ssl dstdomain .ovh.com
- Cette acl renferme le domaine de destination ovh.com ainsi que tous ses sous-domaines. Pour appliquer cette exclusion, nous ajouterons l'instruction suivante :
ssl_bump none no_ssl_bump
- Juste avant la ligne :
ssl_bump server-first all
- On redémarre Squid3 pour appliquer la configuration.
|
|
Auto-configuration
- L'objectif est d'envoyer la configuration du proxy au client lors de la requête DHCP.
- Dans cet exemple, notre serveur DHCP fait également office de serveur web. C'est sure ce dernier que le script proxy.pac sera hébergé.
Configuration DHCP
- On édite le fichier de configuration /etc/dhcp/dhcpd.conf en y ajoutant au début - avant la déclaration des subnets - les deux lignes suivantes :
option local-pac-server code 252 = text; option local-pac-server "http://10.0.0.1/proxy.pac";
- Redémarrer le serveur pour appliquer la configuration :
|
|
Script PAC
- Le script permet d'indiquer au client quelle est l'adresse du serveur proxy. Il peut également être affiné en retournant une adresse en fonction de diverses paramètres liés au client (en fonction du réseau source, d'une adresse IP source spécifique, d'une url de destination, ...).
- Notre script proxy.pac - qui est hébergé sur le serveur DHCP - est renseigné avec les éléments suivants :
function FindProxyForURL(url, host) { return "PROXY 10.146.3.253:3128"; }