Forum Linux.général Reverse proxy

Posté par  .
Étiquettes : aucune
0
14
fév.
2008

Bonsoir (ou bonjour vu l'heure),

Je tente de mettre en place depuis plusieurs semaines (mois ?) un système de proxy entre internet et un serveur web sur mon réseau local.

Il fonctionne déjà du réseau local vers Internet mais je cherche à faire l'inverse, que ce soit les Internautes qui passent par le proxy pour se rendre sur le serveur Web en Intranet.

Ca fonctionne assez bien. J'utilise un nat pour rendre transparent la redirection sur le proxy

iptables -t nat -D PREROUTING -i eth0 -p tcp -s --dport 80 -j DNAT --to-destination <mon_ip:3128

est présent pour ne pas impacter tout les internautes et ainsi faire des tests via une seule IP. Cette IP est sur un autre fournisseur d'accès, j'y accède via ssh où j'y utilise un links pour afficher mon serveur Web.

Mais le problème est que dans les journaux des logs du serveur apache en local, n'est visible uniquement l'adresse IP du proxy et non plus la réelle adresse IP de l'internaute.

J'ai pu comprendre que pour rendre ceci possible, il fallait faire un 'reverse proxy'….

Or, en suivant quelques tutos pour le squid.conf… que ce soit sous Squid 2.6 ou Squid 3.0 (j'ai installé les deux au cas ou), il me dit toujours que les arguments "httpd_accel_*" sont inconnus.

httpd_accel_host virtual

httpd_accel_port 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

De plus, pour que ca soit possible, il faut que je précise toutes les adresses web hébergées dans le hosts de la machine proxy (près de 300 sites et une quinzaine de domaines). Au bout d'un certain nombre, le fichier /etc/hosts dit stop car il ne sait plus gérer autant d'arguments.

La machine proxy qui s'occupe du routage est également serveur DNS. Une personne qui interroge un site web depuis l'extérieur, arrive correctement sur le bon site, mais comme présentement, c'est le proxy qui interroge la page, et que l'adresse IP publique DNS du site correspond à l'interface WAN de la machine proxy/routeur, la requête n'aboutit jamais. Je passe actuellement via le fichier hosts pour mes tests.

Il me sera possible de passer par la suite via un second serveur DNS local, mais je trouve ça assez lourd et trop redondant, j'ai cru voir des réécriture d'URL depuis Squid mais je n'ai pas encore bien cherché à ce niveau. Ou alors le reverse proxy gère tout seul le retour en intranet.

Certains hébergeurs utilisent une telle solution, mais je ne vois pas comment faire simple. Et surtout, je souhaites garder le même nombre de machines.

Le réseau local est donc constitué d'un :

routeur/proxy/firewall/ids/ips/dns

serveur web/ftp/sql etc …

(une autre machine pour le serveur irc et une troisième machine pour tout ce qui est annexe à mes activitées…)

Je m'adresse surtout aux personnes qui ont déjà mis en place ce genre de solution. Pourriez vous me guider s'il vous plait ?

L'avantage d'une telle solution est ensuite de pouvoir filtrer par antivirus via les redirecteurs Squid, Squidguard sera également présent bien que un peu inutil du coté Internet>Intranet, mais qui sait … De plus, le filtrage de type mime sera possible, mot clefs, URL et gestion du débit et réduction de charge pour le serveur Web.

Merci d'avance.

  • # Pound

    Posté par  . Évalué à 1.

    As-tu essayé Pound ?
    C'est un reverse-proxy leger, simple et efficace:
    http://www.apsis.ch/pound

    Dans le cas de pound, l'adresse ip réélle est transmise via le header
    X-Forwarded-For.
    Pour les logs d'apache il faut utiliser une réference tel que
    %{X-Forwarded-For}i
    (je ne me souviens plus précisement...)
    • [^] # Re: Pound

      Posté par  . Évalué à 1.

      Pas mieux. C'est simple, léger et c'est fait uniquement pour cela (ça mériterait quand un peu plus d'options de rewrite)
      • [^] # Re: Pound

        Posté par  . Évalué à 1.

        Merci beaucoup, je vais regarder du coté de pound, j'espère que je vais pouvoir y mettre un redirecteur style havp (pour l'analyse antivirus). Qu'il n'y ai pas de cache ... c'est moins bien, mais ca sera déjà ça. De plus, il permet de faire du load balancing et c'est son domaine de prédilection (à ce que j'ai pu en lire).

        Merci encore
        • [^] # Re: Pound

          Posté par  . Évalué à 1.

          Bon, ça fonctionne, mais ça ne m'avance pas à grand chose ^^ (à moins que ça filtre peut être les paquets)

          L'intérêt d'utiliser squid étais de disposer d'un redirecteur sur l'antivirus.

          Peut t'on alors ajouter à pound une analyse antivirus (avec havp par exemple), de mot clef etc comme pour squid ?

          Merci d'avance -)
          • [^] # Re: Pound

            Posté par  . Évalué à 1.

            Je reviens en force avec une question à 1 000 euros -)

            Je viens de trouver pour mettre le proxy Havp et DansGuardian en reverse proxy. Ils me permettent d'analyser la page à l'antivirus et de vérifier si son contenu n'est pas dangereux.

            Ca fonctionne pratiquement pareil que pound sauf qu'ils ne font pas de load balancing, ce que je ne cherche pas à faire.

            J'ai également ajouté le X-FORWARD-FOR dans les log de squid et j'ai bien l'adresse IP de la personne sur Internet. Dans les log, je peut placer l'adresse IP X(FORWARD-FOR à la place de la première adresse IP qui représente les IP simples.

            Cependant voilà, avec un webanalyser qui se fie au log, ca fonctionne, mais du coup, la variable $_SERVER['REMOTE_ADDR'] php est faussée, il faut utiliser la variable d'environnement X-FORWARD-FOR mais mes 200 hébergés ne le savent pas. En plus de ça, tout les .htaccess par IP ne fonctionne plus et les statistiques des sites genres phpbb ne fonctionnent plus.

            J'aimerrai savoir s'il est possible de modifier depuis les sources de httpd et placer le X-FORWARD-FOR dans REMOTE_ADDR.

            Je sais que c'est forcément possible, c'est une question d'affectation, par contre, je ne sais pas où ça se trouve.

            Pourriez vous m'aider sur ce point ?

            Merci d'avance ^^ -)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.