CONFIGURATION D’UN
SERVEUR PROXY AVEC SQUID
Squid est un logiciel proxy pour les protocoles http, gopher et ftp.
Il permet facilement de construire un pare-feu.
En dehors de son utilisation à des fins de sécurité, il peut être utilisé comme cache pour améliorer les performances d’accès au web.
Sous fedora core3, le fichier de configuration de Squid est le suivant :
/etc/squid/squid.conf
Les principaux paramètres de configuration sont les suivantes :
http_port : le numéro de port du Proxy, par défaut 3128. Il doit être spécifié dans la configuration du navigateur.
cache_mem : ce n’est pas directement la taille du cache de la mémoire vive, mais un paramètre utilisé lors de sa réservation. Il est conseiller de lui donner comme valeur un tier de la mémoire. Par défaut sa valeur est de
8 MB.
cache_dir : cette balise configure le cache disque. Le premier paramètre indique le type de système de fichier (normalement UFS) le deuxième spécifie le répertoire abritant le cache, le troisième, la taille du cache. Les deux premiers paramètres précisent le nombre de sous répertoires dans les deux premiers niveaux de l’arborescence. Le répertoire du cache disque est par défaut /var/spool/squid et sa taille par défaut de 100 M0.
Maximun_object _size : un objet dont la taille est supérieure à cette limite n’est pas conservé dans le cache. Par défaut, le paramètre a pour valeur 4 Mo.
cache_access_log : c’est le journal qui enregistre les accès des clients. Par défaut c’est le fichier /var/log/squid/access.log
cache_log : c’est le journal qui enregistre le comportement du cache du cache.
Cache_store_log : c’est le journal qui enregistre les mouvements du cache entre la mémoire vive et le disque. Sauf cas particulier, on doit la désactiver en lui donnant la valeur none.
http_access : cette balise permet d’autoriser ou d’interdir l’accès web aux ACL données en paramètres.
Cache_mgr : l’adresse e-mail du responsable du Proxy par défaut webmaster.
Visible_hostname : cette balise permet de définir le nom de machine qui sera apparent sur les pages d'erreurs de Squid.
1 CONFIGURATION DES ACL POUR NOTRE SERVEUR PROXY
L’acl (access control list) est une balise qui permet de créer une liste de contrôle d’accès. Cette liste intervient dans les autorisations ou les interdictions d’accès aux protocoles gérées par le proxy.
Une règle de liste d’accès comporte les mots allow ou deny ce qui autorise ou refuse un service pour un élément acl particulier ou pour un groupe d’élément.
2-a CARACTERISTIQUE D’UN ACL
les règles sont vérifiées dans l’ordre ou elles ont été écrites et se terminent dés qu’une correspondance a été établie.
Un acl peut comporter plusieurs règles.
Si aucune correspondance n’est trouvé, l’action par défaut est l’inverse de la dernière règle de la liste il est donc préférable d’être explicite sur l’action par défaut.
Tous les éléments d’une même entrée sont associés par un et logique.
Des règles multiples de http_access sont associées par des ou logique alors que les règles d’une même entrée sont associée par des et logique.
Les règles sont lues de haut en bas
CONFIGURATION DE L’ACL SUR LES PLAGES HORAIRES
la syntaxe de l’acl sur les plages horaires est la suivante :
acl nom de l’acl time MTWHF plage horaire
les jours de la semaine sont représentés par les symboles suivants :
S = Sunday(dimanche)
M = Monday (lundi)
T = Tuesday (mardi)
W = Wednesday (mercredi)
H = Thursdays (jeudi)
F = Friday (vendredi)
A = sAturday (samedi)
Exemple :
Ecrivez un acl qui interdit les accès de 8h à 12h du lundi au vendredi
acl temps time MTWHF 08 :00-12 :00
http_access deny temps
CONFIGURATION DE L’ACL SUR LES MACHINES DE NOTRE RESEAU LOCAL
La syntaxe de l’acl est la suivante:
acl nom de l’acl src adresse du réseau/masque de sous-réseau
Exemple :
Autoriser l’accès aux machines du sous-réseau 192.168.0.0
acl reseau src 192.168.0.0/255.255.255.0
http_access allow reseau
Configuration des acl sur certaines machines de notre réseau local
Dans ce cas la syntaxe est la suivante :
acl nom de l’acl src adresse ip du ou des machines
nb : cette fois on utilise pas le masque de sous-réseau.
Exemple
Ecrivez un acl qui autorise l’accès aux machines ayant les adresses ip suivantes 192.168.0.12 192.168.0.20 192.168.0.30.
acl mini reseau src 192.168.0.12 192.168.0.20 192.168.0.30
http_access allow mini reseau
CONFIGURATION DES ACL SUR LES URL
Dans ce cas, il y a deux méthodes :
Première méthode :
Nous pouvons bloquer l’accès à partir d’un mot ou d’un groupe de mots.
Dans ce cas précis la syntaxe est la suivante:
acl nom de l’acl url_regex mot ou liste de mot à interdir
exemple
Écrivez un acl qui interdit l’accès aux sites ayant les mots suivants dans leur url porn, nude
acl interdit url_regex porn nude
http-access deny interdit
Deuxième méthode
Cette méthode plus pratique permet de lister dans un fichier la liste des mots ou des sites à interdir et le mécanisme acl viendra lire les informations nécessaires aux blocages voulus.
La syntaxe de l’acl est la suivante :
acl nom de l’acl url_regex "chemin d’accès au fichier"
Écrivez un acl qui interdit l’accès aux mots et aux sites suivants :
porn, nude, xx, www.tchatche.fr, www.rencontre.fr.
Dans ce cas là nous devons d’abord créer le fichier qui va réceptionner les mots et les url avec la commande touch.
#touch /home/site
Le fichier étant créé nous allons l’éditer avec l’éditeur vi et y écrire les urls et les mots définis:
#vi /home/site
porn
nude
xx
Tchatche.fr
Rencontre.fr
Nous sauvegardons tout ce que nous avons écrit dans le fichier /home/site et nous le quittons pour définir par la suite notre acl :
acl banned_sites url_regex "/home/site"
http_access deny banned_sites
Apres avoir configuré notre serveur proxy, nous devons créer les fichiers log qui sont des fichiers journaux ainsi que le fichier squid.pid.
Ces fichiers initialement créés appartiennent à l’utilisateur root et au groupe root nous allons par la suite les faire appartenir à l’utilisateur squid et au groupe squid à l’aide de la commande chown.
Creation des fichiers
Les fichiers suivants sont à créer :
/var/log/squid/access.log
C’est le fichier journal qui enregistre les accès des clients. Par défaut sa valeur est /var/log/squid/access.log
/var/log/squid/cache.log
C’est le fichier journal qui enregistre le comportement du cache.
/var/run/squid.pid
C’est le pid_filename Squid enregistrera dans ce fichier le PID de son processus.
Créons donc ses fichiers avec la commande touch :
#touch /var/log/squid/access.log
#touch /var/log/squid/cache.log
#touch /var/run/squid.pid
Changement de propriétaire et de groupe aux fichiers créés
Comme nous l’avons dit précédemment, la commande chown permet de faire ce changement comme suit :
#chown squid.squid /var/log/squid/access.log
#chown squid.squid /var/log/squid/cache.log
#chown squid.squid /var/run/squid.pid
#chown squid.squid /var/spool/squid
Nb: nous faisons appartenir également le répertoire contenant le cache disque(/var/spool/squid) au groupe squid et à l’utilisateur squid.
Il est à noter que ce répertoire est créé au cour de l’installation de notre os nous n’avons donc plus à le créer.
3 EXEMPLE DE CONFIGURATION D’UN SERVEUR PROXY
Nous allons configurer notre serveur Proxy avec un cache disque de 10GO.
La mémoire ram de notre serveur est de 512 mo de ram.
Les règles de sécurité suivantes seront paramétrées avec les ACL.
L’accès au Proxy est limité au sous- réseau 192.168.0.1.
L’accès à Internet ne pourra se faire qu’entre 12h et 14h30 du lundi au vendredi.
Les sites et les mots décrits précédemment (porn, nude, xx, www.tchatche.fr, www.rencontre.fr) se verront interdit d’accès également.
Nous allons donc éditer le fichier de configuration de squid /etc/squid/squid.conf et le modifier de la manière suivante :
# cache_mem 8 MB
cache_mem 171 MB
# TAG: cache_swap_low (percent, 0-100)
# TAG: cache_swap_high (percent, 0-100)
#
# The low- and high-water marks for cache
object replacement.
# Replacement begins when the swap (disk)
usage is above the
# low-water mark and attempts to maintain
utilization near the
#http_port 3128
http_port 3128
#Default:
# cache_dir ufs /var/spool/squid 100 16 256
cache_dir ufs /var/spool/squid 10000 16 256
# TAG: cache_access_log
# Logs the client request activity. Contains an entry for
# every HTTP and ICP queries received. To
disable, enter # TAG: cache_log
# Cache logging file. This is where general
information about
# your cache's behavior goes. You can
increase the amount of data
# logged to this file with the
"debug_options" tag below.
#
#
#Default:
# cache_store_log
/var/log/squid/store.log
cache_store_log
/var/log/squid/store.log none
# ACCESS CONTROLS
#
-----------------------------------------------------------------------------
# TAG: acl
# Defining an Access List
#Recommended
minimum configuration:
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 to_localhost
dst 127.0.0.0/8
acl
banned_sites url_regex "/home/site"
acl
allowed_clients src 192.168.0.1/255.255.255.0
acl regular_days time MTWHF 12:00-14:30
acl SSL_ports port 443 563
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 CONNECT method
CONNECT
#Default:
http_access
deny banned_sites
http_access allow allowed_clients
http_access allow regular_days
# http_access deny
all
http_access
allow all
#
# ADMINISTRATIVE
PARAMETERS
#
-----------------------------------------------------------------------------
# TAG: cache_mgr
# Email-address of local cache manager who
will receive
# mail if the cache dies. The default is "root".
#cache_mgr root
#
#Default:
#
cache_mgr root
cache_mgr admin@cepi.ci
# TAG: visible_hostname
# If you want to present a special hostname
in error messages, etc,
# define this. Otherwise, the return value of gethostname()
# will be used. If you have multiple caches
in a cluster and
# get errors about IP-forwarding you must
set them to have individual
# names with this setting.
#
#Default:
# none
visible_hostname proxycepi
# TAG: unique_hostname
# If you want to have multiple machines with
the same
# 'visible_hostname' you must give each
machine a different
# 'unique_hostname' so forwarding loops can
be detected.
#
#Default:
# none
# TAG: hostname_aliases
# A list of other DNS names your cache has.
#Default:
# none
# OPTIONS FOR THE
CACHE REGISTRATION SERVICE
#logfile_rotate 0
#Default:
# logfile_rotate 0
logfile_rotate
5
Démarrage du service squid
La configuration étant terminée, il nous revient maintenant de démarrer le service squid avec la commande suivante :
#/etc/init.d/squid start
Redémarrage du service squid
le redémarrage du service squid se fait avec la commande suivante :
#/etc/init.d/squid restart
Arrêt du service squid
L’arrêt du service squid se fait avec la commande suivante :
#/etc/init.d/squid stop
Rechargement du fichier de configuration
Le rechargement du fichier de configuration permet au système de prendre en compte la (les) modification(s) apportée(s) au fichier de configuration. La commande suivante permet de recharger le fichier de configuration de squid.
#/etc/init.d/squid/reload
Configuration des postes clients Windows pour l’utilisation du proxy.
En ce qui concerne les postes clients Windows nous devons utiliser comme passerelle l’adresse ip de notre serveur proxy et par la suite nous devons configurer notre navigateur.
Configuration du navigateur internet explorer
Pour la configuration d’internet explorer, les différentes étapes sont les suivantes :
Menu [Outils]
Menu [Options internet]
Onglet [Connexions]
Bouton [Paramètres réseau]
Dans la zone de dialogue 'Serveur Proxy' :
Cochée la case 'utiliser un serveur de proxy’.
Adresse : mentionner l’adresse ip du serveur proxy
Port mentionner le numéro de port mentionné dans le fichier de configuration 3128 ou 8080
Cocher la case 'ne pas utiliser de serveur proxy pour les adresses locales'
4- L’AUTHENTIFICATION NCSA
Pour authentifier les utilisateurs du cache, La
méthode la plus courante consiste à utiliser l'authentification NCSA (qui fait
l'objet de la RFC 931).
Ce module d'identification est fourni avec Squid. Si nous plaçons nos sources
dans le répertoire /usr/lib/squid-2.3STABLE3/auth_modules/NCSA.
Pour compiler ce module et l’installer nous suivrons les étapes suivantes :
#cd /usr/lib/squid-2.3STABLE3/auth_modules/NCSA
#make
#make install
Le fichier binaire ncsa_auth devrait maintenant se trouver dans /usr/lib/squid/ncsa_auth
Pour l'utiliser, il suffit d'éditer le fichier squid.conf et de modifier l'option suivante :
auth_param basic program /usr/libexec/ncsa_auth /etc/squid/users
authentication_children 5 (éventuellement le paramètre qui spécifie le nombre de processus lancés en parallèle - 5 par défaut)
Pour compiler ce module et l’installer nous suivrons les étapes suivantes :
#cd /usr/lib/squid-2.3STABLE3/auth_modules/NCSA
#make
#make install
Le fichier binaire ncsa_auth devrait maintenant se trouver dans /usr/lib/squid/ncsa_auth
Pour l'utiliser, il suffit d'éditer le fichier squid.conf et de modifier l'option suivante :
auth_param basic program /usr/libexec/ncsa_auth /etc/squid/users
authentication_children 5 (éventuellement le paramètre qui spécifie le nombre de processus lancés en parallèle - 5 par défaut)
Comme suit :
auth_param basic program
/usr/lib/squid/ncsa_auth /etc/squid/users
NB: /etc/squid/users est le fichier qui contient tous les utilisateurs et leur mot de passe
NB: /etc/squid/users est le fichier qui contient tous les utilisateurs et leur mot de passe
Il faut maintenant générer un fichier pour les mots
de passe , si /etc/passwd peut fonctionner, nous vous
déconseillons de l'utiliser pour des raisons évidentes de sécurité de votre
système. Il vaut mieux tenir une autre liste contenant les noms et mot de passe
des personnes autorisées à utiliser le WEB. Surtout si ces personnes n'ont pas
de comptes sur nos machines Linux. Comme nous pouvons le voir, nous choisissons
de placer ce fichier passwd dans /etc/squid . Pour le générer on utilise la
commande htpasswd
#htpasswd –bc /etc/squid/users nom motdepasse (l'option c sert à créer un nouveau fichier en principe à la première utilisation et l'option b à passer le mot de passe en ligne de commande donc sans prompt).
#htpasswd -b passwd dupond secret (ne plus passer l'option c à l'avenir sous peine de perdre les comptes déjà créés !!!)
#htpasswd –bc /etc/squid/users nom motdepasse (l'option c sert à créer un nouveau fichier en principe à la première utilisation et l'option b à passer le mot de passe en ligne de commande donc sans prompt).
#htpasswd -b passwd dupond secret (ne plus passer l'option c à l'avenir sous peine de perdre les comptes déjà créés !!!)
Permet d’attribuer un mot de passe à dupond.
Enfin nous devons créer un acl et définir une règle
de liste d’accès
Création
de l’acl
Acl authent proxy_auth REQUIRED
Création
de la règle de liste d’accès
http_access allow authent
http_access deny all
Il suffit de redémarrer Squid si tout c'est bien passé, et que nous lançons notre navigateur, une fenêtre apparaît et nous demande de nous identifier. Faites quelques essais pour constater l'efficacité.
Une fois authentifié, nous pouvons ouvrir autant de
fenêtres que nous souhaitons. Si nous fermons toutes les fenêtres de notre
navigateur, il faudrait que nous nous authentifiions de nouveau au prochain
lancement.
Si nous observons le fichier log des accès /var/log/squid/access.log, nous constaterons qu'une information supplémentaire apparaît à chaque requête, le nom de la personne qui l'a effectué...
IMPORTANT : L'authentification ne fonctionne pas correctement si nous détournez de façon transparente les clients vers votre cache (voir utilisation transparente)... Une authentification délivrée par un serveur quelconque sur le web entre alors en conflit avec celle de Squid.
Si nous observons le fichier log des accès /var/log/squid/access.log, nous constaterons qu'une information supplémentaire apparaît à chaque requête, le nom de la personne qui l'a effectué...
IMPORTANT : L'authentification ne fonctionne pas correctement si nous détournez de façon transparente les clients vers votre cache (voir utilisation transparente)... Une authentification délivrée par un serveur quelconque sur le web entre alors en conflit avec celle de Squid.
Il existe d'autres moyens d'identification proposés
par Squid : SMB (Utilisateur Samba ou Domaine NT), LDAP, etc...
Aucun commentaire:
Enregistrer un commentaire