Squid, mise en place d'un proxy ******************************* Cette installation est réalisée sur une debian6 Installation basique ==================== Sur Debian comme souvent un petit tour dans apt permet de trouver rapidement ce qu'on cherche :: apt-cache search squid nous allons donc réaliser les étapes suivantes: * installation de squid * sauvegarde du fichier de conf (squid.conf) * créer un fichier de conf ne comportant que l’essentiel (on supprime commentaire et lignes inutiles) :: apt-get install squid apt-get install sudo cd /etc/squid mv squid.conf squid.conf.old cat squid.conf.old | grep -v ^# | grep -v ^$ > squid.conf Si votre machine est dans un domaine et va jouer le rôle du proxy du domaine il: * ajouter une déclaration acl (à la suite des autres déclarations acl) :: acl VotreDomaine src 192.168.0.0/255.255.255.0 * et dire que le domaine a accès à internet (avant la dernierè ligne "http_access deny all") :: http_access allow VotreDomaine Si votre machine ne fait pas partie d'un domaine mais juste d'un simple réseau il faut remplacer la ligne :: http_access deny all par :: http_access allow all Redémarrer le serveur pour prendre en compte les modifications :: /etc/init.d/squid restart Vous pouvez faire un test côté client en configurant un proxy: * ip de votre machine debian proxy * port 3128 .. figure:: data/20120429_01.png vous pouvez maintenant utilisé votre navigateur paramétré avec le proxy pour aller sur internet via votre proxy vous pouvez voir les logs de la connexion en réalisant :: cd /var/log/squid ls -ltr .. note:: pour avoir accès aux serveurs internes soit vous modifiez la configuration proxy de votre client soit vous ajoutez dans le fichier squid.conf la ligen suivante: append_domain .mondomaine.net .. note:: vous pouvez changer le port 3128 en modifiant la ligne dans squid.conf "http_port 3128" par par exemple "http_port 8080" * les « acl » (Access Control List) permettent de définir, par exemple, une plage d'adresses IP, celles qui constituent notre réseau local, par exemple une acl regroupant tout les poste en 192.168.0.??? :: acl reseau_local src 192.168.0.0/24 * les « http_access » (restrictions) qui définissent l'autorisation ou l'interdit, pour une acl donnée.Par exemple autoriser l'acl reseau_local à avoir accès à internet :: http_access allow reseau_local Optimisation ============ Modification de la taille du cache ---------------------------------- Pour cela il faut ajouter ou modifier dans **squid.conf** :: cache_dir ufs /var/spool/squid 1024 256 256 Voici la signification des différentes valeurs : * Type de stockage * Emplacement du cache * Taille totale du cache en MB * Nombre de répertoires de niveau 1 et de niveau 2 Ensuite, il faut initialiser le cache avec ces commandes : :: /etc/init.d/squid stop squid -z /etc/init.d/squid start Création d'un cache supplémentaire ---------------------------------- Création du répertoire sur le deuxième disque (ex : /sdb1) :: mkdir /sdb1/squid Affectation des mêmes droits que le répertoire du premier cache "/var/spool/squid" créé lors de l’installation :: chmod 750 /sdb1/squid chown proxy.proxy /sdb1/squid Il faut ajouter ou modifier dans **squid.conf** :: cache_dir ufs /var/spool/squid 1024 256 256 Puis :: /etc/init.d/squid stop squid -z /etc/init.d/squid start Optimisation ------------ Vous pouvez modifier certains paramètres du fichier **squid.conf** :: cache_mem 128 MB maximum_object_size 15 MB .. attention:: maximum_object_size 15 MB indique la taille maximal des objects en cache SquidGuard ========== Squidguard permet de filtrer plus finement ce qui ce passe sur le proxy. Son principale utilisation permet: * de bloquer des sites depuis une base d'url commune (site pornographique, youtube, ...) * bloquer l'accès à internet suivant des plages horaires Installation ------------ comme souvent un petit tour dans apt permet de trouver rapidement ce qu'on cherche :: apt-cache search squidguard :: apt-get install squidguard apt-get install sudo .. hint:: si vous souhaitez installer squid et squidguard, un simple **apt-get** **install** **squidguard** suffit une fois squidGuard installer il faut: * télécharger et installer la liste des sites sensibles * modifier la configuration de squid * modifier la configuration de squidGuard :: cd wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz tar zxvf blacklists.tar.gz -C /var/lib/squidguard/db/ cd /var/lib/squidguard/db mv blacklists/* . chown -R proxy:proxy /var/lib/squidguard/db/* find /var/lib/squidguard/db -type f | xargs chmod 644 find /var/lib/squidguard/db -type d | xargs chmod 755 modifier **/etc/squid/squid.conf** en ajoutant :: redirect_program /usr/bin/squidGuard redirect_children 10 épuration du fichier squidGuard.conf :: cd /etc/squid/ mv squidGuard.conf squidGuard.conf.save cat squidGuard.conf.save | grep -v ^# | grep -v ^$ > squidGuard.conf voici un exemple de fichier squiGuard.conf :: dbhome /var/lib/squidguard/db logdir /var/log/squid time workhours { weekly mtwhf 08:00 - 16:30 date *-*-01 08:00 - 16:30 } # DESTINATION CLASSES: dest good { } dest local { } dest adult { domainlist adult/domains urllist adult/urls expressionlist adult/expressions redirect http://fr.barbie.com } acl { default { pass !adult redirect http://fr.barbie.com } } puis on va construire la base de squidguard :: sudo -u proxy squidGuard -C all mise à jours auto de la base squidGuard --------------------------------------- un simple bash et contrab peut faire l'affaire le fichier /root/bin/squid_blacklist_update.sh :: TARGET=/var/lib/squidguard/db/blacklists cd $TARGET || exit # only run if squidGuard is active! [ "`ps auxw | grep squid[G]uard`" ] || exit rsync -az squidguard.mesd.k12.or.us::filtering $TARGET for DIR in `ls $TARGET` do if [ -f $DIR/domains.include ] then TMP=$RANDOM cat $DIR/domains $DIR/domains.include | sort | uniq > $DIR/domains.$TMP mv -f $DIR/domains.$TMP $DIR/domains fi if [ -f $DIR/urls.include ] then TMP=$RANDOM cat $DIR/urls $DIR/urls.include | sort | uniq > $DIR/urls.$TMP mv -f $DIR/urls.$TMP $DIR/urls fi done /usr/bin/squidGuard -c /etc/squid/squidGuard.conf -C all # /usr/sbin/squidGuard -c /etc/squid/squidGuard.conf -u chown -R proxy:proxy $TARGET chown -R proxy:proxy /var/log/squid/squidGuard.log sleep 5s /usr/bin/killall -HUP squid éditer crontab :: crontab -e et on ajoute :: 00 5 * * * sh /root/bin/squid_blacklist_update.sh Identification ============== Il est possible d'ajouter un système d'identification pour avoir accès au proxy. Le plus simple utilise un simple fichier user/password ou bien via l'ad Identification simple --------------------- :: apt-get install apache2.2-common .. note:: il faut le common d'apache pour avoir accès à la comme htpasswd :: touch /etc/squid/users htpasswd -b /etc/squid/users exemple :: htpasswd -b /etc/squid/users user1 azerty htpasswd -b /etc/squid/users user2 uiopqs htpasswd -b /etc/squid/users user3 dfghjk On peut tester le système d'identification :: /usr/lib/squid/ncsa_auth /etc/squid/users Il faut par la suite rentrer user password nous allons modifier le fichier **squid.conf** afin * d'ajouter les commandes d'identification * d'ajouter une acl d'identification * d'ajouter un http_access si l'identification est réussi :: auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours acl users proxy_auth REQUIRED http_access allow all users .. note:: il faut mettre les auth_param en haut du fichier, acl à la fin des acl et remplacer http_access allow all par http_access allow all user Identification via AD --------------------- l'installation et la configuration est plus complexe :: apt-get install krb5-user krb5-config samba-common samba winbind sudo modifier le fichier /etc/krb5.conf :: [libdefaults] default_realm = ADIMCOR.EU dns_lookup_realm = false dns_lookup_kdc = false [realms] ADIMCOR.EU = { kdc = 192.168.0.1 kdc = 192.168.0.2 admin_server = 192.168.0.1 default_domain = ADIMCOR.EU } [domain_realm] .adimcor.eu = ADIMCOR.EU adimcor.eu = ADIMCOR.EU [logging] default = FILE:/var/log/krb5.log kdc = FILE:/var/log/krb5kdc.log admin-server = FILE:/var/log/krb5adm.log [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } .. note:: les kdc représente les contrôleurs de domaines. admin_server correspond au contrôleur « Maître d'opérations » avec les 5 rôles « FSMO » on va essayer d'obtenir un ticket kerberos pour un utilisateur de l'AD :: # kinit -V user1@ADIMCOR.EU Password for user1@ADIMCOR.EU: Authenticated to Kerberos v5 .. hint:: la commande klist permet de visualiser la liste des tickets On va par la suite modifier le fichier /etc/samba/smb.conf :: [global] workgroup = ADIMCOR realm = ADIMCOR.EU security = ADS password server = 192.168.0.1 192.168.0.2 client use spnego = yes client ntlmv2 auth = yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 announce version = 4 announce as = Poste XP dns proxy = No idmap uid = 167771-335549 idmap gid = 167771-335549 winbind use default domain = Yes invalid users = root et aussi le fichier /etc/nsswitch.conf :: passwd: compat winbind group: compat winbind shadow: compat hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis :: chmod -R 777 /var/run/samba/winbindd_privileged /etc/init.d/winbind restart /etc/init.d/samba restart Intégration au domaine :: net ads join -U modification du fichier /etc/squid/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 acl passwordad proxy_auth REQUIRED http_access allow all passwordad cache_effective_group root L'authentification est fournir par les infos user / password (sans domaine) Visualisation des logs du proxy =============================== Plusieurs logiciels existent qui excellent dans ce travail de synthèse : Calamaris, Webalizer, Squid-Log-Analzer, SARG,…. A priori il n'y a pas de sonde nagios ... il faudrait voir pour en écrire une pour SARG :: apt-get install sarg éditer le fichier /etc/squid/sarg.conf :: language French access_log /var/log/squid/access.log il faut lancer régulièrement sarg pour générer les pages en plaçant dans la crontab la ligne suivante :: /usr/bin/sarg -n -o /home/squid/logs/ -i il faudra configurer un serveur web pour visualiser les pages générées il faudrait voir pour avoir un outil qui nous donne ce qui se passe en instantanée