Le logiciel Squid est certainement le logiciel serveur Proxy le plus répandu à l’heure actuelle, et sans doute un des plus performant. Avoir avoir vu dans ce billet ce qu’est un proxy et ses fonctions, nous allons maintenant nous intéresser à l’installation et à la configuration d’un serveur Proxy sous une distribution Linux.
INSTALLATION
Pour installer Squid sous Ubuntu ( ou Debian ) :
apt-get update && apt-get install squid
ou, pour Mandriva :
urpmi squid
Pour lancer ou arrêter le service squid :
/etc/init.d/squid start/stop
Le fichier de configuration de squid est /etc/squid/squid.conf On va en faire une copie avant de le modifier ( toujours à faire pour avoir un fichier sain sous la main ) :
cp /etc/squid/squid.conf /etc/squid/squid.conf.sauv
Si vous lancez Squid, vous obtenez un beau “failed”
Avant de pouvoir démarrer Squid, il faut indiquer le nom de la machine hôte dans le fichier de configuration de Squid. On ajoute la ligne visible_hostname votre_host . Le port par défault est 3128
Par mesure de sécurité, je vous suggère de créer un nouveau groupe et un nouvel utilisateur qui aura seul les droits pour lancer squid, afin d’éviter de le lancer en tant que root. Par exemple, nous créons le groupe “proxy” et l’utilisateur “proxy”.
groupadd proxy
useradd -d /e tc/squid -s /b in/bash -g proxy proxy
Et nous attribuons aux répertoires et fichiers de squid les permissions de “proxy”.
chown -R proxy:proxy /etc/squid /var/log/squid /var/spool/squid /usr/lib/squid /usr/sbin/squid /etc/init.d/squid
CONFIGURATION
Pour l’instant notre serveur Proxy est ouvert à tous et tout-le-monde peut s’y connecter. Nous allons donc restreindre l’accès au Proxy à notre réseau.
Pour cela, nous allons appliquer des règles ACL ( Access Control List ) Nous rajoutons les lignes suivantes au fichier de configuration :
#accès Internet pour notre réseau
acl mon_lan src 192.168.1.0/24
http_access allow mon_lan
A modifier bien-sûr en fonction de votre adresse réseau et de votre masque de sous-réseau.
Pour plus de clareté, je vous suggère de regrouper toutes vos règles sous la ligne
” INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS”
Voyons un peu plus en détail le fichier squid.conf :
##########
#port par défault
http_port 3128
#On indique le nom de machine de notre serveur
visible_hostname ma_machine
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
cache_mem 10 MB
#On utilise 750 Mo de cache pour le Proxy
cache_dir ufs /var/spool/squid 750 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
#Si vous utilisez squidguard, décommentez la ligne suivante
#redirect_program /usr/bin/squidGuard -c etc/squid/squidGuard.conf
#par défault
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#Règles ACL.
#Ne pas modifier l'ordre
#
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl manager proto cache_object
acl serveur src 192.168.0.1
#règles pour les principaux ports
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 20 # ftp-data
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # ssl
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
#On accepte les connections de localhost
http_access allow manager localhost
http_access deny manager
#On rejette les requêtes d'autres ports
http_access deny !Safe_ports
#On rejette les requêtes CONNECT de tous les ports autres que SSL
http_access deny CONNECT !SSL_ports
#INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#Règle pour les postes 10.0.0.250 et 10.0.0.252
#acl pc src 10.0.0.250 10.0.0.252
#On peut aussi indiquer une plage d'adresses
#acl bcp_de_pc src 10.0.0.2-10.0.0.200
#règle pour notre réseau
acl notre_lan src 192.168.0.0/24
#règle pour les url contenant le mot "games". L'option -i permet de ne pas respecter la casse.
acl jeux_interdits urlpath_regex -i games
http_access deny jeux_interdits
http_access allow purge localhost
http_access deny purge
#On accepte les requêtes des stations suivantes:
#http_access allow pc
#http_access allow bcp_de_pc
http_access allow notre_lan
#On accepte localhost
http_access allow localhost
#Enfin, on rejette tout le reste
http_access deny all
http_reply_access allow all
icp_access allow all
#Utilisateur et groupe responsables du lancement de squid:
cache_effective_user proxy
cache_effective_group proxy
#On rend notre proxy transparent
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
########
Lorsque Squid consulte les règles du fichier squid.conf, il commence par lire de la première à la dernière ligne. L’ordre des règles acl est donc très important. Par exemple:
acl LAN srd 192.168.0.0/24
http_access deny all
http_access allow LAN
Cela ne marchera pas, car on rejette tout avant d’autoriser notre réseau LAN à se connecter. L’important est de placer nos règles spécifiques, puis on rejette tout le reste en toute fin de fichier.
Une règle acl s’écrit de la forme :
acl aclname acltype string1 … | “file”
Ainsi le mot “string1″ désigne une ou plusieurs chaînes de caractère ou bien un fichier à placer entre “”. Ce fichier devar contenir une liste de mots, avec un mot par ligne. Ces chaînes étant sensibles à la casse, vous pouvez ajouter l’option -i pour rechercher majuscules et minuscules.
Parmi les acltype, citons
* src : adresse IP d’un poste ou d’un réseau, ou plages d’adresses séparés par un tiret
* dst : adresse ip d’un client distant. Squid effecturera une requête DNS sur le nom de domaine d’un client distant effectuant une requête sur le proxy, afin de déterminer son adresse ip ( dns-lookup )avant d’interpréter cette acl.
* srcdomain : nom de domaine source
* dstdomain : nom de domaine distant
* time : permet de spécifier des jours ou heures pour appliquer la règle. De la forme jour h:m.
Exemple : acl travail time L-F 7:30-17:30 : règle acl pour tous les jours de 7h30 à 17h30 sauf le samedi et dimanche
* url_regex : recherche dans l’url un mot ou expression spécifié
* urlpath_regex : recherche dans l’url ( sans l’extension protocole et le nom de domaine ) un mot ou expression
* port : spécifie un port ( sans blague! )
* proto : spécifie un protocole
* method : autoriser ou non une méthode telle que POST ou GET ( exemple : les formulaires php )
* browser : spécifie un navigateur ( MSIE, MOZILLA, OPERA, …)
* ident : spécifie un utilisateur
* proxy_auth : on autorise ou non un utilisateur valide à ce connecter. Le contrôle de validité se fait par un programme externe : ncsa. Exemple : acl mes_amis proxy_auth REQUIRED
* maxconn : spécifie le nombre de connections simultanées pour un utilisateur
* ARP : spécifie une adresse mac d’un client. Squid fera une requête ARP sur l’adresse ip du client pour trouver son adresse mac et la comparer avec celle spécifie dans la règle acl. Il est nécessaire de compiler le noyau avec l’option enable-arp-acl. Attention, ce client devra faire parti du même sous-réseau que le proxy, sinon squid ne pourra faire de requête ARP.
Exemple : acl ACLARP arp 11:12:13:14:15:16 ACLARP fait référence à l’adresse mac 11:12:13:14:15:16
Il ne vous reste plus qu’à autoriser ou non chaque règle à l’aide de http_access IMPORTANT ! Ne pas oublier en toute fin de placer la ligne “http_access deny all”, autrement squid considérera toutes les règles non autorisées comme permises par défault.
Puis vous relancez le serveur par la commande :
/etc/init.d/squid restart
Share This