Reverse Proxy avec pfsense

Ce tutoriel se place directement à la suite de mon tutoriel sur l’installation de pfsense sur un ESXi . Il a pour but de configurer le reverse proxy squid3 présent sur pfsense.

Un reverse proxy sert de relais aux utilisateurs souhaitant accéder à des services héberger sur un réseau interne. Vous allez donc pouvoir par exemple héberger plusieurs serveurs web derrière la seule IP public de votre pfsense tout en redirigeant les utilisateurs vers le bon serveur web en fonction du nom de domaine qu’il indiqueront dans leur navigateur.

Etape 1 : Installation du plugin squid3 sur pfsense

 

Pour installer le plugin squid3 sur pfsense rendez-vous dans la console d’administration puis System > Packages > Available Package.

Cherchez dans la liste « squid3 » est cliqué sur l’icone pour l’installer.

Une fois le plugin installer vous aurez assez aux nouvelles fonctions présente de squid3 dans l’onglet Services > Reverse Proxy.

Etape 2 : Configuration du reverse proxy

Pour configurer notre reverse proxy il faut aller dans  Services > Reverse Proxy sur notre pfsense.

Dans l’onglet général il faut définir l’interface réseau sur lequel le reverse proxy sera actif, selectionnez l’interface wan et activer le reserve en cochant la case « Enable HTTP reverse mode »

reverse1

On va maintenant ajouter un Web Servers en se rendant dans l’onglet Web Servers de squid3.

Sur squid3 un web servers correspond à l’adresse IP d’un serveur web vers lequel sera redirigé un sous domaine.

Nous allons donc en déclarer un.

reverse2

 

Cocher la case « Enable this peer » pour activer la configuration du web server

Peer Alias : Le nom de votre web server pour l’identifier

Peer ip : son adresse IP

Peer Port : Le port sur lequel le serveur web fonctionne (par défaut c’est le port 80)

Peer Protocol : Sélectionnez « HTTP » dans le menu déroulant

Cliquez sur « Save » pour ajouter le web server

reverse3

On va maintenant configurer le « Mappings » pour faire le lien entre notre adresse IP et le nom de domaine, permettant la redirection vers l’IP du serveur web en fonction du nom de domaine contacté par l’utilisateur.

Aller dans l’onglet « Mappings » de squid3 est cliqué sur l’icone ajouter.

reverse4


Cochez la case « Enable this URI »

Group name : Donnez un nom à votre URI

Group Description : … une description

Peers : dans la liste déroulante sélectionnez le web serveur que nous avons ajouté toute à l’heure.

URIs : Ajouter les urls pour laquelle le serveur web répondra. Vous pouvez en ajouter plusieurs.

Cliquez sur « save » pour valider votre configuration.

Etape 3 : Ouverture de flux

On ouvre maintenant les flux  à partir du web vers les machines locales sur le port 80 sinon le firewall bloquera les connexions qui passe par le reverse proxy :-)

Pour se faire aller dans firewall > rules et créer la règle suivante :

FWrules

 

Votre reverse proxy devrait maintenant être actif. Vous pouvez renouveler la manipulation pour chaque serveur web hébergé derrière le reverse proxy ;)

Pour configurer le reverse proxy en https je vous invite à suivre ce tutoriel.

Bug depuis la version 2.2.X de PFsense :

Si vous utilisez une version supérieur ou égal à la version 2.2.X de pfsense il faut autoriser le module squid à utiliser les ports < 1024.

Pour se faire il faut se rendre dans :
system -> Advenced -> system tunables

Ajouter une nouvelle règle avec ces valeurs :

tunable : net.inet.ip.portrange.reservedhigh
Description : PORT LIMIT
Value : 70

debug proxy squid

L’utilisation du reverse proxy sur les ports 80 et 443 n’est plus bloqué.
Merci à @Xifit pour son astuce :-)

52 réflexions sur « Reverse Proxy avec pfsense »

  1. Salut Ophyde

    Je voulais savoir si tu avais une config particulière sur ton firewall/Nat?

    Ouvres-tu des ports 80 et 443(https) pour que celà fonctionne?

    Merci par avance de ta reponse

    1. Bonjour Fasty !

      Oui j’ai ouvert le port 80 pour que cela fonctionne sur la carte côté WAN, par contre j’ai pas encore réussi à faire fonctionner le reverse proxy avec de l’https sur le 443.
      Tu as une idée de ton côté ? :)

    1. Dans le menu Firewall > NAT j’ai rien qui pointe vers le 80 par contre dans le menu Firewall > Rules j’ai ça :
      Fw rules
      J’ai ouvert mon port 80 à partir du web vers mes machines locales sinon le firewall va bloquer les connexions qui passe par le reverse proxy :-)

  2. Bonjour,

    Je me prépare à configurer un reverse-proxy pour la première fois.

    J’avais l’intention d’utiliser Apache avec mod_proxy pour faire ce travail quand, en cherchant de la doc sur le sujet, j’ai vu votre article sur Squid et Pfsense.

    Je me demandais s’il y avait un avantage à choisir une méthode par rapport à l’autre (Apache vs Squid) pour un reverse-proxy.

  3. le reverse proxy fonctionne t’il aussi pour evitér le port forwarding ? si par exemple je veux faire passé un vpn sur le port 80 avec le reverse proxy je peu le faire? tout en gardant mon serveur web sur le port 80 aussi?

  4. Bonjour j’ai réellement besoin d’aide pour configurer mon serveur pfsense comme reverse proxy s’il vous plait :-( .
    si quelqu’un de pro peut prendre la main sur mon ordi avec teamviewer c’est faisable ? ça doit être un détail de routage. Pour l’instant je vois dans les logs de pfsense les demandes que je fais sur mon ip wan depuis internet, mais depuis le navigateur je reçois juste une erreur.
    Merci pour votre aide.

  5. Merci Ophyde,
    Evidemment, si ne crée aucune règle nat ou firewall , bah rien ne se passe…

    Donc problème bêtement résolu en créant les règles Zadéquates ^^ .
    Bravo pour tes tutos, beaucoup plus digestes que la doc officielle (en tout cas pour les noob comme moi).

  6. Salut, j’ai suivi le Tudo, la redirection ne se fait pas vers la bonne machine.
    lors de la configuration il est imposé de renseigner le « external FQDN », j’ai donc mis l’adresse IP WAN du Firewall.

    et là, le reverse proxy me renvoi vers l’interface d’administration de PFSENSE.
    j’ai beau chercher je ne trouve pas …
    une idée ?

        1. Je pense avoir compris pourquoi. Ton interface d’administration de pfsense tourne sur le port 80 ? Si c’est le cas il faut que tu changes le port d’écoute de l’interface d’administration pour autre chose que le port 80 :)
          La modification se fait dans System > Advanced

  7. j’ai redémarré le squid à la fois à travers l’interface web, mais aussi en ligne de commande, et j’ai même rebooté le FW … rien à changé :(

  8. j’ai redémarré le squid à la fois à travers l’interface web, mais aussi en ligne de commande, et j’ai même rebooté le FW … rien à changé :(

    Comme le reverse proxy est installé avec le « proxy server », je me pose la question s’il n’y a pas une motif à faire à ce niveau là … mais aucun tudo n’en parle.

  9. Salut,
    Tu as du certainement réglé le problème entre-temps mais à ta place dans System advanced toujours je cocherais la case « Disable WebConfigurator redirect rule ».
    Good luck.

  10. Oui j’ai suivi le tuto mais je suis noyé dans mon installation, serais-tu disponible pour un dépannage rémunéré , en freelance ? si oui on peut en discuter via ma boite mail. si non , je peux t’expliquer mon souhait et t’expliquer en détail ma config. Merci pour ton aide c’est très important pour moi.

  11. Salut,
    Petite astuce avec la dernière version, je l’ai apprise à mes dépends :s

    system -> Advenced -> system tunables

    nouvelle règle :
    tunable : net.inet.ip.portrange.reservedhigh
    Description : PORT LIMIT
    Value : 70

    Avec cette règle, on peut utiliser le proxy reverse sur le port 80 et 443 sans problème.

    N’oubliez pas de changer le port de l’interface d’administration de pfsense.

    1. Hey !
      Merci pour l’astuce je vais la rajouter à l’article.
      Perso j’avais trouvé comme solution de faire tourner squid sur la loopback du pfsense sur un port > 1024 avec une petit nat des ports 80 et 443 sur le nouveau port de squid ^^ »

      Ophyde

  12. J’ai pas tenté d’utiliser la loopback. Ça fait tout juste 2 semaines que je découvre pfsense. Ce weekend je l’installe sur mon réseau. Ensuite c’est aggregation de 2 connexions Internet adsl + câble via un vpn.

  13. Bonsoir,

    Merci beaucoup Ophyde pour ton super tuto , merci également à xifit pour la création de la valeur « net.inet.ip.portrange.reservedhigh », celà m’a grandement aider pour la mise en place de pfsense dans mon infra.
    Perso, j’utilise la version pfsense 2.2.4 avec squid 3, j’ai implémenté le bypass de la neufbox fibre pour connecter en direct mon pfsense au web sans passer par la box tout marche nickel sauf une chose.
    En effet, je n’arrive pas à mettre en cache mes sites web interne pour un chargement plus rapide de l’extérieur. Toutes requêtes vers mes sites webs ressortent dans les logs en TCP_MISS/200 indiquant qu’aucune version n’existe en cache sur pfsense.

    Comment arriver à mettre en cache mon site web créé sous joomla afin que le chargement via le reverse proxy soit plus rapide pour l’utilisateur externe?

    Merci pour votre aide.

  14. Salut,
    Ophyde, voilà c’est fait j’ai une agrégation de lien ADSL avec Câble (j’ai pas la fibre ouin).

    Pour ça j’ai pris la VDSL de OVH.

    Le câble me fournit du 30/2 Mbps, la VDSL me fournit en téhorie 47.93/15.69 Mbps à une atténuation de 10 db (551 mètres du NRA), mais là c’est de la théorie.

    L’avantage d’OVH c’est que l’on peut choisir le profil de connexion du modem parmis une liste assez importante, il existe un outils sur le manager qui nous propose le meilleur profil à appliquer. Le manager permet aussi de programmer des notifications afin de savoir si la connexion est perdu et aussi quand elle revient.
    Pour la pratique j’ai une atténuation anormalement élevé sur le DL (21.6 db) mais sur l’UP c’est bon (12.9 db). Le modem synchronise à 48270/15560 Kbps ce qui est proche de la théorie sur un profil « G.INP VDSL17a TURBO SNR3 FAST » (un test a été fait sur un profil plus rapide mais la désynchronisation était aussi au RDV et la différence était faible (51519/16341 Kbps) .

    J’ai configurer pfsense en mode multiwan, il vas répartir la charge réseau sur les 2 connexions. J’ai mis les modems en mode bridge, celui d’ovh ma donnée du fils à retordre pour la configuration du WAN (pfsense) car c’est très mal expliqué sur le site (ils marquent PPPoE, mais faut se mettre en DHCP). ensuite j’ai configurer les régles en définissant la GATEWAY multiwan, et là c’est hallucinant les test speedtest.net. Cependant un problème persiste sur ce mode de configuration, certains site contrôle l’IP de l’utilisateur (mannager OVH par exemple), il faut donc créer des régles pour que la connexion passe toujours par la même gateway.

    Voici un des tests http://www.speedtest.net/result/4791580973.png, télécharger quelques chose n’a jamais été aussi rapide, mais envoyer aussi. Les connexions en 4G pour atteindre mes serveurs sont aussi bluffant cependant elle n’utilise que la connexion ovh (IP Fixe donc moins de soucis pour le serveur DNS).

    Bon il faut que je change 1 routeur et mas box pfsense pour passer tous le réseau au 1Gpbs car il sature à 100 Mbps. pour le PING, il est sensiblement identique entre OVH et le câble, ça c’est aussi pas mal.

  15. Bonjour,

    Merci pour ces tutos parfaitement clair.

    Est ce qu’il est possible tu penses d’ajouter un serveur web en ligne de commande via SSH ?

  16. Bonjour,

    Merci pour ton tutoriel super clair.

    Pourrais-tu en réaliser un autre pour la version pfSense 2.3.X
    J’ai essayé sur ma version et cela ne fonctionne pas…
    J’ai également essayé ce tuto (la fin parle d’un autre bug) : http://www.adminpasbete.fr/reverse-proxy-sou-pfsense/

    Dans mon cas, c’est le reverse proxy que j’essaye de faire fonctionné et qui ne fonctionne pas.

    Encore merci.

    Cordialement

  17. Bonjour,

    J’ai enfin trouvé (et j’ai honte…)
    J’avais mis un espace dans le nom de « groupe » (groupe name) qui identifie mon mappage, et cela posait problème.
    Sans espace tous fonctionne…

    Désolé pour le dérangement, et merci de ton retour.

    Cordialement

    1. Bonjour Olivier,

      Je n’ai jamais utilisé la fonction de redirection sur le reverse proxy. :-/
      Si tu as des informations n’hésite pas à les partager :)

      Ophyde.

  18. Bonjour, Ophyde j’ai fait mon reverse proxy et que cela fonctionne à merveille.
    Mais j’aimerai mettre une authentification, c’est à dire quand je veux accéder aux serveurs qui sont en interne de s’authentifier. C’est à dire encore, avant que la redirection se passe que je puisse m’authentifier et si l’authentification réussie qu’on accède aux serveurs du LAN.
    Merci en attente de votre réponse et de toutes questions complémentaires.

    1. Salut Saliou,

      A partir du PFsense je ne sais pas si c’est possible .. Il reste tout fois la solution du .htaccess mais cela sera sur le serveur en lui même donc après avoir passer le reverse proxy…
      Si tu trouves n’hésite pas à nous dire comment tu as fait :-)

      Ophyde

  19. Hello M’dame,

    Grâce à tes tutos j’ai tout une infra en place !

    j’ai mis le reverse proxy mais problemes :

    1. à chaque fois que j’ajoute une serveur/rediretion , i ls’arrete, je dois le relancer

    C’est pas difficile mais ça génère une coupure de prod :(

    2. quand un serveur est étaint, le reverse me retoure une erreur avec mon IP Interne sur la page …. comment la virer de la ?

    D’avance merci pour tes réponses (si tu as un peu de temps bien sur)

    Nacer

    1. Salut Nacer,

      Il est obligé de redémarré le process pour prendre en compte la nouvelle configuration du proxy et l’appliquer …
      Pour la partie affichage de l’IP interne je ne sais pas du tout ! As-tu trouvé la solution ?

      Ophyde

      1. Hello Ophyde,

        Le soucis c’est qu’il ne redémarre pas :)
        Je clic sur start et c’est OK mais du coup c’est pas tip top…

        En dehors de ça, tout est OK ! Sur tool.

  20. Super tuto!

    Je préfère le faire avec une machine à part mais quand on a juste que PFSense cela suffit.

    Je n’ai rencontré aucuns problèmes lors de la configuration et des tests, il faut juste bien remplir les champs.

    Juste perso j’ai mis « localhost (loopback) » au lieu de « WAN » comme interface pour le proxy pour éviter toute boucle potentielle
    Et pour le port d’écoute j’ai mis 8080 comme ça je ne suis pas bloqué (ne pas oublier de natter toutes les entrées 80 sur le 8080)

  21. Hello Ophyde,

    Merci pour ce tuto!(je déterre un vieux topic je sais)
    Je galère un peu de mon coté, j’avais une question au niveau de le conf dns à mettre en place. Es que tu rediriges uniquement le nom de domaine comme ca:
    mydomain.fr A IPPub (ou IPPub est l’ip pub de mon pfsense)
    Ou tu dois également rediriger les sous domaines vers ton pfsense comme ca:
    web.mydomain.fr A IPPub

    Parce que si je ping web.mydomain.fr je n’ai aucune résolution qui se fait :( et je pensais que si j’inscris web.mydomain.fr dans mon serveur DNS le pfsense lui sera interrogé uniquement avec une IP et il ne sera pas capable de comprendre à quel web server il faut rediriger la requête.

    1. Salut !

      Il faut que tu rediriges aussi tes sous domaines vers le PFsense. Les requêtes http/https seront redirigé par le reverse proxy du pfsense vers le bon serveur. :-)
      Cela répond à ta question ?

      Ophyde.

  22. Bonjour Ophyde
    Merci pour ce tuto reverse proxy, qui m’a bien aidé a comprendre le parametrage et le fonctionnement, mais lorsque j’accède a mon serveur web d’internet j’ai le message d’erreur TCP_DENIED /403
    J’ai vu sur differents sites que l’erreur semble connue mais j’ai un peu de mal a comprendre la solution!!!
    Si par hasard tu avais la reponse !!

      1. Bonjour et merci de me répondre… et désolé du retard..
        Non le serveur web fonctionne bien car si j’utilise le reverse proxy d’un NAS Synology sur le LAN j’accède sans problème au web (qui lui est sur opt)

        Bonne soirée

Laisser un commentaire

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.