Serveur Mandataire SQUID Compétences Professionnelles Mise en place d un serveur mandataire (proxy SQUID) Mise en place de ressources complémentaires (SQUIDGUARD & SQUIDANALYZER) Analyser des logs afin de pouvoir garantir une meilleure sécurité Utilisation d un système d exploitation GNU/Linux Serveur Mandataire SQUID 1
Contenu OBJECTIF... 3 CONTEXTE... 3 I Pré-configuration du routeur... 5 II Installation et configuration du proxy... 6 III Installation de SquidGuard... 11 IV Installation de SquidAnalyzer... 15 Serveur Mandataire SQUID 2
OBJECTIF Internet forme sans aucun doute une des innovations les plus importantes de la fin du XXe siècle. Aujourd hui, plus de 2,5 milliards d êtres humains y sont connectés. Demain, internet nous reliera également à des dizaines de milliards d objets, de capteurs, de robots, qui dialogueront entre eux et prendront progressivement en charge des pans entiers de la gestion de notre vie quotidienne. Plus largement, internet bouleverse les organisations, les modes de production, le travail, le rapport au savoir et à la connaissance, l expression démocratique, les liens sociaux et le rôle de la puissance publique. Malheureusement, grâce à cette expansion certaines personnes se jouent de la sécurité informatique des entreprises pour essayer de récupérer des informations ou tout simplement par vandalisme informatique. Cela peut être le fait différentes attaques (tel que virus, backdoor, rootkit), qui occasionnent parfois des dégâts considérable au sein d une société. Cependant pour se protéger de ces attaques, il existe des solutions (tel que les proxys, firewall) qui permettent aux entreprises de se protéger. Le but de ce projet est de proposer une solution de protection contre certains risques liés à l utilisation d internet dans une entreprise. CONTEXTE Ce projet a été réalisé dans le cadre de la société CYDAE. La société possède un accès sur internet qui, actuellement, est non filtré pour ses utilisateurs. Pour apporter plus de sécurité, elle décide de mettre en place un système qui permettra de filtrer le contenu internet et bloquer les sites à risque afin d éviter les risques de contaminations des ordinateurs. Serveur Mandataire SQUID 3
Cahier des charges : La solution proposée doit pouvoir fonctionner dans l environnement et avec les ressources actuelles. Une authentification par utilisateur sera requise. La solution devra restreindre les accès aux sites à risques répertoriés. Elle doit être évolutive. Un adressage d IP statique sera mis en place Solution proposée : La société CYDAE a choisi de réutiliser un ordinateur existant qui servira de serveur proxy et d installer une version GNU/Linux sous Debian 7. SQUID sera le proxy utilisé, il sera accompagné de SQUIDGARD et de SQUIDANALYZER qui permettront un meilleur filtrage internet. La mise en place de cette brique dans l architecture de la société CYDAE est estimée entre 2 et 3 jours. PRINCIPE DE LA SOLUTION PROPOSEE Interface : 192.168.1.5 Interface : 192.168.0.5 Interface : 192.168.1.254 Serveur OS : GNU/Linux Debian 7 Proxy : SQUID Fonctionnalité : Routage PC utilisateurs OS : Windows XP Adressage IP : Fixe IP :192.168.0.x MSR 255.255.255.0 Gate :192.168.0.5 Serveur Mandataire SQUID 4
Diagramme de séquence : Demande d interrogation du serveur cible Interroge le serveur cible Le proxy répond au client Le serveur répond au proxy I Pré-configuration du routeur Avant d installer le paquet SQUID3 sur le serveur, une configuration sur celui ci doit être effectuée pour que les utilisateurs puissent accéder à internet. Sur le serveur on va activer le routage qui permettra au client de pouvoir accéder à internet. Test de ping avant activation du routage Activation du routage sur le serveur root@srv1:~ echo 1 > /proc/sys/net/ipv4/ip_forward Mise en place du NAT : On a besoin d une translation d adresse, en faisant correspondre une adresse IP privée avec une adresse IP publique pour que le réseau 192.168.0.0 puisse accede à internet. iptables t nat A POSTROUTING s 192.168.0.0/24 j MASQUERADE Test de ping après activation du routage Serveur Mandataire SQUID 5
Pour ce projet, il a été choisi de rendre le routage permanent en modifiant /etc/sysctl.conf et en décommentant la ligne net.ipv4.ip_forward=1 Activer le routage sysctl p /etc/sysctl.conf Configuration IP du poste client et test d accès internet II Installation et configuration du proxy On peut procéder maintenant à l installation du paquet de SQUID afin de mettre en place le proxy. Installation de SQUID3 root@srv1:~ apt-get install squid3 Juste après l installation du paquet, on voit que Squid démarre tout seul root@srv1:~ ps axf grep squid 4733 pts/0 S+ 0:00 \_ grep squid 4700? Ss 0:00 /usr/sbin/squid3 YC f /etc/squid3/squid.conf 4704? S 0:00 \_ (squid) -YC f /etc/squid3/squid.conf On va vérifier l impact du proxy sur les utilisateurs en configurant leur navigateur web Configuration du navigateur client Dans le navigateur internet : Outils > Options Internet > Onglet Connexion > Paramètres réseau Serveur Mandataire SQUID 6
Résultat après paramétrage du navigateur Le proxy bloque actuellement tout. On va donc configurer le fichier squid.conf pour que l utilisateur puisse aller sur internet. Configuration du fichier squid.conf Dans le fichier squid.conf on va créer des ACL (Access Control Lists) qui permettront de définir des conditions. acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl cydae src 192.168.0.0/24 acl SSL_ports port 443 acl Safe_ports port 80 http acl Safe_ports port 21 ftp acl Safe_ports port 443 https 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 http_access allow manager localhost http_access deny manager http_access allow cydae http_access deny!safe_ports http_access deny CONNECT!SSL_ports http_access allow localhost http_access deny all http_port 3128 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/ \?) 0 0% 0 refresh_pattern. 0 20% 4320 Création d une ACL nommée cydae qui représente le réseau des utilisateurs On donne accès à l ACL créée pour passer par le proxy. Serveur Mandataire SQUID 7
Afin d avoir un fichier de configuration de Squid lisible il peut être intéressant d effectuer quelques commandes : cd /etc/squid3/ mv squid.conf squid.conf.origin cat squid.conf.origin egrep -v -e '^[ :blank: ]* ^$' > squid.conf Redémarrer le service de Squid Après chaque modification du fichier de configuration de Squid, redémarrer le service de squid3 root@srv1:~ /etc/init.d/squid3 restart Actualiser la page du navigateur web de l utilisateur L utilisateur a donc accès à internet, maintenant que le fichier de configuration de Squid est fonctionnel, on peut mettre en place l authentification par utilisateurs. Pour mettre en place l authentification, ncsa_auth sera utilisé (Cette méthode d authentification, permet d identifier les utilisateurs à partir d un fichier local de type «htpasswd»). Création du fichier root@srv1:~ touch /etc/squid3/users Le fichier maintenant créé, mettre les différents utilisateurs de l entreprise CYDAE en utilisant la commande htpasswd Par défaut la commande htpasswd n est pas disponible. Pour résoudre cela, installer le paquet apache2-utils apt-get install apache2-utils Création d un utilisateur root@srv1:~ htpasswd b /etc/squid3/users julien adrar031 Cette opération est à répéter autant de fois qu il y a d utilisateur Serveur Mandataire SQUID 8
Si on regarde le fichier users précédemment créé il donne ce résultat : root@srv1:~ cat /etc/squid3/users julien:$apr1$wojtkyj8$kdj2dhaw2y/kqqgaywc5n/ Il est possible de vérifier le module d authentification en le lançant manuellement root@srv1:~ /usr/lib/squid3/ncsa_auth /etc/squid3/users julien adrar031 OK Après avoir tapé la ligne de commande il faudra saisir le nom de l utilisateur séparer du mot de passe par un espace et valider Le système répond par OK ou par ERR suivant que l authentification réussit ou non. Modification du fichier squid.conf Nous allons modifier le fichier de configuration de Squid afin d implémenter le module d authentification que nous venons de mettre en place auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/users auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl cydae src 192.168.0.0/24 acl Users proxy_auth REQUIRED acl SSL_ports port 443 acl Safe_ports port 80 http acl Safe_ports port 21 ftp acl Safe_ports port 443 https 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 http_access allow manager localhost http_access deny manager http_access allow cydae Users http_access deny!safe_ports http_access deny CONNECT!SSL_ports http_access allow localhost http_access deny all http_port 3128 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/ \?) 0 0% 0 refresh_pattern. 0 20% 4320 Paramètre auth_param : program : indique le module d authentification children : 5 est une valeur usuelle realm : texte qui apparaîtra lors de l identification. credentialstti : durée de vie de l authentification Paramètre ACL/HTTP : acl Users proxy_auth REQUIRED oblige l identification http_access allow cydae Users autorise l accès que si le client est dans le réseau CYDAE et que l authentification est réussi. Serveur Mandataire SQUID 9
Redémarrer Squid root@srv1:~ /etc/init.d/squid3 restart Relancer le navigateur du client Une demande d authentification sera soumise, il faudra donc saisir les identifiants d un utilisateur afin de pouvoir accéder à internet. Si on regarde les dernières lignes de /var/log/squid3/access.log, on constate que le nom de l utilisateur figure sur chaque requête. tail -30 /var/log/squid3/access.log 1394147439.468 106 192.168.0.71 TCP_MISS/200 399 GET http://cms.quantserve.com/dpixel? julien DIRECT/95.172.94.55 image/gif Pour éviter que les utilisateurs ne changent les paramètres utilisés pour le proxy dans les options d Internet Explorer, il est possible de bloquer l accès en modifiant une clef de registre sur le poste de l utilisateur. Modifier la base de registre Pour bloquer les options internet, il va falloir créer une nouvelle clef ainsi qu une valeur DWORD. Déroulez le menu Démarrer, Exécuter, saisissez regedit et cliquez sur OK. Déroulez alors les clés HKEY_LOCAL_MACHINE\ SOFTWARE\ Policies\ Microsoft Via le menu Edition, Nouveau créez une clé que vous nommerez Internet Explorer puis une sousclé intitulée Restrictions. Le chemin complet de cette clé devient alors HKEY_LOCAL_MACHINE\ SOFTWARE\ Policies\ Microsoft\ Internet Explorer\ Restrictions Serveur Mandataire SQUID 10
Dans cette clé, créer une valeur DWORD pour chacune des restrictions, ici cela concerne l option internet explorer donc la valeur DWORD se nommera NoBrowserOptions. Double cliquer sur la valeur DWORD que vous venez de créer, pour activer la restriction, attribuez lui la valeur 1 dans le champ Données de la valeur. Pour désactiver la restriction, attribuez-lui la valeur 0. Pour appliquer les modifications, quittez le Registre et redémarrez Internet Explorer. Sous Windows 98, pour certaines restrictions, un redémarrage de Windows est nécessaire. Tester la restriction Dans le navigateur internet : Outils > Options Internet > Onglet Connexion > Paramètres réseau III Installation de SquidGuard Pour améliorer notre proxy Squid il peut être intéressant de le coupler avec SquidGuard. Squidguard est un outil permettant de filtrer en se servant des URL et, éventuellement, des noms d utilisateurs si l on s occupe de l authentification de ces derniers, et d améliorer la rapidité d accès au web grâce à ses fonctions de cache. Pour filtrer, SquidGuard utilise des urls regroupées en listes blanches et listes noires. Serveur Mandataire SQUID 11
Installer SquidGuard root@srv1:~ apt-get install squidguard Installer Apache Certains scripts pour la configuration de Squidguard s appuient sur apache root@srv1:~ apt-get install apache2 Télécharger les blacklists SquidGuard utilise des fichiers contenants des domaines, adresses IP (pornographiques, warez, vente d armes, jeux) qui seront utilisés comme blacklists. Sur internet, il est facile de trouver ces différentes listes. Pour ce projet nous prendrons les fichiers du centre de Ressources Informatiques de l Universite de Toulouse. root@srv1:~ cd /var/lib/squidguard/db/ root@srv1:~ wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz root@srv1:~ tar xzvf blacklists.tar.gz Tout le contenu de /var/lib/squidguard/db/blacklists doit être accessible en lecture et en écriture par l'utilisateur sous l'identité duquel squid tourne. Pour nous, c'est l'utilisateur «proxy» root@srv1:~ cd /var/lib/squidguard/db/ root@srv1:~ chown R proxy:proxy blacklists SquidQuard redirige les URL interdits vers un URL local, généralement destiné à expliquer pourquoi le site convoité a été bloqué. Généralement, il s'agit d'un script CGI. Si cet URI de redirection n'est pas indiqué, ne sachant pas où rediriger les requêtes interdites, SquidGuard les laissera tout de même passer, réalisant ainsi une pernicieuse passoire!!! Installer les scripts Dans le dossier examples/ se trouvent les scripts qui nous intéressent et qui seront utiles lors des redirections des sites internet bloqués. root@srv1:~gunzip /usr/share/doc/squidguard/examples/squidguard.cgi.gz root@srv1:~gunzip /usr/share/doc/squidguard/examples/squidguard-simple-de.cgi.gz root@srv1:~ mv /usr/share/doc/squidguard/examples/squidguard.cgi /usr/lib/cgi-bin/ root@srv1:~ mv /usr/share/doc/squidguard/examples/squidguard-simple-de.cgi /usr/lib/cgi-bin/ root@srv1:~ chmod +x /usr/lib/cgi-bin/squidguard.cgi root@srv1:~ chmod +x /usr/lib/cgi-bin/squidguard-simple-de.cgi Les scripts mise en place sur notre Apache on peut passer à la configuration de squidguard. Serveur Mandataire SQUID 12
Configuration SquidGuard Le fichier de configuration squidguard.conf se trouve dans /etc/squidguard/ CONFIG FILE FOR SQUIDGUARD Caution: do NOT use comments inside { dbhome /var/lib/squidguard/db/blacklists logdir /var/log/squidguard SOURCE ADDRESSES: src admin { ip 192.168.1.5 - indique à squidguard où trouver la base de données des listes. - indique l'endroit où l'on désire récupérer les logs. Les sources sont là pour définir des groupes de clients. Les sources définies par des adresses IP sont les plus simples à mettre en place. src cydae-users{ ip 192.168.0.0/24 DESTINATION CLASSES: dest pornographie { urllist porn/urls domainlist porn/domains expressionlist porn/very_restrictive_expression dest drogues { urllist drugs/urls domainlist drugs/domains Les destinations, comme leur nom l'indique, définissent des ensembles de domaines, d'url ou d'expressions régulières à appliquer aux URL. dest phishing { urllist phishing/urls domainlist phishing/domains dest marchands_de_guerre { urllist marketingware/urls domainlist marketingware/domains ACL RULES: acl { admin { pass any cydae-users { pass!pornographie!drogues!phishing!marchands_de_guerre any redirect http://127.0.0.1/cgibin/squidguard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u Les ACL permettent de définir quelle source peut aller (ou ne pas aller) vers quelle(s) destination(s). Un «!» veut dire «NOT» (non) default { pass none redirect http://127.0.0.1/cgibin/squidguard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u Serveur Mandataire SQUID 13
Il faut configurer squid3 pour qu'il invoque SquidGuard en ajoutant ces lignes à la fin de squid.conf url_rewrite_program /usr/bin/squidguard -c /etc/squidguard/squidguard.conf url_rewrite_children 5 Relancer Squid root@srv1:~ /etc/init.d/squid3 restart Il est vivement conseillé de construire ces bases avant le démarrage de Squid (et donc de SquidGuard), faute de quoi, ces bases seront construites à la volée, pour chaque instance de SquidGuard Après chaque modification du fichier de configuration de squidguard, il peut être essentiel que toute la configuration soit effective. Pour plus de lisibilité des commandes suivantes, il peut être intéressant d ouvrir deux shells. root@srv1:~ su proxy $ squidguard C all root@srv1:~tail f /var/log/squidguard/squidguard.log Première fenêtre : Construction de la base de squidguard Deuxième fênetre : On analyse les logs de squidguard lors de la construction de la base ce qui permet de voir si tout se passe bien. Test de la configuration sur le client La solution mise en place est fonctionnelle. Cependant afin de rendre l accès toujours plus sécurisé au réseau, la société CYDAE met en place un outil complémentaire afin de pouvoir analyser les logs de squid qui permettra de mieux traiter les risques. Serveur Mandataire SQUID 14
IV Installation de SquidAnalyzer Lors de ce projet et étant parti d un système d exploitation vierge, il a fallu installer quelques outils afin de pouvoir compiler les sources de SquidAnalyzer. Télécharger et installer le paquet Make Commencer par télécharger le paquet make directement sur Debian ou en effectuant cette commande : root@srv1:~ wget http://ftp.de.debian.org/debian/pool/main/m/make-dfsg/make_3.81-8_i386.deb Installer le paquet Make qui par défaut est allé dans le dossier Téléchargements/ root@srv1:/home/julien/téléchargements dpkg -i make_3.81-8_i386.deb Le paquet Make est maintenant installé, on peut passer à l installation de squidanalyzer. Télécharger et installer les sources de SquidAnalyzer Commencer par télécharger les sources de squidanalyzer directement sur son propre site ou en effectuant cette commande : root@srv1:~ wget http://downloads.sourceforge.net/project/squid-report/squid-report/5.3/squidanalyzer- 5.3.tar.gz Décompresser le dossier récemment téléchargé et placer le dans le dossier web. root@srv1:/home/julien/téléchargements gunzip squidanalyzer-5.3.tar.gz root@srv1:/home/julien/téléchargements tar xf squidanalyzer-5.3.tar root@srv1:/home/julien/téléchargements mv squidanalyzer-5.3/ /var/www/ Aller dans le dossier de squidanalyzer-5.3/ et commencer l installation de SquidAnalyzer root@srv1:/var/www/squidanalyzer-5.3 perl -MCPAN -e 'install GD::Graph::bars3d' root@srv1:/var/www/squidanalyzer-5.3 perl Makefile.PL root@srv1:/var/www/squidanalyzer-5.3 make root@srv1:/var/www/squidanalyzer-5.3 make install Préparer la configuration de Apache en modifiant le fichier de configuration /etc/apache2/sitesavailable/default (avec votre éditeur de texte préféré). Ajouter entre les balises <virtualhost></virtualhost> Alias /squidreport /var/www/squidanalyzer <Directory /var/www/squidanalyzer> Options -Indexes FollowSymLinks MultiViews AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.1 </Directory> Serveur Mandataire SQUID 15
Redémarrage apache root@srv1:~ service apache2 restart Récupérer et analyser les logs Squid Lancer le programme de parssage de logs Squid : root@srv1:~ /usr/local/bin/squid-analyzer -c /etc/squidanalyzer/squidanalyzer.conf -l /var/log/squid3/access.log Aller sur http://192.168.1.5/squidreport/ afin de pouvoir analyser graphiquement les logs de Squid. Afin d automatiser le parssage des logs de Squid il peut être intéressant d automatiser la commande en utilisant l outil crontab julien@srv1:~$ crontab -e Rajouter à la fin du fichier qui vient de s ouvrir cette commande : 0 2 * * * /usr/local/bin/squid-analyzer -c /etc/squidanalyzer/squidanalyzer.conf -l /var/log/squid3/access.log Cette commande effectuera toutes les deux heures un parssage des logs de Squid. Cependant cette commande ne s effectue qu en mode root. Pour que crontab puisse effectuer il faut qu elle puisse être lancée par un simple utilisateur. root@srv1:/ chown R root:julien var/ root@srv1:/ chmod g+w -R var/ Serveur Mandataire SQUID 16