TP Squid/SquidGuard - Direction du Système d`Information (DSI)

Transcription

TP Squid/SquidGuard - Direction du Système d`Information (DSI)
TP Squid/SquidGuard
Fabrice Prigent
18 mars 2015
1
Constatation
A partir d’un navigateur se connecter à http://dsi.ut-capitole.fr/hidden/test ou http://192.168.30.12. On
constate alors l’information ”User-Agent” : qui indique le nom et la version du navigateur et le nom et la version
de l’OS. Cette information, utile, va nous donner l’occasion de voir ce qui peut être fait par un relai applicatif.
2
Squid
2.1
Installation
L’installation du relai proxy squid est assez simple
apt-get install squid3
On suivra les éventuels problèmes avec les commandes :
tail /var/log/squid3/cache.log
tail /var/log/syslog
Ensuite, on va créer
— un squid.conf allégé des commentaires pour pouvoir facilement le modifier, et qui est le fichier de configuration du squid
— un squid.conf.distrib qui servira de référence pour retrouver des options intéressantes mais plus tard.
cd /etc/squid3
#
On crée une copie sous le nom squid.conf.distrib
cp squid.conf squid.conf.distrib
#
On enlève les commentaires, puis on ne prend que les lignes avec 2 caractères
cat squid.conf|egrep -v ’^#’|egrep ’..’ > squid.conf.new
cp squid.conf.new squid.conf
On peut alors lancer le squid
/etc/init.d/squid start
Dans le cas où l’on utilise la machine virtuelle, il sera nécessaire d’autoriser le réseau, où se trouve la machine
cliente (la machine physique), à utiliser le squid local. Dans le fichier squid.conf on va donc ajouter une définition
d’ACL, puis utiliser cette définition. Il sera important de bien choisir l’ordre dans lequel on va placer les acl et
leur utilisation.
acl local_clients src 192.168.30.0/255.255.255
...
http_access allow local_clients
2.2
Utilisation
Utiliser ce proxy pour se connecter à Internet. Pour ce faire : dans le navigateur Firefox (la procédure est
légèrement différente pour Internet Explorer ou pour Chrome), allez dans les menus suivants
— Préférences / Connexion / configuration locale du proxy
— Host : 127.0.0.1 (si nous utilisons le proxy local)
1
— Host : 192.168.30.xxx (si nous utilisons le proxy de la machine virtuelle)
— Port : 3128
— Utiliser le même proxy pour tous les protocoles
— HTTP => web classique ;
— SSL => HTTPS ;
— FTP => FTP (en fait le navigateur contacte le proxy en HFTP, c’est le proxy qui parle en FTP) ;
— Gopher => Ancien protocole qui est l’ancêtre du WWW ;
— Socks => L’utilisation du proxy désactive l’utilisation du SOCKS. C’est l’un ou l’autre. Donc, ne
mettez rien dans cette ligne.
On teste à nouveau http://dsi.ut-capitole.fr/hidden/test ou http://192.168.30.12
On voit alors apparaitre 2 lignes supplémentaires :
— Via : qui va indiquer le proxy que nous utilisons (avec la version)
— X-Forwarded-For : qui va indiquer pour qui nous faisons le proxy,dans le cas présent 127.0.0.1, mais, si
l’on offre le service pour une autre machine, on verra son IP apparaitre (192.168.30.xxx par exemple).
On constate aussi l’apparition dans le répertoire /var/spool/squid de fichiers qui correspondent à chacun
des éléments consultés grâce à l’utilisation de la commande :
du -ka /var/spool/squid3|grep ’/var/spool/squid3/../../.’
Les problèmes potentiels
— Les iptables peuvent être trop restrictives et bloquer l’accès
— Il faut penser à lancer le squid (/etc/init.d/squid start)
— Le suivi des journaux est précieux pour l’analyse d’éventuelles difficultés
2.3
Modification des informations
Comment faire disparaitre ou modifier les informations en trop ? Les informations proviennent des en-têtes
que fournit le navigateur. On peut en dissimuler certaines, tout en sachant que plusieurs d’entre elles ne sont
fournies que dans des cas particuliers tels que une phase d’authentification, une récupération ”sous condition”,
etc.
2.3.1
Suppression des en-têtes
Pour effacer une en-tête on interdit son accès. On va donc, dans le fichier /etc/squid/squid.conf, rechercher
la chaine ”header access” pour trouver le paragraphe correspondant et lire l’explication. On ajoute alors les
directives suivantes pour effacer les en-têtes :
request_header_access User-Agent deny all
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
On relance alors le squid par
/etc/init.d/squid reload
Les informations User-Agent, Via et X-Forwarded-For n’apparaissent plus lors du test http://dsi.ut-capitole.fr/hidden/test
2.3.2
Remplacement des en-têtes
Modifions désormais les en-têtes au lieu de simplement les effacer. On va ajouter la ligne suivante (en effet
pour modifier un en-tête il faut l’interdire avant)
request_header_replace User-Agent Mozilla 7.0/ Firefox 12.0 Linux Fedora youpala 23.8
On relance alors le squid par
/etc/init.d/squid reload
L’information User-Agent réapparait mais modifiée
3
Squidguard
Comment renforcer le filtrage des urls ? Squid est en effet capable de filtrer des destinations, mais avec une
ligne par url à bloquer, lignes qui seront analysées une par une à chaque demande, cela va être très long.
Squidguard permet de le faire plus efficacement grâce à l’utilisation d’une base de données berkeleyDB.
2
3.1
Installation du logiciel
On installe squidGuard
apt-get install squidguard
Une fois ceci fait, on signale à squid d’utiliser squidGuard. Pour cela, on modifie /etc/squid3/squid.conf
url_rewrite_program /usr/bin/squidGuard
3.2
Configuration du logiciel
La configuration doit se faire avant l’installation des bases de données. Le fichier de configuration est
/etc/squidGuard/squidGuard.conf La configuration par défaut est utilisable, mais sans filtrage. On garde le
dbhome tel quel.
On garde les lignes src telles quelles, car nous utiliserons le fonctionnement par défaut (source defaut), on
modifie par contre les définitions de destinations
dest adult {
#
On remarque que le répertoire dest
#
est ajouté à la configuration par défaut
domainlist dest/adult/domains
urllist dest/adult/urls
#
Si l’on souhaite une redirection non transparente
redirect 302:http://www.vatican.va
#
Si l’on souhaite une redirection transparente, mais
#
légèrement buggée sur certains sites
#redirect http://www.vatican.va
#
Si l’on souhaite une redirection transparente adaptée au contexte
#redirect http://www.univ-perp.fr/cgi-bin/squidguard.cgi?client-address=\%a
#
On peut aussi ne pas faire de redirection par destination
}
dest malware {
domainlist dest/malware/domains
urllist dest/malware/urls
redirect http://www.vatican.va
}
Puis on applique
acl {
default {
#
On refuse les sites adultes et les malwares, on accepte le reste
pass !adult !malware all
#
On fournit une url de redirection par défaut.
redirect http://www.google.fr
}
}
3.3
Les bases de filtrage
On rapatrie une base de filtrage et on l’installe.
cd /var/lib/squidguard/db
wget http://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz
#
On décompacte, un répertoire blacklists est alors crée
tar zxvf blacklists.tar.gz
#
On crée un lien symbolique pour garder la notion de dest
ln -s blacklists dest
3
La structure des fichiers textes contenant la liste est créée. Squidguard peut fonctionner tel quel (il recompilera les bases en mémoire au démarrage), mais cela ralentira considérablement tout démarrage ou redémarrage.
Il faut donc créer (compiler) les bases de données avant le lancement.
Il faudra prendre la précaution d’arrêter le squid avant, si on veut que la compilation soit rapide.
/etc/init.d/squid stop
/usr/bin/squidGuard -P -d -b -C all
chown -R proxy:proxy /var/lib/squidguard/db
/etc/init.d/squid start
Cette commande va compiler les bases de données qui sont utilisées dans le squidGuard.conf. Comme la
commande a été faite par root, les fichiers domains.db et urls.db lui appartiennent, il faut changer le propriétaire.
On peut alors relancer le squid.
Reste alors à tester, à partir du navigateur l’url http://www.playboy.fr qui va se transformer en http://www.vatican.va.
4
Ouvrir à l’extérieur
4.1
Ouvrir les iptables
On accepte de fournir le service à l’extérieur, et pour cela on va insérer une règle iptables
iptables -A INPUT -p tcp --dport 3128 --sport 1024:65535 -s 192.168.10.0/24 -j ACCEPT
4.2
Ouvrir squid
Pour ouvrir le squid filtrant à l’extérieur, il faut autoriser cet accès qui est fermé par défaut. Pour cela, on
va rechercher http access dans le fichier /etc/squid3/squid.conf puis définir une acl sur les clients autorisés.
acl clients_autorises src 192.168.10.0/24
On applique alors cette acl à la restriction http access (ATTENTION à l’ordre des http access)
http_access allow clients_autorises
http_access deny all
4.3
Ouvrir squidGuard
Une fois ceci fait, on va s’occuper des restrictions squidGuard : définition de src
src clients_autorises {
ip 192.168.10.0/24
}
5
Proxy Transparent
Le but est d’intercepter les communications web, pour les envoyer vers le squid. Mais en TP, on ne peut le
faire que pour le 127.0.0.1.
5.1
Vérifier l’utilisation transparente
Il va falloir vérifier l’utilisation transparente. Pour celà, avant de mettre en place la redirection, il nous faudra
avoir les en-têtes que génère les proxys. On va donc défaire ce que nous avons fait jusqu’à présent.
— Réactiver l’en-tête Via
— Réactiver l’en-tête X-Forwarded-For
— Désactiver l’utilisation du proxy sur le navigateur
— Relancer squid
— Vérifier si tout se passe bien
4
5.2
Modifier le comportement de squid
Squid ne peut traiter de la même manière les requêtes ”normales” et les requêtes transparentes. Pour cela
on crée une ”instance” sur un port différent (suggestion : le port 3132). Dans le fichier /etc/squid/squid.conf,
on ajoute la ligne.
http_port
3132
transparent
On ajoute ensuite dans squidGuard.conf à l’acl clients autorises la ligne
ip 127.0.0.1/8
Puis on relance le squid avec /etc/init.d/squid reload
5.3
Modifier le comportement des iptables
Le but est d’intercepter les paquets à destination du web pour les rediriger vers le processus squid. La syntaxe
ci-dessus est valable pour le TP.
#
On évite les bouclages avec le squid, en disant que l’utilisateur
#
squid peut sortir directement
iptables -A OUTPUT -t nat -m owner --uid-owner 13 -j RETURN
iptables -A OUTPUT -t nat -p tcp --dport 80 --sport 1024:65535 \
-j REDIRECT --to-ports 3132
A titre d’information, en entreprise, si votre firewall fait aussi squid (ce n’est pas conseillé, mais on n’a pas
toujours le choix), entrez ceci :
iptables -A PREROUTING -t nat -p tcp --dport 80 --sport 1024:65535 -s 192.168.10.0/24 \
-j REDIRECT --to-ports 3132
Par contre si vous avez un proxy 192.168.40.1 sur une DMZ
iptables -A PREROUTING -t nat -p tcp --dport 80 --sport 1024:65535 -s 192.168.10.0/24 \
-j DNAT --to 192.168.40.1/32:3132
5.4
Le problème
La redirection transparente, très pratique, ne permet pas de traiter les communications SSL, donc le HTTPS,
ni d’ailleurs les sites web sur d’autres ports que le 80.
Pour conserver la notion de ”transparence” à l’utilisateur dans ce cas, il sera tout à fait utile de se reporter
à l’utilisation du champ wpad du DHCP. Dans le fichier /etc/dhcpd.conf il faut ajouter :
option wpad-url
option wpad-url
code 252 = text;
"http://www.univ-perp.fr/proxy.pac";
On pourra aussi (c-a-d en plus) créer un virtualhost apache dénommé wpad.domaine.fr avec un fichier
wpad.dat qui contiendra la même chose que le proxy.pac.
Le proxy.pac est un fichier qui contient un javascript permettant à un navigateur de choisir le proxy à utiliser
suivant les circonstances. Par exemple
function
//
//
if
if
FindProxyForURL(url, host) {
Toutes les urls locales sont accédées sans passer par un proxy
La fonction shExpMatch cherche dans la chaine url, la chaine de caractères indiquée.
(shExpMatch(url,"*.exemple.fr/*"))
{return "DIRECT";}
(shExpMatch(url, "*.exemple.fr:*/*"))
{return "DIRECT";}
// Toutes les autres requetes passent par proxy.exemple.fr
//
Si ce dernier est HS, on passe par le proxy de secours
//
Et si lui aussi est HS, on passe directement
return "PROXY proxy.exemple.fr:3128; PROXY proxy2.exemple.fr:3128; DIRECT";
}
5
6
Conclusion
Le but de ce TP est de vous permettre d’installer rapidement un relai applicatif, de l’utiliser pour manipuler
les informations : filtrage, stockage, transformation.
Les indications sont valables à l’heure de la rédaction de ce rapport sur une debian lenny, avec un squid
3.1.20 et un squidguard 1.2.0. Mais les consignes sont facilement transposables à d’autres versions d’OS et de
logiciels.
6

Documents pareils

Procédure d`installation

Procédure d`installation /etc/init.d/squid3 restart A partir de maintenant, le proxy est sécurisé, il fonctionne mais ne bloque aucun sites. Pour remédier a ce problème, il suffit d’installer SquidGuard apt-get install squ...

Plus en détail

Mise en place d`un proxy Squid avec authentication Active Directory

Mise en place d`un proxy Squid avec authentication Active Directory On repart au charbon, en commençant par installer SquidGuard : aptitude install squidguard

Plus en détail