Beruflich Dokumente
Kultur Dokumente
Squid
INTRODUCTION
Premier chapitre : PRESENTATION DE SQUID :
1. Dfinition du Proxy cache .
2. La fonction du Proxy .
3. La fonction de cache .
4. Dfinition de Squid.
7. Filtrage..............................
8. INSTALLATION ET CONFIGURATION.
Conclusion33
INTRODUCTION
Passerelle : 172.16.1.254
Squid : 172.16.1.3
De ce qui concerne le domaine de travail, il est limit au niveau de sous rseau
suptechnology.lan (ENS) et consiste avoir une machine linux sur laquelle
tourne un serveur Squid et des machines Windows cliente.
PRESENTATION DE SQUID :
9. Dfinition du Proxy-cache :
a. La fonction du proxy :
o En mode serveur, une configuration sera requise sur les postes clients
afin d'indiquer l'adresse du serveur et le port sur lequel il doit s'y
connecter.
o En mode transparent, les clients n'auront pas connaissance du proxy
et leurs requtes seront alors formes comme lors d'une
communication sans intermdiaire.
b. La fonction de cache :
2. Dfinition de Squid
Squid est un serveur proxy/cache libre trs connu du monde Open
Source, ce serveur est trs complet et propose une multitude d'options et de
services qui lui ont permis d'tre trs largement adopt par les
professionnels mais aussi dans un grand nombre d'cole ou administrations
travaillant avec systmes de type Unix.
Mis part les fonctions essentielles d'un proxy, Squid propose beaucoup
d'autres services. Ces services ont trs largement contribu faire de Squid
une rfrence en matire de proxy dans le monde des serveurs de type Unix.
Le cache est bien plus qu'un service rendu par Squid vrai dire. Il fait
partie intgrante de Squid et justifie lui seul l'utilisation de Squid pour un
rseau partageant un mme accs Internet.
Le rle d'un serveur cache est de stocker les objets demands par les
utilisateurs pour la premire fois via les protocoles HTTP, FTP. Ainsi, lors
des demandes futures sur un objet prsent en cache, le serveur de cache
n'aura pas besoin d'aller chercher cet objet sur internet et retournera
directement celui qu'il a en mmoire. Les objets stocks peuvent tre de tout
type : texte, image, vido, ...
Squid offre la possibilit de filtrer les requtes des clients. Ainsi, il est
possible de restreindre l'accs aux ressources en fonction de plusieurs
paramtres diffrents. Voici une liste de paramtre pouvant intervenir dans
le rejet d'une requte rpondant l'un des critre :
Le port de destination ;
Squid n'est capable de filtrer que les requtes de ses clients, pas le
contenu de ce qu'il relaye ceux-ci (bien qu'un proxy filtrant le contenu de
page revienne multiplier la charge d'administration par le nombre
d'interdiction malencontreuse).
Il est possible de rcrire les enttes des requtes des clients. Cela a
pour utilit par exemple de rendre les demandes anonymes. Ceci se fait trs
simplement en indiquant dans la configuration de Squid quels sont les
champs HTTP autoris et en prcisant que tous les autres ne le sont pas. Il
est aussi possible de remplacer le contenu d'un champ.
Il s'agit de la version stable mais nous pouvons bien sr nous aventurer sur la
version de dveloppement.
- Dcompresser l'archive :
greg@ades:/var/tmp$ tar zxvf squid-2.5.STABLE2.tar.gz
ou bien :
greg@ades:/var/tmp$ tar jxvf squid-2.5.STABLE2.tar.bz2
Selon notre cas.
-Cration du makefile :
greg@ades:/var/tmp$ cd squid-2.5.STABLE2
greg@ades:/var/tmp/squid-2.5.STABLE2$ ./configure -enable-err-
language=French
- Compilation :
greg@ades:/var/tmp/squid-2.5.STABLE2$ make all
- Installation :
greg@ades:/var/tmp/squid-2.5.STABLE2$ su
Password:
ades:/var/tmp/squid-2.5.STABLE2# make install
Configuration :
3.1. Les fichiers de configuration
Une page s'affiche, compose dune colonne d'aide gauche qui sera
prsente tout au long de l'installation, et de l'installeur au centre. cette
premire page nous renseigne sur lendroit o se trouve une copie du
manuel d'installation, lorsquon Clique sur NEXT on choisi aprs la
Langue qui nous convient (Franais), et on clique de nouveau sur NEXT.
Il nous propose le clavier :
french
french Canadian
french latin 0
bureau personnel
poste de travail
serveur
personnalise
Dans notre cas on va choisir une installation de type serveur car elle est
plus approprie si on veut que notre systme fonctionne comme un serveur
bas sur Linux.
lv
moyen
pas de pare-feux
et ventuellement de personnaliser ces rglages en dfinissant un
priphrique sr, et d'autoriser diffrents services en entre, et de
slectionner les paquetages dont on a besoin :
www
ftp
ssh
dhcp
telnet
autres ports
Un dernier cran nous a signal que c'est termin, on a cliqus sur suivant.
Le serveur graphique dmarre, Nous avons l'invit pour nous logguer :
identifiant
password
3.2. Cration du user squid
Pour des raisons de scurit, il faut viter de lancer squid en root. Nous
allons donc crer un user squid ainsi qu'un groupe squid.
Le dmon sera lanc par cet utilisateur. Nous stipulerons plus tard Squid
que le user squid a le droit de lancer le dmon (tous les users n'ont pas le
droit de lancer Squid).Procdez comme ceci :
Etant donn que Squid va tre lanc par le user squid, il faut mettre jour
les permissions.
Lors de l'installation, squid a automatiquement cr l'arborescence
ncessaire, procder comme suit pour changer les droits (nous devons tre
root) :
http_port 8080
icp_port 0
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 32 MB
cache_dir ufs /usr/local/squid/var/cache 1024 16 256
acl localnet src 172.16.0.0/255.255.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
cache_mgr toto@toto.com
cache_effective_user squid
cache_effective_group squid
log_icp_queries off
cachemgr_passwd my-secret-pass all
buffered_logs on
Explications
Http_port 8080 :
Spcifie le port d'coute de Squid, par dfaut squid coute sur le port 3128
mais beaucoup d'administrateurs prfrent le port 8080.
icp_port 0:
Spcifie le port sur lequel Squid va envoyer et recevoir les requtes ICP
(utile lorsqu'il y a plusieurs serveurs proxy), dans notre cas nous
le dsactivons en mettant le port 0.
cache_mem 32 MB:
Taille en Mega Octets de RAM que peut utiliser Squid pour les transitions
d'objets, Hot Objects ... A savoir que Squid utilise toujours un peu plus de
RAM que ce que nous lui donnons (ajuster en consquence).
2. Lancement de Squid
a. Initialiser le cache
:~# /usr/local/squid/sbin/squid -z
b. Dmarrage de Squid
squid@ades:~$ /usr/local/squid/sbin/squid -D
Pour des raisons de confort nous avons cres un lien symbolique dans
/var/log :
4. Scripts
a. Script de dmarrage
SQUID_HOME=/usr/local/squid
[ -f $SQUID_HOME/bin/squid ] || exit 0
case "$1" in
start)
echo -n "Starting squid: "
base=`basename $1`
# Dj lanc ?
[ "`pidofproc $base`" != "" ] && return
# echo basename of the program.
echo -n "$base "
# Start
daemon $SQUID_HOME/sbin/squid -D &
echo
touch /var/lock/subsys/squid
;;
stop)
echo -n "Waiting for squid shutdown..."
PID=`pidof squid`
TIME=0
kill -TERM $PID
# on laisse squid se terminer avant de rendre la main
while kill -0 $PID 2>/dev/null
do
sleep 2
let TIME=$TIME+2
if [ $TIME = 150 ] ; then
echo "killing squid"
killproc squid
break
fi
done
exit 0
b. Script de vrification
#!/bin/sh
/bin/pidof squid > /dev/null # Attention pidof peut se trouver
dans /sbin
if [ $? = 1 ]
then
/etc/init.d/squid stop
/etc/init.d/squid start
echo "redmarrage de Squid" | mail -s "[Squid] Redmarrage de
Squid " grari@est.ump.ac.ma
fi
4. Optimisation de Squid
a. Scurit
b. Le cache
Un proxy transparent comme son nom l'indique est un proxy qui est
compltement transparent pour le client, cela signifie que le client utilise le
proxy sans le savoir.
Explication : Le client se connecte internet via le port 80, il suffit de dire
Squid d'agir comme un proxy transparent et de dfinir une rgle iptables
permettant de rediriger toutes les connections destination du port 80 vers le
port de notre proxy (8080). A savoir que Squid ne gre pas le "Transparent
HTTPS ".
Pratique :
Dans notre squid.conf nous avons ajouter les lignes suivantes :
httpd_accel_host virtual
httdp_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off
Si notre firewall n'est pas sur la mme machine que notre proxy, il suffit de
remplacer "--to-port 8080" par "--to-port ip_proxy:8080".
Il est maintenant inutile de configurer les Navigateurs internet pour qu'ils se
connectent au proxy, les navigateurs se connecteront travers le proxy "sans
le savoir".
Il est possible de restreindre les accs Internet via Squid. Nous avons
interdit l'accs certains sites.
Tout comme dans la configuration initiale de Squid il faut crire des ACL
(Access control list).
Voici comment fonctionnent les ACL :
A savoir que nous devons avoir obligatoirement cette ligne au moins une fois
dans notre fichier squid.conf ( la fin) :
Imaginons que nous voulons interdire l'accs au site Web contenant le mot
"toto", voici comment procder :
acl mot_interdit url_regex toto
http_access deny mot_interdit
Configuration minimale
Comme Webmin est bien install, mis jour et tout, et que le module pour squid est bien
prsent, utilisons-le :
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.
Crer une ACL reprsentant le LAN
Nous 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"
Save...
Enfin, au moyen des flches de la colonne de droite, nous montons cette
nouvelle restriction juste au dessus de "Deny all"
Ca 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
acl 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
Affiner la configuration.
Il y a deux points importants, qu'il peut tre utile d'tudier, et qui correspondent aux deux
fonctions principales d'un proxy.
Le systme rpond par OK ou par ERR suivant que l'authentification russit ou non.
Sortez de la boucle avec un "ctrl-d".
Si a fonctionne comme a, c'est dj bon signe.
Configurer squid pour rclamer l'authentification de vos utilisateurs.
On peut le faire avec Webmin, faisons-le donc.
Pour Authentification program, indiquez le chemin du module ncsa_auth, suivi du chemin
du fichier des utilisateurs, spars par un espace.
Pour Number of authentication programs:
"Defaults to 5 if an authenticator has been enabled."
Lorsqu'un programme d'authentification a t choisi, le nombre d'instances de ce programme
est par dfaut de 5. Si vous avez de nombreux utilisateurs, il sera peut-tre ncessaire
d'augmenter ce nombre.
Time to cache passwords for:
"How long Squid will cache a successful login for before querying the authentication
program again."
Combien de temps Squid va se souvenir d'une authentification russie, avant de demander une
nouvelle authentification.
Time to bind user to an IP address for:
"If the same user tries to login twice from two different IP addresses during this period, he
will benied. This can be used to prevent the sharing of proxy passwords between multiple
users."
Si le mme utilisateur essaye de s'authentifier depuis deux machines diffrentes dans un laps
de temps trop court, il sera refus. Ceci peut tre utilis pour empcher le partage d'un droit
d'accs entre plusieurs utilisateurs.
Cette dernire option est tout fait digne d'intrt...
On "save", on "apply les changes" et on croit que c'est fini, mais non... Sans ACL pour utiliser
l'authentification, squid ne demandera rien vos utilisateurs.
Vrifions tout de mme qu'aprs rechargement de squid le module d'authentification est bien
prsent :
gw2:/usr/lib/squid# ps aux | grep [s]quid
root 1536 0.0 1.1 3824 1124 ? S 14:22 0:00 /usr/sbin/squid -D -sYC
proxy 1538 0.0 7.0 9616 6712 ? S 14:22 0:04 (squid) -D -sYC
Non, il n'y est pas.
Passons donc aux ACLs. On a dj vu comment s'y prendre, nous crons une nouvelle ACL
de type "External auth" :
(save)
Nous plaons une nouvelle ligne dans les restrictions, en interdisant (deny) tous ceux qui ne
satisfont pas (Don't match ACLs) l'ACL Users.
(save)
Enfin, nous remontons cette restriction juste au dessus de allow LocalNet
Application des changements, nous vrifions que maintenant le module d'authentification est
bien charg :
gw2:/usr/lib/squid# ps aux | grep [s]quid
root 1536 0.0 1.1 3824 1124 ? S 14:22 0:00 /usr/sbin/squid -D -sYC
proxy 1538 0.0 7.0 9616 6712 ? S 14:22 0:04 (squid) -D -sYC
proxy 2178 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2179 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2180 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2181 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2182 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
Cette fois-ci, il y est. Ca devrait donc fonctionner :
Et voil. Pour accder au monde extrieur, Squid ncessite maintenant une authentification.
Comme nous l'avons paramtr, cette authentification restera valide 30 minutes (si le
navigateur n'est pas referm entre temps), et pendant ces 30 minutes, plus aucun autre
utilisateur ne pourra utiliser ce login sur toute autre machine de votre LAN.
Si nous allons faire un petit tour dans les dernires lignes de /var/log/squid/access.log, nous
constatons que le nom d'utilisateur figure pour chaque requte :
1053787250.063 7 pchris.maison.ms TCP_HIT/200 892
GET http://www.free.fr/img/picto_assunet.gif chris NONE/
-image/gif
1053787250.067 8 pchris.maison.ms TCP_HIT/200 401
GET http://www.free.fr/im/blank_F5F5F5.gif chris NONE/
-image/gif
1053787266.004 25 pchris.maison.ms TCP_HIT/200 9332
GET http://www.free.fr/promos/Egg-senior-234x75-c.gif
chris NONE/- image/gif
1053787274.083 43 pchris.maison.ms TCP_HIT/200 7789
GET http://www.free.fr/im/banniere-autopromo-edengo.gif
chris NONE/- image/gif
Big Brother se fait de plus en plus prsent...
Votre fichier squid.conf ressemble maintenant ceci :
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
acl 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
acl Users proxy_auth REQUIRED
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 deny !Users
http_access allow LocalNet
http_access deny all
icp_access allow all
log_fqdn on
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/users
authenticate_ttl 30 minute
authenticate_ip_ttl 30 minute
Notez que vous pouvez aussi grer la liste des utilisateurs avec la fonction "Proxy
Authentication" du module Squid de Webmin, sans manipuler htpasswd, condition que :
vous ayez cr le fichier des utilisateurs, mme vide,
vous ayez configur Squid pour utiliser ncsa_auth
A ce moment, l'option "Proxy Authentication" fonctionnera aussi bien que "htpasswd".
Si pour vous l'authentification est une chose primordiale, et que vous disposez dj d'une
source d'authentification sur votre LAN, intressez-vous peut-tre l'existence d'un module
d'authentification qui vous permettrait de n'employer qu'une seule base d'utilisateurs...
J'ai pu effectuer quelques tests avec le module d'authentification qui s'appuie sur SMB
(smb_auth), autrement dit, qui permet d'authentifier les utilisateurs partir d'un contrleur de
domaine Microsoft, a fonctionne, mais SAMBA doit tre install sur le proxy, mme s'il ne
tourne pas. Suivant l'exposition de votre proxy par rapport au lien Internet, a peut prsenter
quelques risques.
Sa mise en place ne pose pas de problmes particuliers, la documentation est suffisamment
claire : http://www.hacom.nl/~richard/software/smb_auth.html
Optimiser le cache.
Un proxy sert a optimiser la bande passante utilise sur le Net, en permettant de garder en
cache les pages les plus souvent visites. Si c'est une de vos principales proccupations, il sera
probablement ncessaire d'agir sur les diverses options du cache. Passez alors du temps lire
la documentation. Vous pourrez agir sur la taille du cache, sa rpartition sur les divers disques
durs...
Pour raliser correctement une telle opration, il vous faudra installer d'abord des outils
d'audit de performance dudit cache. Dtailler ces opration ici nous mnerait trop loin. (Il y a
une doc assez complte avec Squid ;-))
Conclusions
Beaucoup d'autres choses sont possibles, je ne les pas encore essayes, je vous laisse faire.