Proxy, Squid, SquidGuard et Kerberos
Transcription
Proxy, Squid, SquidGuard et Kerberos
Lycée Le Castel Proxy, Squid, SquidGuard et Kerberos Quentin Baptier 2014-2015 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Sommaire Mise en situation ..................................................................................................................................... 3 Architecture réseau dans sa globalité de GSB..................................................................................... 3 Description de l’existant ...................................................................................................................... 3 Objectif ................................................................................................................................................ 4 Outils mis à notre disposition .............................................................................................................. 4 Schéma réseau de la solution proposée ............................................................................................. 4 Tableau récapitulatif du plan d'adressage .......................................................................................... 5 Le Proxy ................................................................................................................................................... 5 Définition ............................................................................................................................................. 5 Squid .................................................................................................................................................... 6 Définition ............................................................................................................................................. 6 Maquette de la solution proposé ........................................................................................................ 6 Configuration de s-proxy pour Squid .................................................................................................. 7 Kerberos .................................................................................................................................................. 8 Définition ............................................................................................................................................. 8 Configuration ....................................................................................................................................... 8 Samba .............................................................................................................................................. 8 Kerberos .......................................................................................................................................... 9 Winbind ........................................................................................................................................... 9 Script Wpad d'auto-configuration du proxy .......................................................................................... 10 Squidguard ............................................................................................................................................ 11 Définition ........................................................................................................................................... 11 Installation et configuration .............................................................................................................. 11 Automatisation de l'installation de la solution via Ansible ................................................................... 13 Test ........................................................................................................................................................ 13 Conclusion ............................................................................................................................................. 13 2 Quentin Baptier Proxy, Squid, Squidguard et Kerberos Mise en situation Architecture réseau dans sa globalité de GSB Description de l’existant Le laboratoire GSB possède : Un serveur Windows 2008 R2 possédant le rôle de contrôleur de domaine Un serveur hébergeant les applications Un serveur de messagerie Un serveur de sauvegarde 2 serveurs d'infrastructure (DNS) Un serveur web se trouvant dans une DMZ 4 Sous réseaux afin de sécuriser celui-ci Un Firewall Un serveur DHCP utilisé comme routeur. Une borne wifi 3 2014-2015 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Objectif L'objectif sera de mettre en place un serveur proxy sous Squid3 afin de pouvoir mettre en cache des pages web pour rendre plus rapide l'accès à Internet depuis le réseau local et filtrer les accès à Internet. Outils mis à notre disposition Afin de mettre en place cet solution nous utiliserons comme outils un serveur Windows 2008 R2 (S-win) disposant d'un Active Directory avec les comptes utilisateurs de gsb.lan ainsi un DNS. Nous mettrons en place une deuxième machine disposant d'un serveur DNS (S-infra) ainsi que d'un serveur de temps pour synchroniser l'ensemble des machines à la même heure. Nous disposerons aussi d'un accès à Internet, R-ext et R-int devront être configuré. Le serveur proxy (S-proxy)sera sous squid, disposera d'acls, de Squidguard afin d'établir des listes blanches et listes noirs de sites Internet et de la méthode d'authentification NTLM qui nécessite les paquets krb5-user, samba, winbind (pour l'intégration à l'Active Directory). Afin de faciliter l'installation du serveur Proxy, nous mettrons en place un serveur Ansible (Sadm) qui effectuera l'installation complète du serveur proxy (S-proxy) à partir d'un playbooks et de fichiers de configuration. Schéma réseau de la solution proposée 4 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Tableau récapitulatif du plan d'adressage Nom de machine r-ext r-ext r-ext r-ext r-int r-int r-int r-int s-web-ext s-dns-ext s-infra s-proxy s-appli s-backup s-puppet s-win s-mess s-mon s-cli s-adm Adressage 192.168.1.1 192.168.0.50 192.168.100.253 192.168.200.254 192.168.200.254 172.16.0.254 172.16.64.254 172.16.65.254 192.168.100.11 192.168.100.10 172.16.0.1 172.16.0.2 172.16.0.3 172.16.0.4 172.16.0.5 172.16.0.6 172.16.0.7 172.16.0.8 172.16.64.20 192.168.99.99 Réseau N-linkv N-ext N-dmz N-link N-link N-infra N-user N-wifi N-dmz N-dmz N-infra N-infra N-infra N-infra N-infra N-infra N-infra N-infra N-user N-adm Nom d'alias wpad Adr. admin 192.168.99.11 192.168.99.10 192.168.99.1 192.168.99.2 192.168.99.3 192.168.99.4 192.168.99.5 192.168.99.6 192.168.99.7 192.168.99.8 192.168.99.99 Le Proxy Définition Un serveur proxy est un serveur ayant un composant logiciel qui fait l'intermédiaire entre deux hôtes afin d'accélérer, surveiller, sécuriser et filtrer les échanges. Filtrage Un serveur proxy peut filtrer les échanges en créant des listes noires afin d'interdire l'accès à certains site considérés comme malveillant ou interdit par la politique de l'entreprise. Accélérer Un serveur proxy permet d'accélérer les requêtes des utilisateurs grâce à sa fonction de mise en cache des pages web. Ainsi ça permet d'accélérer le temps de réponse pour ces pages web. Sécuriser Un serveur proxy peut forcer l'authentification des utilisateurs afin de sortir du réseau de l'entreprise et de pouvoir accéder à Internet. Cela permet aussi de dissuader certains utilisateurs à accéder à des contenus pas en accord avec la politique de l'entreprise du fait de se sentir "traqué". 5 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Surveillance Un serveur proxy permet aussi de surveiller les accès à Internet grâce aux logs que récupère le serveur proxy. Dans les logs il y a l'adresse IP de l'utilisateur ainsi que son nom si il doit s'authentifier. Anonymat Un serveur proxy permet aussi l'anonymat car c'est lui qui interroge les pages web et non l'utilisateur. Squid Définition Squid est un logiciel libre sous licence GNU GPL, il gère les protocoles HTTP, HTTPS, FTP et GOPHER. Maquette de la solution proposé 6 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Configuration de s-proxy pour Squid Tout d'abord il faut commencer par installer Squid : #aptitude install squid Ensuite nous sauvegardons le fichier de configuration d'origine # mv squid.conf squid.conf.old Puis on régénère un fichier de configuration sans les commentaires # cat squid.conf.old | egrep -v -e '^[[:blank:]]*#|^$' > squid.conf Puis nous configurons Squid en ajoutant une acl pour le réseau "User" , ensuite on ajoute "authparam ntlm" afin de forcer les utilisateurs à passer par le proxy en s'authentifiant à leurs ouverture de session à celui-ci. Cela est permit grâce à Kerberos. #vim /etc/squid3/squid.conf auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 5 auth_param ntlm keep_alive on auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param basic children 5 auth_param basic realm GSB auth_param basic credentialsttl 2 hours acl manager proto cache_object acl web src 172.16.0.2/32 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 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 acl lan src 172.16.64.0/24 acl ntlm proxy_auth REQUIRED http_access allow lan ntlm http_access allow ntlm http_access allow manager localhost http_access allow web http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all http_port 8080 cache_peer 10.121.32.69 parent 8080 0 no-query default never_direct allow all cache_effective_group winbindd_priv 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 redirect_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf redirect_children 10 7 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Kerberos Définition Le protocole Kerberos reponse sur un système de cryptographie à base de clés secrètes (clés symétriques ou clés privées), avec l'algorithme DES. Kerberos partage avec chaque client du réseau une clé secrète faisant office de preuve d'identité. Le principe de fonctionnement de Kerberos repose sur la notion de tickets : Afin d'obtenir l'autorisation d'accès à un service, un utilisateur distant doit envoyer son identifiant au serveur d'authentification. Le serveur d'authentification vérifie que l'identifiant existe et envoie un ticket initial au client distant, chiffré avec la clé associée au client. Le ticket initial contient : un clé de session, faisant office de mot de passe temporaire pour chiffrer les communications suivantes un ticket d'accès au service de délivrement de ticket. Le client distant déchiffre le ticket initial avec sa clé et obtient ainsi un ticket et une clé de session. Grâce à son ticket et sa clé de session, le client distant peut envoyer une requête chiffrée au service de délivrement de ticket, afin de demander l'accès à un service. Par ailleurs, Kerberos propose un système d'authentification mutuelle permettant au client et au serveur de s'identifier réciproquement. L'authentification proposée par le serveur Kerberos a une durée limitée dans le temps, ce qui permet d'éviter à un pirate de continuer d'avoir accès aux ressources. Configuration Pour mettre en oeuvre l'authentification des utilisateurs au proxy avec Kerberos il faut installer les paquets krb5-user krb5-config samba-common samba winbind Samba #aptitude install samba samba-comon Ensuite on configure samba : #vim /etc/samba/smb.conf [global] workgroup = GSB realm = GSB.LAN security = ADS syslog = 10 log file = /var/log/samba.log.%m max log size = 1000 encrypt passwords = yes template shell = /bin/bash idmap uid = 10000 - 20000 idmap gid = 10000 - 20000 winbind separator = + winbind offline logon = false winbind enum users = yes winbind enum groups = yes winbind use default domain = yes 8 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Kerberos #aptitude install krb5-user krb5-config On configure le fichier krb5.conf comme suit : #vim krb5.conf [libdefaults] default_realm = GSB.LAN dns_lookup_realm = true dns_lookup_kdc = true [realms] GSB.LAN = { kdc = s-win.gsb.lan:88 admin_server = s-win.gsb.lan:749 default_domain = GSB.LAN } [domain_realm] .gsb.lan = GSB.LAN gsb.lan = GSB.LAN [logging] default = FILE:/var/log/krb5.log kdc = FILE:/var/log/krb5kdc.log admin-server = FILE:/var/log/krb5adm.log [appdefaults] pam = { debug = true ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } Winbind # aptitude install winbind Enfin on configure winbind en rajoutant le paramètre "winbind " à passwd group et shadow : #vim /etc/nsswitch.conf # # # # # /etc/nsswitch.conf Example configuration of GNU Name Service Switch functionality. If you have the `glibc-doc-reference' and `info' packages installed, try: `info libc "Name Service Switch"' for information about this file. passwd: group: shadow: compat winbind compat winbind compat winbind hosts: networks: files dns files protocols: services: ethers: rpc: db db db db netgroup: nis files files files files 9 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Enfin il ne vous reste plus qu'à ajouter au domaine "s-proxy" : #service samba restart && service winbind restart #net join ads -U administrateur Vous devriez avoir un message disant que s-proxy à bien joint le domaine. Pour vérifier que cela a bien fonctionner faite un wbinfo -u et un wbinfo -g. Vous devriez voir les utilisateurs du domaine ainsi que les groupes apparaitre. Script Wpad d'auto-configuration du proxy Afin d'automatiser la configuration des navigateurs Internet pour que les utilisateurs passent par le proxy nous allons créer un script appelé wpad.dat qu'on hébergera sur un serveur apache qui a pour alias wpad. Nous avons choisi d'héberger le fichier sur le serveur "s-infra" qui a pour alias "wpad". #vim /var/www/wpad.dat function FindProxyForURL(url, host) { if(isPlainHostName(host) || dnsDomainIs(host, ".gsb.lan")) isInNet(host, "172.16.0.0", "255.255.255.0") || isInNet(host, "127.0.0.1", "255.255.255.255")) { return "DIRECT"; } else { return "PROXY 172.16.0.2:8080"; } } Redémarrer le service apache : #service apache2 restart Vous n'avez plus qu'à configurer les navigateurs pour qu'ils détectent les paramètres de configuration proxy pour le réseau. Les utilisateurs passeront donc obligatoirement par le proxy sans s'en apercevoir. 10 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Squidguard Définition Squidguard est un plugin qui se greffe sur un serveur Squid. Il permet la gestion plus poussée des ACL par le biais notamment de la gestion de blacklists compilées. SquidGuard permet également de gérer des accès horaires, des conditions plus poussées et la modification de la page par une autre page. Installation et configuration Nous allons installer le plugin Squidguard à notre serveur Squid afin de contrôler les accès à certains sites web. #aptitude install squidguard Le fichier de configuration de Squidguard se trouve dans /etc/squidguard/ déplacez le dans /etc/squid3/ : #mv /etc/squidguard/squidGuard.conf /etc/squid3/squidGuard.conf Voici un exemple de configuration du fichier squidGuard.conf, dans celui-ci nous pouvons paramétrer les horaires d'accès au web, où Squidguard va chercher sa base de données de liste noire et blanche, ainsi que définir des acls d'accès : #vim /etc/squid3/squidGuard.conf # # CONFIG FILE FOR SQUIDGUARD # # Caution: do NOT use comments inside { } # dbhome /var/lib/squidguard/db logdir /var/log/squid3 # # TIME RULES: # abbrev for weekdays: # s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat time workhours { weekly mtwhf 08:00 - 18:00 date *-*-01 08:00 - 18:00 } # # SOURCE ADDRESSES: # src admin { ip } 172.16.0.2 src users { ip } 172.16.64.0/24 # # DESTINATION CLASSES: # dest good { } 11 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 dest local { } dest porn { domainlist porn/domains urllist porn/urls } dest adult { domainlist adult/domains urllist adult/urls } dest violence { domainlist violence/domains urllist violence/urls } dest publicite { domainlist publicite/domains urllist publicite/urls } # # ACL RULES: # acl { admin { pass any } users { pass !porn !adult !publicite !violence redirect http://s-proxy/interdiction.html } else { pass any } default { pass local none redirect http://s-proxy/cgibin/blocked.cgi?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u } } Enfin, il faut configurer squid3 pour qu'il invoque squidGuard en ajoutant ces lignes à la fin de /etc/squid3/squid.conf : redirect_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf redirect_children 10 Ensuite nous téléchargeons la base de données de l'université de Toulouse : ftp://ftp.univtlse1.fr/blacklist/ nous allons choisir l'archive qui les contient toutes : ftp://ftp.univtlse1.fr/blacklist/blacklists.tar.gz et les installer là où c'est prévu, dans/var/lib/squidguard/db Dans le fichier configuration de Squidguard nous pouvons ajouter des "destinations" et les interdire : dest porn { domainlist porn/domains urllist porn/urls } users { pass !porn !adult !publicite !violence redirect http://s-proxy/interdiction.html } 12 Quentin Baptier Proxy, Squid, Squidguard et Kerberos 2014-2015 Enfin on attribue les droits en écriture et lecture à l'utilisateur proxy sur la base de données de Squidguard : #cd /var/lib/squidguard/db/ #chown -R proxy:root db Enfin nous compilons la base de données de SquidGuard : #squidGuard -C all Et nous redémarrons le service squid #service squid3 restart Automatisation de l'installation de la solution via Ansible Afin de nous faciliter l'installation et la configuration de l'infrastructure nous allons automatiser cela avec Ansible installé sur la machine s-adm, à l'aide de script en yml et bash et des fichiers de configurations préconfiguré (smb.conf, nsswitch.conf, squid.conf, krb5.conf, squidGuard.conf). Test Nous effectuerons les tests à partir d'une machine située dans le réseau N-user en 172.16.64.0/24. Un utilisateur se connectera à sa session Windows sur un poste, il utilisera un navigateur internet. Tout d'abord nous tenterons d'accéder à un site Internet qui se situe dans une liste noir. Puis nous pourrons tester la mise en cache du serveur Proxy en téléchargement un premier fichier et en calculant le temps de téléchargement. Puis on re-téléchargera le même fichier, et on comparera les temps de téléchargement. Cela va permettre de voir l'efficacité de la mise en cache du serveur proxy. Conclusion Grâce à nos tests nous avons pu voir que la solution est parfaitement fonctionnelle et améliore la vitesse des accès web grâce à la mise en cache des pages web par Squid ainsi que le contrôle d'accès au contenu avec la mise en place de Squidguard et listes noires. 13