Mise en place et configuration d’un Proxy avec Squid

I. Présentation

Ce serveur Proxy permet de filtrer le trafic réseau et de garder en cache les pages internet visitées par les utilisateurs dans le but de rendre la navigation internet plus rapide. Le serveur Proxy sera configuré de manière à autoriser seulement la navigation web (port 80), la navigation web sécurisée (port 443) et le transfert FTP (port 21) pour les postes clients étant uniquement dans le réseau 172.16.0.0/16.

II. Schéma

schema-proxy

III. Pré-requis

- Un PC avec deux cartes réseaux
- Ubuntu server
- Un routeur
- Un switch
- Un ou des PC clients [Passerelle : 172.16.255.254 ; Proxy déclaré dans le navigateur]

Note : Utilisez Nano si vous n’avez pas Vim comme éditeur de texte.

IV. Configuration des deux interfaces réseaux du serveur

- Accéder au fichier :

vim /etc/network/interfaces

- Contenu à avoir dans le fichier :

# Interface de loopback
auto lo
iface lo inet loopback
# Interface du Proxy - Coté LAN – Eth0
allow-hotplug eth0
iface eth0 inet static
address 172.16.255.254
netmask 255.255.0.0
network 172.16.0.0
broadcast 172.16.255.255
dns-nameservers 8.8.8.8 # DNS Google

# Interface du Proxy - Coté Internet – Eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.1.254
netmask 255.255.255.0
gateway 192.168.1.1

V. Redémarrer le service réseau

/etc/init.d/networking restart

VI. Installation de Squid

apt-get install squid

VII. Sauvegarde du fichier de configuration de Squid

cd /etc/squid/squid.conf
mv squid.conf squid.conf.defaut

VIII. Créer fichier de configuration vide

vim squid.conf

IX. Configuration du serveur Proxy [/etc/squid/squid.conf ]

Ce fichier est donc vide puisque nous venons de le créer. Saisissez (ou copier) les lignes suivantes en les adaptant à votre réseau.

# Squid a besoin de savoir le nom de la machine, notre machine s’appelle srv-proxy, donc :
visible_hostname srv-proxy

# Par défaut le proxy écoute sur ses deux interfaces, pour des soucis de sécurité il faut donc le
# restreindre à écouter sur l’interface du réseau local (LAN)
http_port 172.16.255.254:3128

# Changer la taille du cache de squid, changer la valeur 100 par ce que vous voulez (valeur en Mo)
cache_dir ufs /var/spool/squid 100 16 256

#################################### ACL ####################################

acl all src all # ACL pour autoriser/refuser tous les réseaux (Source = All) – ACL obligatoire
acl lan src 172.16.0.0/16 # ACL pour autoriser/refuser le réseau 172.16.0.0
acl Safe_ports port 80 # Port HTTP = Port 'sure'
acl Safe_ports port 443 # Port HTTPS = Port 'sure'
acl Safe_ports port 21 # Port FTP = Port 'sure'
############################################################################

# Désactiver tous les protocoles sauf les ports sures
http_access deny !Safe_ports

# Désactiver l'accès pour tous les réseaux sauf les clients de l'ACL Lan
# deny = refuser ; ! = sauf ; lan = nom de l’ACL à laquelle on fait référence.
http_access deny !lan

# Port utilisé par le Proxy :
# Le port indiqué ici, devra être celui qui est précisé dans votre navigateur.
http_port 3128

X. Redémarrez le service Squid

service squid restart

XI. Les logs du serveur

En ce qui concerne les logs du serveur Proxy, ils sont enregistrés dans le fichier access.log se trouvant dans /var/log/squid/

XII. Compléter la configuration

Si vous souhaitez compléter la configuration ci-dessous, voici quelques exemples possibles :

A. Bloquer certains noms de domaine

# Déclarer un fichier qui contient les domaines à bloquer
acl deny_domain url_regex -i "/etc/squid/denydomain.txt"

# Refuser les domaines déclarés dans le fichier définit dans l'ACL deny_domain
http_access deny deny_domain

Il ne vous reste plus qu’à créer le fichier denydomain.txt et inscrire les noms de domaine que vous désirez bloquer. Ce fichier doit être rempli de la manière suivante (un par ligne) :

domaine1.fr
domaine2.com

B. Demander l’authentification des utilisateurs pour pouvoir accéder au Proxy

Pour mettre en place le système d’authentification, Squid utilise la méthode htpasswd disponible avec le paquet apache2-utils, il faut donc dans un premier temps installer ce paquet :

apt-get install apache2-utils

Ensuite, il faut créer un fichier où seront déclarés les utilisateurs et leur mot de passe :

vim /etc/squid/utilisateurs

Vous pouvez désormais déclarer des utilisateurs dans ce fichier grâce à la commande suivante :

htpasswd –b /etc/squid/utilisateurs nom_utilisateur mot_de_passe
# Exemple htpasswd –b /etc/squid/utilisateurs neoflow informatique

Le fichier utilisateurs s’est donc remplit sous la forme : nom_utilisateur:mot_de_passe

A noter que le mot de passe est crypté.

Avant d’indiquer à Squid qu’il doit utiliser ce système d’authentification, nous allons voir si celui fonctionne :

/usr/lib/squid/ncsa_auth /etc/squid/utilisateurs
# Sur la ligne tapez le nom de votre utilisateur puis votre mot de passe (séparé par un espace)
neoflow informatique

Si vous avez saisi les bonnes informations, le programme devrait vous retourner « OK », sinon « Err »

Il ne reste plus qu’à indiquer à Squid qu’il doit utiliser ce programme d’authentification, complétez le fichier squid.conf :

# On déclare le programme qui gère l'authentification :
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/utilisateurs

# Grâce à cette ACL, le Proxy demandera une authentification
acl utilisateurs proxy_auth REQUIRED

# Refuser l'accès à tous les utilisateurs sauf ceux du fichier Utilisateurs
http_access deny !utilisateurs

Pensez à redémarrer le service Squid. Pour finir, il ne vous reste plus qu’à essayer de naviguer sur internet, une fenêtre d’authentification devrait s’ouvrir.

C. Bloquer certaines extensions

Il est possible de déclarer des ACL pour bloquer différents types d’extensions et ainsi alléger le cache et la rapidité de navigation ou tout simplement pour restreindre les utilisateurs. Pour se faire :

# Bloquer les fichiers AVI :
acl extension_avi url_regex –i \.avi$
http_access deny extension_avi

XIII. Informations sur « url_regex »

Lorsque l’on met cette option dans une ACL, cela permet de rechercher une chaîne de caractères contenu dans l'URL. A noter que l’url_regex est sensible à la casse (majuscules / minuscules).

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5553.Voir tous les posts

9 thoughts on “Mise en place et configuration d’un Proxy avec Squid

  • Bonsoir x)

    j’ai le problème suivant :

    J’ai installé Squid sous Debian 7.9, mon PC sous Lubuntu 14.04.3 charge correctement tout.
    Quant à mes colocataires sous Windows 10, ils ont les images qui ne chargent pas, et les vidéos n’apparaissent pas… Juste un cadre noir au lieu de la vidéo… :/

    Pourriez-vous m’aider ?

    Répondre
  • Bonjour j’ai bien suivi les étapes du début à la fin sauf que je n’arrive pas à me connecter sur internet sur ma machine client à travers mon serveur proxy autant plus que ce dernier est bien configuré et est reconnu dans ma machine client (cad bien inséré l’adresse et le port de mon proxy sur le navigateur) . j’implore votre aide svp!!!

    Répondre
  • Tres bon tutoriel mais semble pour ma part incomplet. Comment les paquets seront ils relayés du port ETH1 vers le port ETH0. Voici quelques commandes supplementaires:

    NB: ces commandes doivent etre executées par l’utilisateur « root »

    #relayer les requêtes locales vers internet

    echo 1 > /proc/sys/net/ipv4/ip_forward

    #S’assurer que les requêtes du réseau local ne sortent pas avec des IPs privées

    iptables -t nat -A POSTROUTING –s 172.16.0.0/16 -o eth1 -j MASQUERADE

    #Rediriger les requêtes sur le port 80 vers le port 3128 du proxy

    iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 3128

    Répondre
    • merci pour l’amelioration mais comment rendre appliquer ces regles au demarrage
      #S’assurer que les requêtes du réseau local ne sortent pas avec des IPs privées

      iptables -t nat -A POSTROUTING –s 172.16.0.0/16 -o eth1 -j MASQUERADE

      #Rediriger les requêtes sur le port 80 vers le port 3128 du proxy

      iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 3128

      Répondre
  • une petite erreur
    cd /etc/squid/squid.conf à remplacer par cd /etc/squid

    un grand merci pour votre tuto

    pour squid3 remplacer les …/squid/ par squid3

    Répondre
  • bonjour,
    très bon tutoriel ,novice dans le monde UNIX ,je souhaiterais ajouter à mon proxy
    lister les @mac des postes connectés avec l’url qui visite
    et si possible faire un portail captif, car si j’ai bien compris je serai obligé de le paramétrer dans IE
    Merci pour votre aide

    Répondre
  • Bonjour à tous merci pour ce tutoriel qui est bien fait malheureusement j’ai un souci concernant le HTTPS le proxy fonctionne bien dans mon fichier access.log j’aperçois bien les URL en HTTP mais quand un utilisateur souhaite se connecter sur un site en HTTPS il me dit

    « Echec de la connexion sécurisé »
    avec le code erreur « SSL_ERROR_RX_RECORD_TOO_LONG »

    voila si quelqu’un peut me dire se qu’il se passe merci à tous

    Répondre
  • « deny » etant une commande cela pose probleme lors de l’utilisation de l’acl deny_domain
    a la lecture de la ligne http_access deny deny_domain le deny de deny_domain est considéré comme une commande au lieu d’etre considéré comme le nom de l’acl.
    utiliser un autre nom resoudra le probleme…

    Répondre
  • /usr/lib/squid/ncsa_auth /etc/squid/utilisateurs
    # Sur la ligne tapez le nom de votre utilisateur puis votre mot de passe (séparé par un espace)
    neoflow informatique

    je utilise squid3
    impossible de trouver ncsa_auth

    Répondre

Répondre à mick Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.