Proxy SQUID sous Debian Définition : Un serveur proxy, appelé en français serveur mandataire est une architecture client-serveur qui a pour fonction de relayer des requêtes entre une fonction cliente et une fonction serveur (couches 5 à 7 du modèle OSI). (source wikipédia) Les serveurs proxys sont notamment utilisés pour assurer les fonctions suivantes : accélération de la navigation : mémoire cache, compression de données, filtrage des publicités ou des contenus lourds (java, flash); la journalisation des requêtes (ou le concept d'historique des événements : logging) ; la sécurité du réseau local (par exemple empêcher de naviguer dans des sites interdits) ; le filtrage (par exemple le blocage, par certaines pays, de sites perturbateurs) et l'anonymat (la remonté vers un internaute devient compliquée).
Types de proxy Il existe deux types de proxy : Un proxy normal est un type de proxy qui nécessite que l'application cliente soit configurée explicitement pour utiliser ce serveur à travers son URL. Dans ce cas, le client envoie ses requêtes au proxy qui se charge par la suite de trouver les informations sollicitées par le client et de les lui transmettre, une fois celles-ci obtenues. Un proxy transparent, ce type de proxy agit dans la totale transparence (ignorance) des applications clientes. Dans une cette situation les requêtes des clients sont interceptées et traitées par le serveur proxy
Squid Le serveur proxy Squid est le serveur mandataire open-source le plus utilisé. Néanmoins, il existe le logiciel SquidGuard qui propose un filtrage très puissant d'accès au web. Fonctionnement de Squid Squid est un service (démon) qui écoute, par défaut, sur le port 3128. Une fois lancé, il génère 5 processus fils par défaut. Remarque L utilisation de proxy sur https n a aucun intérêt puisque les données échangées sont chiffrées et ne peuvent être mis en cache. En plus, https authentifie au moins le serveur interrogé, de manière à ce que le client s assure qu'il s'adresse au bon serveur choisi. Rien ne pourrait garantir cette certitude, si la connexion passe par un intermédiaire (proxy).
Installation de Squid : Pour installer Squid tapez dans un terminal en tant que root : root@mars:~# aptitude install squid La configuration de Squid se fait au niveau du fichier : /etc/squid/squid.conf Ensuite, on enlève les commentaires aux lignes suivantes : http_port 3128 Le serveur proxy utilise par défaut le port 3128 cache_dir ufs /var/spool/squid 100 16 256 100 MB est la valeur par défaut, il s agit de la quantité d'espace disque (Mo) à utiliser dans le répertoire /var/spool/squid. Nous pouvons changer cette valeur en fonction de notre configuration. Si vous voulez que Squid puisse utiliser le lecteur de disque entier, soustraire 20% et utiliser cette valeur. «16» est la valeur par défaut du nombre de sous-répertoires de premier niveau qui sera créé dans le répertoire /var/spool/squid. 256 est la valeur par défaut du nombre de sous-répertoires de deuxième niveau qui sera créée sous chaque répertoire de premier
niveau. cache_log /var/log/squid/cache.log visible_hostname mars.test.local cache_mgr webmaster@test.local acl CONNECT method CONNECT #ligne 1 acl block url_regex -i "/etc/squid/block.txt" #ligne 2 http_access deny block #ligne 3 acl ip_internal src 10.11.12.0/24 #ligne 4 http_access allow ip_internal #ligne 5 Fichier de journalisation du cache. C'est là où des informations générales sur le comportement de votre cache s enregistrent. C est le nom de la machine qui sera présenté dans le cas d un message d erreur. Adresse e-mail de gestionnaire de cache local qui recevra le courrier électronique si le cache meurt. La valeur par défaut est «webmaster». toutes ces lignes sont à ajouter à la fin du fichier de configuration : Ligne 1 : autorisation de l acl CONNECT à utiliser la méthode CONNECT Ligne 2 : Utilisation des expressions régulières admettant comme paramètres des mots contenus dans le fichier «/etc/squid/block.txt» Ligne 3 : blocage des URL des sites contenant des occurrences de mots contenus dans le fichier «/etc/squid/block.txt» Ligne 4 : construction de l acl nommée ip_internal pour toutes les machines essayant de se connecter vers le proxy et appartenant au réseau 10.11.12.0/24. Ligne 5 : autorisation des clients appartenant au réseau 10.11.12.0/24 à se connecter au proxy en utilisant le protocole http. Le fichier /etc/squid/squid.conf doit ressembles à celui-ci login as: root root@localhost's password: Linux mars.test.local 3.2.0-4-686-pae #1 SMP Debian 3.2.60-1+deb7u1 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Jul 29 22:48:29 2014 from 10.0.2.2 root@mars:~# cd /etc/squid/ root@mars:/etc/squid# vi squid.conf root@mars:/etc/squid# cat squid.conf grep -v "^#" grep -v "^$" acl lan src 10.11.12.0/24 acl all src all acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl SSL_ports port 443 # https acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync 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 Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT acl block url_regex -i "/etc/squid/block.txt" http_access deny block http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny!safe_ports http_access deny CONNECT!SSL_ports http_access allow lan http_access allow localhost http_access deny all http_reply_access allow all icp_access allow all http_port 3128 hierarchy_stoplist cgi-bin? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_dir ufs /var/spool/squid 100 16 256 access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log emulate_httpd_log off refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/ \?) 0 0% 0 refresh_pattern (Release Packages(.gz)*)$ 0 20% 2880 refresh_pattern. 0 20% 4320 visible_hostname mars.test.local acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9] upgrade_http0.9 deny shoutcast acl apache rep_header Server ^Apache broken_vary_encoding allow apache extension_methods REPORT MERGE MKACTIVITY CHECKOUT cache_mgr bourichekhalid@test.local cache_effective_user proxy cache_effective_group proxy dns_timeout 1 minutes dns_nameservers 10.0.2.2 10.11.12.1 hosts_file /etc/hosts coredump_dir /var/spool/squid
A la fin de la configuration on redémarre le service squid On édite le fichier «/etc/squid/block.txt» pour y inscrire les mots à bloquer par le serveur proxy On remarque qu un nouveau utilisateur proxy est ajouté lors de l installation de squid Maintenant on va attribuer le droit de possession à l utilisateur proxy et au groupe proxy pour le fichier : /etc/squid/block.txt
Maintenant nous avons installé notre service SQUID normale, c'est-à-dire que le client possède le choix de l utiliser ou non, cela dépend évidemment de la configuration de son navigateur Configuration des navigateurs : En cherchant le mot : toto, titi ou tata sur google, le message suivant s affiche :
De la même façon sur mozilla Firefox
De la même façon sur mozilla Google chrome : Au niveau des paramètres avancés : Configuration d un proxy transparent Un proxy transparent ne laisse pas le choix au client de décider s il doit l utiliser ou non, c est au niveau du serveur que cette décision est prise. La configuration au niveau serveur se fait comme suit : Au niveau du fichier /etc/squid/squid.conf, ajoutez le mot transparent à la fin de la ligne : http_port 3128
Redémarrer ensuite votre service Vous devez, ensuite, mettre en place une règle iptables qui va obliger le trafic de passer par le service SQUID qui écoute sur le port 3128 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --todestination 10.11.12.1:3128 NB : Dans le cas d un proxy transparent, aucune configuration du navigateur du client n est requise. Vous pouvez tester aisément, comme vous l avez dèja fait au niveau d un proxy normal, le blocage de l un des mots du fichier /etc/block.txt Remarque : il est commode d utiliser vos règles iptables dans un fichier :