PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Proxy transparent : mise en place de Squid sur PfSense

mardi 14 décembre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment mettre en place un serveur proxy transparent avec Squid sur un pare-feu PfSense, avec la prise en charge du HTTPS.

L'objectif de la mise en place de ce proxy transparent, c'est de permettre l'accélération de la navigation Internet grâce à la mise en cache, mais aussi le filtrage des sites Internet, sans aucune configuration sur les postes clients. Pour suivre ce tutoriel, vous avez besoin d'un accès à Internet, d'un serveur PfSense avec deux interfaces réseau (LAN et WAN), et au minimum un poste client connecté au LAN afin de tester le proxy transparent.

Dans cette configuration, le proxy transparent (192.168.100.1/24) fait office de passerelle pour les machines du réseau local.

Proxy transparent avec Squid et PfSense

Note : lors de la mise en place d'un serveur proxy, qu'il soit transparent ou non, pensez à le préciser dans la charte informatique de votre entreprise, notamment pour l'aspect filtrage.

Il s'agit d'un premier tutoriel sur Squid en mode proxy transparent. Un second tutoriel, qui est une suite de celui-ci, concernera la configuration de Squid Guard pour aller plus loin dans le filtrage.

Si la notion de Proxy (et de Reverse Proxy) est floue pour vous, je vous invite à lire mon article "Les serveurs Proxy et Reverse Proxy pour les débutants" ou à regarder la vidéo intégrée à ce même article.

II. Installer de Squid sur PfSense

Connectez-vous sur l'interface d'administration de PfSense afin d'installer le paquet "squid". Pour cela, sous "System", cliquez sur "Package Manager" et ensuite sur l'onglet "Available Packages".

System > Package Manager > Available Packages

Recherchez "squid" et cliquez sur le bouton "Install" à droite, au niveau de la ligne correspondante.

Proxy Squid PfSense

À la fin de l'installation, le message "pfSense-pkg-squid installation successfully completed" doit s'afficher.

Le paquet étant installé, on peut passer à la configuration.

III. Configurer Squid (Proxy) sur PfSense

La configuration de Squid s'effectue via le menu "Services" :

Services > Squid Proxy Server

La configuration est découpée en plusieurs onglets. Afin de pouvoir activer Squid, il faut configurer le cache local sinon le démarrage du processus Squid échouera. Cliquez sur l'onglet "Local Cache". Comme pour chaque section, nous retrouvons de nombreux paramètres... Pour le cache, j'attire votre attention sur ces options :

Que vous décidiez de modifier ou non l'un des paramètres de la section "Local Cache", vous devez cliquer sur le bouton "Save" en bas de la page.

Ensuite, cliquez sur l'onglet "General". Là encore, il y a de nombreuses options. Voici ce qu'il faut configurer à minima :

Descendez dans la page... et cochez l'option "Transparent HTTP Proxy" pour activer le mode proxy transparent pour le protocole HTTP. Pour l'activer pour le protocole HTTPS, il faudra cocher une autre option (nous en parlerons par la suite).

Dans le même esprit qu'au début de la configuration, sélectionnez "LAN" pour l'option "Transparent Proxy Interface(s)".

En configurant l'option "Bypass Proxy for these Source IPs", vous avez la possibilité de déclarer des adresses IP sources (ou un sous-réseau source) qui peuvent passer outre le proxy et accéder en direct à Internet. Dans le même esprit, l'option "Bypass Proxy for these Destination IPs" permet d'outrepasser le proxy pour certaines destinations.

Proxy transparent Squid sur PfSense

Pour le moment, laissez l'option "Enable SSL filtering" décochée.

Continuez de descendre dans la page... Activez les journaux comme ceci :

Ensuite, la section "Headers Handling, Language and Other Customizations" permet de configurer les messages Squid. Le champ "Visible Hostname" correspond au nom d'hôte qui peut s'afficher côté client, notamment sur les pages de blocage Squid, tout comme l'e-mail spécifié pour l'option "Administrator's Email". Pour les messages d'erreurs justement, précisez la langue française au niveau de l'option "Error Language".

Pour des raisons de sécurité, on va masquer les informations sur Squid, notamment la version, en cochant l'option "Suppress Squid Version". Ce qui donne :

Voilà, on est arrivé au bout de la page de configuration ! Cliquez sur "Save" pour appliquer cette nouvelle configuration.

IV. Tester le proxy transparent Squid

Pour tester le bon fonctionnement de notre proxy transparent HTTP, on peut tout simplement s'amuser à naviguer sur Internet. Pour que ce soit plus parlant, on va bloquer un nom de domaine.

Cliquez sur l'onglet "ACLs", toujours dans la configuration de Squid. C'est ici que vous pouvez déclarer les sous-réseaux autorisés à utiliser le proxy (Allowed Subnets) mais pour nous c'est implicite (souvenez-nous de l'option cochée précédemment). Pour autoriser une ou plusieurs adresses IP (ou sous-réseau) à passer outre les restrictions, renseignez l'option "Unrestricted IPs".

Ce qui m'intéresse pour ce test, c'est l'option "Blacklist" puisqu'elle permet d'indiquer un ou plusieurs domaines à bloquer. Pour ce test, il nous faut un site en HTTP (ce qui est de plus en plus "rare", enfin surtout au niveau des sites connus). J'ai pris le site "horizons21.fr", au hasard, et je l'ai ajouté comme ceci :

Ensuite, on sauvegarde la configuration... Puis, à partir d'un poste de travail situé sur le réseau local, on tente d'accéder au site horizons21.fr. Et là, on peut voir que ça ne fonctionne pas ! On peut voir qu'une page "Accès interdit" renvoyée par Squid s'affiche !

On peut aussi suivre les logs en temps réel côté Squid, via l'onglet "Real Time". On voit très bien nos requêtes à destination du site "horizons21.fr" depuis l'hôte 192.168.100.11 : c'est la preuve irréfutable que notre PC passe bien par le proxy transparent !

V. Configurer Squid en proxy transparent HTTPS (SSL Inspection)

C'est bien beau notre configuration, mais notre proxy transparent fonctionne seulement sur le protocole HTTP. Depuis quelques années maintenant, la tendance est au HTTPS (et on va pas s'en plaindre) alors c'est indispensable que l'on permette à notre proxy transparent de travailler le HTTPS.

Cela est un peu plus complexe qu'une simple case à cocher dans les options du proxy, car il faut faire ce que l'on appelle du SSL Inspection. Puisqu'un flux HTTPS est chiffré, le proxy ne peut pas seulement regarder les trames passer. En effet, pour chaque connexion, il doit déchiffrer le flux, l'inspecter puis le chiffrer à nouveau afin de l'acheminer : une tâche d'envergure et gourmande en ressources.

A. Créer l'autorité de certification PfSense

Pour commencer, il faut créer une autorité de certification sur notre pare-feu PfSense. Rendez-vous dans le menu "System" puis "Cert. Manager" et dans l'onglet "CAs". Cliquez sur "Add" et renseignez les différents champs : c'est tout simple.

Note : si vous avez une autorité de certification Active Directory, il doit être possible d'ajouter un certificat existant directement.

Vous obtenez une autorité de certification, comme la mienne nommée "CA-ITCONNECT" et qui existait déjà sur mon pare-feu, car je l'utilise pour le VPN client-to-site.

B. SSL Inspection avec Squid

Retournez dans la configuration de Squid, via le menu "Services". Cochez l'option "Resolve DNS IPv4 First" pour activer la résolution DNS en amont du filtrage, ce qui est recommandé lorsque l'on filtre le HTTPS (ce que l'on s'apprête à faire).

Ensuite, activez l'option "Enable SSL filtering". Pour le mode "SSL/MITM Mode", choisissez le mode "Splice All" : c'est le mode le moins contraignant à mettre en œuvre, car il ne nécessite pas de déployer le certificat de l'autorité de certification sur l'ensemble des postes clients. C'est aussi le mode recommandé lorsque l'on prévoit de déployer Squid Guard, ce qui sera le cas dans la seconde partie de ce tutoriel.

Remarque : si vous prenez l'autre mode, il faut exporter le certificat de la CA créée précédemment et le déployer sur toutes les machines qui vont passer par le proxy transparent.

Sélectionnez l'autorité de certification créée précédemment au niveau de l'option "CA".

PfSense - Squid SSL Inspection

Sauvegardez via le bouton en bas de page.

C. Tester l'accès à Internet

Maintenant, retournez sur votre poste de travail qui passe par le proxy puis tentez de naviguer sur un site en HTTPS. Vous allez très probablement obtenir le message d'erreur "SSL_ERROR_RX_RECORD_TOO_LONG". Pour résoudre cette erreur, il faut que l'on utilise notre proxy comme résolveur DNS (directement ou indirectement).

D. Ajuster les paramètres DNS

Pour ajuster les paramètres DNS et faire fonctionner le proxy transparent, il y a deux options :

Une fois que la configuration est effectuée, on retourne sur l'interface de configuration Squid.

E. ACL : bloquer un site HTTPS dans Squid

Comme toute à l'heure, on va retourner dans l'onglet "ACLs" au niveau de la section "Blacklist". Cette fois-ci, on va bloquer un domaine où le site tourne en HTTPS : "facebook.com", à tout hasard. Ce qui donne :

On sauvegarde et on tente d'accéder à Facebook... Voici le message que l'on obtient :

Même si ce message n'est pas très esthétique et fait plutôt penser à une erreur, il empêche bien l'accès au site facebook.com. L'erreur de certificat qui s'affiche est liée à l'utilisation de notre certificat de CA locale pour filtrer facebook.com, alors forcément la correspondance entre les deux ne peut pas être effectuée.

Voilà, le proxy transparent HTTP/HTTPS avec Squid sur un pare-feu PfSense est en place ! Rendez-vous demain pour la suite : l'ajout du paquet Squid Guard pour aller plus loin dans le filtrage, notamment l'utilisation d'une blacklist par catégorie.

En attendant, vous pouvez explorer encore un peu plus la configuration de Squid. Il y a notamment l'onglet "Authentication" qui permet de soumettre l'utilisation du proxy à authentification via la base locale, un serveur Radius voire un annuaire Active Directory. Quant à l'onglet "Traffic Mgmt", il permet de brider le téléchargement de fichiers au travers du proxy.

The post Proxy transparent : mise en place de Squid sur PfSense first appeared on IT-Connect.