Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Reverse Proxy problème

    Scheduled Pinned Locked Moved Français
    29 Posts 5 Posters 5.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mamatov
      last edited by

      Bonjour,

      Contexte :

      • milieu pro
      • Test de pfsense avant une éventuelle mise en production.
      • Compétence firewall sur Fortinet mais débutant sur pfsense.

      Besoin :

      • J'ai actuellement une cinquantaine de serveurs web hébergés (+ 50 serveurs erp accessibles via ssh) sur une infra virtualisée. Chaque serveur a sa propre IP publique et son firewall (Iptables + fail2ban). Cela fonctionne bien mais ce n'est vraiment pas souple à gérer.
        Je veux donc faire évoluer mon infra et c'est pourquoi je teste pfsense installée sur une VM. Mon besoin concerne donc le reverse proxy pour pouvoir joindre mes serveurs webs via une ip publique unique en filtrant sur l'URL.

      Schéma :

      • Pour mon test mon schéma est très simple, j'ai installé pfsense 2.2.2 sur une VM qui a 2 interfaces (WAN + LAN).
      • Packages ajoutés : squid3
      • Pour la configuration du revers proxy j'ai suivit ce tuto :

      http://www.ophyde.com/reverse-proxy-avec-pfsense/

      La configuration est assez basique

      Pfsens Wan : IP publique X.X.X.X
      Pfsense Lan : IP privé 172.16.2.X
      Web server : Ip privé 172.16.2.X

      • Mon revers proxy est bien bindé sur l'interface wan et écoute sur le port 80
      • Dans l'onglet Web servers du reverse proxy j'ai bien ajouté mon serveur web
      • Dans l'onglet mappings j'ai indiqué l'URL test.mondomaine.fr (sur mon dns j'ai bien ajouté un enregistrement de test.mondomaine.fr vers l'IP publique wan du pfsense).
      • J'ai également ajouté une règle pour autoriser le port 80 vers l'interface WAN du pfsense

      Toubleshooting :

      • Via tcpump sur le serveur web je ne vois aucun paquet arrivé quand je lance une connexion vers test.mondomaine.fr (iptable est désactivé)
      • Sur le pfsense la règle laisse bien passé la requête sur le port 80.

      J'ai essayé divers changements sans succès. Je dois rater quelques choses mais je ne comprends pas quoi.
      Est-ce que vous avez une piste ? Via le shell de pfsense je pensais trouvé des logs du revers proxy mais je n'ai rien trouvé.

      Merci d'avance pour votre aide.

      1 Reply Last reply Reply Quote 0
      • C
        chris4916
        last edited by

        1 - avant de regarder sur le serveur web, as-tu fait un tcpdump sur pfSense ?
        2 - rien à voir avec ton problème immédiat mais probablement utile: avec le changement de design, si tu n'y prêtes pas attention, tu vas perdre l'IP source, ce qui peut être gênant si tu fais des stats sur tes serveurs Web. Je suppose que la directive x-forwarded-for fonctionne également en mode reverse proxy avec Squid (j'utilise habituellement plutôt Nginx que Squid pour du reverse)

        Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

        1 Reply Last reply Reply Quote 0
        • C
          ccnet
          last edited by

          Reverse proxy c'est comme proxy mais avec reverse devant non ? Je commente une fois pour toute ce que je pense de cette solution, ensuite chacun fait ce qu'il veut.
          L' idée de base me semble parfaitement justifiée. Je ne partage pas les modalités de mise en œuvre. Avec une cinquantaine de serveurs webs les composants firewall et reverse proxy devraient être séparés et physique. Une segmentation réseau rigoureuse devrait être mise en place. J'en ai terminé.

          1 Reply Last reply Reply Quote 0
          • M
            mamatov
            last edited by

            @ccnet:

            Reverse proxy c'est comme proxy mais avec reverse devant non ? Je commente une fois pour toute ce que je pense de cette solution, ensuite chacun fait ce qu'il veut.
            L' idée de base me semble parfaitement justifiée. Je ne partage pas les modalités de mise en œuvre. Avec une cinquantaine de serveurs webs les composants firewall et reverse proxy devraient être séparés et physique. Une segmentation réseau rigoureuse devrait être mise en place. J'en ai terminé.

            Oui j'ai fait un tcpdump sur le pfsense, j'ai bien des paquets qui arrivent avec comme destination l'ip publique du pfsense sur le port 80.
            Merci pour tes conseils, je vais sans doute étudier le possibilité de segmenter mon réseau pour gérer mes serveurs web.
            Pour le moment je voulais simplement utiliser cette fonctionnalité de pfsense à des fins de tests.

            tcpdump -n port 80
            tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
            listening on em0, link-type EN10MB (Ethernet), capture size 65535 bytes
            capability mode sandbox enabled
            11:31:22.328133 IP X.X.X.X.57285 > Y.Y.Y.Y.80: Flags , seq 3902237954, win 65535, options [mss 1420,nop,wscale 8,nop,nop,sackOK], length 0
            11:31:23.321011 IP X.X.X.X.57285 > Y.Y.Y.Y.80: Flags , seq 3902237954, win 65535, options [mss 1420,nop,wscale 8,nop,nop,sackOK], length 0
            11:31:25.329360 IP X.X.X.X.57285 > Y.Y.Y.Y.80: Flags , seq 3902237954, win 65535, options [mss 1420,nop,nop,sackOK], length 0
            11:31:29.358651 IP X.X.X.X.57286 > Y.Y.Y.Y.80: Flags , seq 974242012, win 65535, options [mss 1420,nop,wscale 8,nop,nop,sackOK], length 0
            11:31:30.359544 IP X.X.X.X.57286 > Y.Y.Y.Y.80: Flags , seq 974242012, win 65535, options [mss 1420,nop,wscale 8,nop,nop,sackOK], length 0
            11:31:32.360147 IP X.X.X.X.57286 > Y.Y.Y.Y.80: Flags , seq 974242012, win 65535, options [mss 1420,nop,nop,sackOK], length 0

            1 Reply Last reply Reply Quote 0
            • C
              ccnet
              last edited by

              Dans votre démarche cette solution pourrait vous intéresser : https://www.vultureproject.org/ D'autant qu'une nouvelle version très prometteuse s'annonce.

              1 Reply Last reply Reply Quote 0
              • M
                mamatov
                last edited by

                @ccnet:

                Dans votre démarche cette solution pourrait vous intéresser : https://www.vultureproject.org/ D'autant qu'une nouvelle version très prometteuse s'annonce.

                Merci pour l'info je vais regarder.
                Sinon pour mon problème de reverse avec pfsense une idée ?

                1 Reply Last reply Reply Quote 0
                • C
                  ccnet
                  last edited by

                  Quelques infos pourraient être collecté sur Pfsense avec une capture sur chaque interface. Activez aussi les logs sur pfsense sur la règle qui accepte le trafic pour voir ce qu’il en est des paquets reçus.
                  Squid 3 sur Pfsense, je ne sais pas où ça log.

                  1 Reply Last reply Reply Quote 0
                  • C
                    chris4916
                    last edited by

                    le log de Squid est dans /var/squid  ;)

                    Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                    1 Reply Last reply Reply Quote 0
                    • C
                      chris4916
                      last edited by

                      et dans l'option "realtime", tu devrais peut-être avoir quelque chose lorsque tu essaies de te connecter… je n'ai pas ça sous la main pour tester mais intuitivement...

                      Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                      1 Reply Last reply Reply Quote 0
                      • M
                        mamatov
                        last edited by

                        @chris4916:

                        le log de Squid est dans /var/squid  ;)

                        Merci pour l'info !
                        J'ai sans doute une piste, quand je démarre le reverse proxy j'ai le message :

                        Cannot bind socket FD 18 to "my wan ip:80"  : (13) Permission denied :

                        ==============

                        Message from syslogd@test1 at Apr 23 16:34:48 …
                        test1 php-fpm[247]: /pkg_edit.php: Successful login for user 'admin' from: 172.16.2.80
                        FATAL: Received Segment Violation…dying.
                        CPU Usage: 10.037 seconds = 7.083 user + 2.953 sys
                        Maximum Resident Size: 82336 KB
                        Page faults with physical i/o: 0
                        2015/04/23 16:34:58 kid1| Starting Squid Cache version 3.4.10 for amd64-portbld-freebsd10.1...
                        2015/04/23 16:34:58 kid1| commBind: Cannot bind socket FD 18 to Y.Y.Y.Y:80: (13) Permission denied
                        2015/04/23 16:34:58| pinger: Initialising ICMP pinger ...
                        2015/04/23 16:34:58|  icmp_sock: (1) Operation not permitted
                        2015/04/23 16:34:58| pinger: Unable to start ICMP pinger.
                        2015/04/23 16:34:58|  icmp_sock: (1) Operation not permitted
                        2015/04/23 16:34:58| pinger: Unable to start ICMPv6 pinger.
                        2015/04/23 16:34:58| FATAL: pinger: Unable to open any ICMP sockets.
                        2015/04/23 16:35:00 kid1| Starting Squid Cache version 3.4.10 for amd64-portbld-freebsd10.1...
                        2015/04/23 16:35:00 kid1| commBind: Cannot bind socket FD 18 to Y.Y.Y.Y:80: (13) Permission denied
                        2015/04/23 16:35:00| pinger: Initialising ICMP pinger ...
                        2015/04/23 16:35:00|  icmp_sock: (1) Operation not permitted
                        2015/04/23 16:35:00| pinger: Unable to start ICMP pinger.
                        2015/04/23 16:35:00|  icmp_sock: (1) Operation not permitted
                        2015/04/23 16:35:00| pinger: Unable to start ICMPv6 pinger.
                        2015/04/23 16:35:00| FATAL: pinger: Unable to open any ICMP sockets.

                        =================

                        Je vais creuser de se côté là.
                        Encore merci

                        1 Reply Last reply Reply Quote 0
                        • C
                          chris4916
                          last edited by

                          C'est parce qu'il faut que tu configures net.inet.ip.portrange.reservedhigh dans system/advanced/system tunables sans quoi tu ne peux lancer de services sur un port inférieur à 1024 (sauf erreur de ma part)

                          Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                          1 Reply Last reply Reply Quote 0
                          • C
                            chris4916
                            last edited by

                            après vérification, c'est plutôt: net.inet.ip.portrange.first  désolé  :-[

                            Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                            1 Reply Last reply Reply Quote 0
                            • M
                              mamatov
                              last edited by

                              @chris4916:

                              après vérification, c'est plutôt: net.inet.ip.portrange.first  désolé  :-[
                              [/quote]

                              Merci mais cela ne fonctionne pas.
                              J'ai essayé de passé à 0 ou a rien la valeur de net.inet.ip.portrange.first mais j'ai toujours le même message.
                              De plus, quand je force le reverse proxy avec le port 80 il m’indique le message suivant :

                              ============

                              The following input errors were detected:

                              The field 'reverse HTTP port' must contain a port number higher than net.inet.ip.portrange.reservedhigh sysctl value(1023).
                              To listen on low ports, change portrange.reservedhigh sysctl value to 0 on system tunable options and restart squid daemon.

                              ============

                              J'ai 'ajouté net.inet.ip.portrange.reservedhigh avec la valeur 0 mais toujours le même message.
                              Pour mes tests j'ai donc changé le port de squid avec le port 8080 dans un premier temps. Je n'ai plus l'erreur avec le bind mais les autres oui :

                              2015/04/23 16:59:55 kid1| Starting Squid Cache version 3.4.10 for amd64-portbld-freebsd10.1…
                              2015/04/23 16:59:55| pinger: Initialising ICMP pinger ...
                              2015/04/23 16:59:55|  icmp_sock: (1) Operation not permitted
                              2015/04/23 16:59:55| pinger: Unable to start ICMP pinger.
                              2015/04/23 16:59:55|  icmp_sock: (1) Operation not permitted
                              2015/04/23 16:59:55| pinger: Unable to start ICMPv6 pinger.
                              2015/04/23 16:59:55| FATAL: pinger: Unable to open any ICMP sockets.

                              =================

                              Mais maintenant le reverse proxy fonctionne  :D :D :D

                              Par contre je ne comprends pas pourquoi ça ne fonctionne pas avec le port 80..

                              1 Reply Last reply Reply Quote 0
                              • J
                                jdh
                                last edited by

                                L'interface web du pfsense ne doit pas être sur le port de base aussi …
                                (Mais ça c'est évident que vous y avez déjà pensé ...)

                                Albert EINSTEIN : Si vous ne pouvez pas l'exprimer simplement, c'est que vous ne le comprenez pas assez bien. (If you can’t explain it simply, you don’t understand it well enough.)

                                1 Reply Last reply Reply Quote 0
                                • C
                                  chris4916
                                  last edited by

                                  et tu as bien sur redémarré Squid après avoir ajouté net.inet.ip.portrange.reservedhigh ?

                                  Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    mamatov
                                    last edited by

                                    @chris4916:

                                    et tu as bien sur redémarré Squid après avoir ajouté net.inet.ip.portrange.reservedhigh ?

                                    Je n'avais pas redémarré squid après avoir ajouté net.inet.ip.portrange.reservedhigh.
                                    C'est ok maintenant avec le port 80.

                                    Un grand merci a vous tous, cela fait quelques heures que je me cassais le nez dessus.

                                    1 Reply Last reply Reply Quote 0
                                    • C
                                      chris4916
                                      last edited by

                                      un thread qui peut t'intéresser  ;)

                                      Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                                      1 Reply Last reply Reply Quote 0
                                      • C
                                        chris4916
                                        last edited by

                                        Maintenant que ça fonctionne (ce qui était la question initiale), il y a probablement de la place pour un réflexion plus large  8)

                                        Compte tenu du nombre de serveur que tu décris et de leur usage (ERP), j'imagine qu'il y a des problématiques spécifiques liées à la haute disponibilité, éventuellement des aspects spécifiques de réécriture d'URL, de load balancing etc…

                                        Le simple déploiement d'un reverse proxy sur pfSense ne répond pas à cette problématique. De plus c'est un package, avec des risque évidents de dysfonctionnement comme tu peux le lire sur le lien que j'ai mis un peu plus haut.

                                        Compte tenu de la nature commerciale de ton environnement, selon le SLA que tu as, il est peut-être nécessaire de mettre en place une infrastructure à tolérance de panne (i.e. une paire de pfSense avec CARP).

                                        Au lieu de faire tourner un reverse proxy directement sur pfSense, j'opterai plutôt pour le service "load balancer" de pfSense, pour conserver l'objectif de "une adresse IP externe unique" (même si c'est ici une VIP) pour rediriger les requêtes en failover vers une paire de reverse proxy installés sur une DMZ, lesquels accéderont  aux serveurs en interne.

                                        Voila pour la base de réflexion  ;)

                                        Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                                        1 Reply Last reply Reply Quote 0
                                        • C
                                          chris4916
                                          last edited by

                                          Le choix du reverse proxy est un vaste débat  ::)

                                          Il faut d'abord bien définir les fonctionnalités que tu veux couvrir. Il y a des solutions simples (simplistes) et des truc plus évolués et spécialisés comme le lien proposé par ccnet.

                                          • Les aspects de charge ne posent normalement pas de problème (à ne pas négliger cependant: comme pour le serveur web, un reverse proxy Nginx est plus rapide et léger que Apache  ;D  mais pas avec les mêmes fonctionnalités)
                                          • les aspects failover sont également assez bien couverts mais il peut y avoir des pièges avec les applications qui maintiennent des sessions. Il convient de bien s'assurer de ces aspects de bout en bout lors du PoC.
                                          • attention également aux aspect d’authentification: normalement, ton application demande à l'utilisateur de s'authentifier. certains reverse proxy offrent une fonction de SSO (like) qui consiste souvent à stocker le crédential de l'utilisateur pour le rejouer ultérieurement. Tout le monde n'est pas fanatique de ce mode de fonctionnement (moi par exemple :-) )

                                          A discuter  ;)  (mais est-ce que ça n'est pas largement HS par rapport à pfSense ?)

                                          Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                                          1 Reply Last reply Reply Quote 0
                                          • C
                                            chris4916
                                            last edited by

                                            Pour illustrer ce propos et rester dans le cadre de pfSense, si la haute disponibilité fait partie du SLA, il conviendrait de déployer une paire de pfSense avec CARP.

                                            pfSense contrôle l'accès à la DMZ sur laquelle sont installés 2 reverse proxy, accédés via le load balancer, en mode load balancer ou failover selon les besoins. Ces reverse proxy accèdent ensuite aux serveurs web installés sur le LAN (1)

                                            Avec ce design, les utilisateurs venant d'internet ne pénètrent pas plus loin que la DMZ où l'appli (reverse proxy) prend le relais.

                                            Attention: ça reste malgré tout un design que je qualifie de slideware  ;D  car il ne décrit que le principe. De nombreux aspects supplémentaires doivent être pris en compte avant de fournir une architecture qui pourrait être déployée:

                                            • les aspects connectivité internet sont ignorés (edge routers, redondance des ISP, liens internet)
                                            • redondance des serveurs web (indispensable si on fait l"effort de rendre l'infra y donnant accès elle même tolérante aux pannes)
                                            • réseau d'administration
                                            • et enfin, très important mais en dehors du cadre de pfSense, choix et fonctionnalités des reverse proxy

                                            (1): "sur le LAN" est ici un raccourci. Le déploiement des serveurs dans l'infrastructure est un autre sujet, à prendre en compte dans le design cible. Ce peut être des serveurs sur un segment dont l'accès est contrôlé par un FW dédié, un segment directement attaché aux 2 pfSense décrits au dessus. Il y a plein de designs possibles dépendants de l'existant et des objectifs. C'est un autre débat et un sujet à part entière ;)

                                            pfsense_carp.jpg
                                            pfsense_carp.jpg_thumb
                                            reverse_proxy.jpg
                                            reverse_proxy.jpg_thumb

                                            Jah Olela Wembo: Les mots se muent en maux quand ils indisposent, agressent ou blessent.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.