Télécharger

Transcription

Télécharger
SQUID
Configuration et administration d’un proxy
L'objectif de ce TP est d'étudier la configuration d'un serveur mandataire (appelé "proxy" en
anglais) ainsi que le filtrage des accès à travers l'outil Squid et quelques autres utilitaires
(Squish, SquidGard).
Schéma du réseau
stp
10.254.0.254
eth0
10.254.27.1/24
eth0
10.27.1.3/24
eth1
10.27.1.1/24
Sn
Squid/Serveur
Apache
eth2
10.27.2.1/24
Gn (Windows)
Client Web
eth0
10.27.2.2/24
Dn (Linux)
Client Web
1. Utilisation d'un proxy HTTP "SQUID"
Avant toute modification, nous allons sauvegarder le fichier squid.conf qui est le fichier de
configuration de Squid. On y configure des directives qui permettent notamment de
spécifier le port d'écoute de Squid, la taille du cache, les chemins d'accès vers les fichiers de
logs, les restrictions d'accès ou encore les timeouts.
Voici quelques commandes de bases pour l'utilisation de Squid :
/etc/init.d/squid3 start | stop | restart
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 1
Pour supprimer le cache de Squid, il faut d'abord arrêter Squid, puis vider le cache et
supprimer tous les répertoires sous /var/spool/squid3/ :
/etc/init.d/squid3 stop
echo "" > /var/spool/squid3/swap.state
rm -rf /var/spool/squid/0*
Pour redémarrer Squid :
/etc/init.d/squid start
2. Configurations préliminaires
Sur la machine Sn, nous configurons le serveur DNS (stp) dans le fichier /etc/resolv.conf :
nameserver 10.254.0.254
Nous allons aussi appliquer la règle suivante qui va permettre de nater ce qui sort de
l'interface eth0 de Sn pour que ce soit camouflé.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Si le routage n’est pas activé sur Sn, il faut le faire :
echo 1 > /proc/sys/net/ipv4/ip_forward
Pour vider le cache du navigateur (Firefox), il faut aller dans édition, préférences, vie privée,
ne jamais garder un historique, vider le cache.
Il est important que les PC soient à la même heure pour que les certificats fonctionnent
correctement.
2.1 Fonction proxy
Nous souhaitons bloquer le trafic HTTP et HTTPS vers l'extérieur pour le réseau
10.27.1.0/24 :
iptables -I FORWARD -s 10.27.1.0/24 -p tcp -i eth1 --dport 80 -j DROP
iptables -I FORWARD -s 10.27.1.0/24 -p tcp -i eth1 --dport 443 -j DROP
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 2
Ces deux règles nous permettent de bloquer le trafic HTTP et HTTPS transitant par l’interface
eth1 de la machine Sn et en provenance du réseau 10.27.1.0/24.
Pour s'assurer du bon fonctionnement des règles IPTABLES, je tente d'accéder au serveur
Web de stp depuis le poste Gn :
On ne peut plus accéder au serveur Web de stp car les paquets sont filtrés par IPTABLES.
Nous allons maintenant vérifier que nous pouvons quand même accéder au serveur Web de
Gn et que seuls les paquets vers l'extérieur sont filtrés :
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 3
2.2 Passage par le proxy
Dans le fichier squid.conf, on retrouve différentes directives dont une qui précise le nom du
serveur Squid, c’est la "visible_hostname" :
visible_hostname S27.tp271.gtr
La directive configurant le port d'écoute de Squid est "http_port".
Le port par défaut est le 3128.
La directive renseignant le journal d'accès est "access_log".
La section relative aux ACL se nomme "access controls", on y configure les restrictions
d'accès aux ressources.
Nous allons configurer le proxy sur "Firefox" en ajoutant l'adresse IP (10.27.1.1 pour Gn et
10.27.2.1 pour Dn) ainsi que le numéro de port d'écoute du serveur Squid dans les
paramètres de connexion du navigateur :
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 4
Nous tentons d’accéder au serveur stp depuis la machine Gn à travers le proxy :
Nous remarquons que par défaut l’accès nous est interdit.
Capture wireshark pour comprendre plus en détail ce qu’il s’est passé :
Nous effectuons d’abord une requête "GET" pour accéder à la page d’accueil du serveur
Web de stp. Le serveur refuse d’exécuter la requête (403 forbidden) comme notre machine
n’est pas autorisée à y accéder.
Nous allons maintenant définir deux ACLs nommées "myLeftNetwork" et "myRightNetwork"
qui correspondent aux réseaux des machines Gn et Dn à l'aide de la directive "acl" :
acl myLeftNetwork src 10.27.1.0/24
acl myRightNetwork src 10.27.2.0/24
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 5
Ensuite, nous allons autoriser l'accès au réseau pour ces deux ACLs à l'aide de la directive
« http_access » :
http_access allow myLeftNetwork
http_access allow myRightNetwork
Vérifions maintenant que nous pouvons accéder au serveur stp depuis la machine Gn :
Capture wireshark pour comprendre ce qu’il s’est passé :
Cette fois-ci, nous pouvons voir que notre requête n’a pas été refusée par le serveur et
qu’elle a été traitée avec succès (200 OK).
On peut donc en déduire que nos ACLs fonctionnent correctement.
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 6
3. Le cache
Nous allons lancer le serveur Apache sur Sn et demander plusieurs fois la même page Web
(page d'accueil du serveur Web en ayant vidé le cache auparavant).
Capture wireshark sur l’interface eth2 de Sn depuis le poste Dn :
Nous pouvons en conclure que notre serveur Squid garde dans son cache les pages ayant
déjà été consultées. En effet, lorsque nous tentons d’ouvrir une page déjà demandée, il
vérifie dans son cache que la page n'a pas été modifiée depuis la dernière demande comme
c'est le cas ci-dessus (304 not modified) sinon il l’a met à jour.
4. Le filtrage de domaines
Nous désirons interdire l'accès aux pages de type .youtube.com, .facebook.com et .cn :
Pour cela, nous allons créer des ACLs dans le fichier squid.conf et filtrer le trafic HTTP vers ce
type de pages :
acl youtube dstdomain .youtube.com
acl facebook dstdomain .facebook.com
acl cn dstdomain .cn
…
http_access deny youtube
http_access deny facebook
http_access deny cn
Il est important que les "http_access" soient positionnés après les ACLs dans le fichier
squid.conf pour qu'ils soient pris en compte.
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 7
Essayons d’accéder au site www.facebook.com :
L’accès au site nous est bien interdit par le proxy.
Analysons de plus près ce qu'il s'est passé :
Nous effectuons une requête "GET" pour accéder au site "www.facebook.com" et nous
observons que le serveur proxy refuse de répondre à cette requête (403 forbidden). L'accès
à ce site nous est donc impossible.
5. Le filtrage d’URL
Tout d'abord, nous supprimons le filtrage de domaine mis en place dans le point précédent.
Nous désirons mettre en place un filtrage d'URL, pour cela nous allons utiliser la directive
"acl".
Nous souhaitons mettre en place un filtrage de toutes les images GIF et d'une URL
particulière (nous utiliserons "www.iut-lannion.fr").
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 8
acl filtrage_gif urlpath_regex \.gif$
acl filtrage_url url_regex http://www.iut-lannion.fr
Essayons d'accéder de nouveau à la page d'accueil du serveur Web de stp :
Nous observons que le logo "IUT Lannion" n'apparaît plus désormais.
Analysons en détail ce qu'il s'est produit :
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 9
Comme auparavant, nous pouvons bien accéder à la page d'accueil de stp mais lorsqu'il
s'agit d'obtenir le logo "IUT Lannion", qui est au format GIF, nous voyons bien que le serveur
proxy nous l'interdit (403 forbidden).
Nous obtenons le même refus si nous tentons d'accéder à la page "www.iut-lannion.fr" :
Conclusion
Ce TP nous aura permis de mieux comprendre le fonctionnement d'un proxy comme Squid
(qui est l'outil le plus utilisé) et d'en appréhender sa configuration. Un serveur proxy est
presque devenu indispensable dans une entreprise pour des raisons de sécurité notamment.
En effet, il va permettre de filtrer l'accès à certains sites et d'identifier les personnes
connectées. En cas de problème majeur, l'entreprise pourra ainsi savoir qui était connecté et
à quel moment.
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 10