Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 21 août 2023 RogerT a écrit : >> Je pense qu'il dit "non" à "Tu n'as pas besoin de plus à priori non ?" >> :) >> > Oui, exactement ! Autant pour moi. Bon proxy Roger :)
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 21 août 2023 à 12:15, François TOURDE a écrit > : > > Le 19589ième jour après Epoch, > Michel Verdier écrivait: > >> Le 20 août 2023 RogerT a écrit : >> Donc positionne un entête comme on t'a suggéré avec proxy_set_header et teste cet entête sur l'apache qui traite la requête. Tu n'as pas besoin de plus à priori non ? >>> Non. Le serveur a juste besoin de lire l’adresse IP du client et de >>> retourner (au reverse proxy, pour routage) la réponse à la requête. >> >> C'est exactement ce qu'on (moi et d'autres) t'explique. Donc pourquoi >> dis-tu "non" ? Explique-nous pourquoi tu ne veux pas faire cette >> solution ? > > Je pense qu'il dit "non" à "Tu n'as pas besoin de plus à priori non ?" > :) > Oui, exactement !
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 19589ième jour après Epoch, Michel Verdier écrivait: > Le 20 août 2023 RogerT a écrit : > >>> Donc positionne un entête comme on t'a suggéré avec proxy_set_header et >>> teste cet entête sur l'apache qui traite la requête. Tu n'as pas besoin >>> de plus à priori non ? >>> >> Non. Le serveur a juste besoin de lire l’adresse IP du client et de >> retourner (au reverse proxy, pour routage) la réponse à la requête. > > C'est exactement ce qu'on (moi et d'autres) t'explique. Donc pourquoi > dis-tu "non" ? Explique-nous pourquoi tu ne veux pas faire cette > solution ? Je pense qu'il dit "non" à "Tu n'as pas besoin de plus à priori non ?" :)
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 20 août 2023 RogerT a écrit : >> Donc positionne un entête comme on t'a suggéré avec proxy_set_header et >> teste cet entête sur l'apache qui traite la requête. Tu n'as pas besoin >> de plus à priori non ? >> > Non. Le serveur a juste besoin de lire l’adresse IP du client et de > retourner (au reverse proxy, pour routage) la réponse à la requête. C'est exactement ce qu'on (moi et d'autres) t'explique. Donc pourquoi dis-tu "non" ? Explique-nous pourquoi tu ne veux pas faire cette solution ?
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 18/08/2023 à 10:24, RogerT a écrit : Bonjour, Avec nginx configuré en reverse proxy, j’ai un souci pour qu’il passe l’adresse IP du client au serveur web. Il réécrit l’entête en y mettant son adresse IP (cad celle du serveur où est nginx). C’est cette adresse que voit le serveur web à qui il passe la requête et qui ne sait donc pas où se trouve le client (pour une vérification de sécurité). Il y a plein de discussions sur les forums à propos d’ancienne et de nouvelle syntaxe nginx. Vu de loin, ça a l’air simple : contrôler la réécriture des entêtes. En pratique, comment configurer ? Quelle syntaxe ? Merci Bonjour, Pour réaliser ce que tu souhaires (reverse proxy nginx, serveur final apache) voici ce que je te suggère: - sur le reverse proxy nginx: ... location / { ... proxy_pass http. proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... } - sur le serveur final apache a2enable mod rpaf editer /etc/apache2/mods-enabled/rpaf.conf RPAFenable On # When enabled, take the incoming X-Host header and # update the virtualhost settings accordingly: RPAFsethostname On # Define which IP's are your frontend proxies that sends # the correct X-Forwarded-For headers: #RPAFproxy_ips 127.0.0.1 ::1 RPAFproxy_ips 192.168.128.1 # adresse IP du reverse proxy # Change the header name to parse from the default # X-Forwarded-For to something of your choice: # RPAFheader X-Real-IP En espérant que cette "recette de cuisine" réponde à ton besoin Jacques
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 20 août 2023 à 09:49, Michel Verdier a écrit : > > Le 20 août 2023 RogerT a écrit : > >>> Par exemple, nginx, apache et d'autres vont pouvoir se baser sur >>> l'en-tête créé, mais si tu veux t'adresser à des service comme exim, >>> mailman ou transmission, ça risque d'être impossible. >> Serveur web Apache. https ou WebDAV. >> Pas de serveur de messagerie. > > Donc positionne un entête comme on t'a suggéré avec proxy_set_header et > teste cet entête sur l'apache qui traite la requête. Tu n'as pas besoin > de plus à priori non ? > Non. Le serveur a juste besoin de lire l’adresse IP du client et de retourner (au reverse proxy, pour routage) la réponse à la requête.
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 20 août 2023 RogerT a écrit : >> Par exemple, nginx, apache et d'autres vont pouvoir se baser sur >> l'en-tête créé, mais si tu veux t'adresser à des service comme exim, >> mailman ou transmission, ça risque d'être impossible. > Serveur web Apache. https ou WebDAV. > Pas de serveur de messagerie. Donc positionne un entête comme on t'a suggéré avec proxy_set_header et teste cet entête sur l'apache qui traite la requête. Tu n'as pas besoin de plus à priori non ?
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 19 août 2023 François TOURDE a écrit : >>> Le problème que tu auras si ton proxy est transparent c'est que ton appli >>> va répondre vers l'IP du client et ça cassera la connexion. > > Techniquement, le proxy transparent peut s'amuser à se faire passer pour > l'IP externe, donc ça ne casserait pas la connection, mais je ne connais > pas d'outil qui fasse ça. Sauf que le serveur va router sa réponse vers le client et pas vers le proxy. Il faut alors changer la table de routage du serveur pour forcer le routage (au moins des ports concernés) vers le proxy.
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 19 août 2023 à 22:00, François TOURDE a écrit > : > > Le 19588ième jour après Epoch, > RogerT écrivait: > Le 19 août 2023 à 18:58, Michel Verdier a écrit : >>> > [...] >>> Le problème que tu auras si ton proxy est transparent c'est que ton appli >>> va répondre vers l'IP du client et ça cassera la connexion. > > Techniquement, le proxy transparent peut s'amuser à se faire passer pour > l'IP externe, donc ça ne casserait pas la connection, mais je ne connais > pas d'outil qui fasse ça. > Je sais que ça existe. Je crois savoir que nginx le fait. J’ignore la syntaxe complète et testée. >> Si je comprends bien, il suffirait que le reverse proxy ajoute une >> entête avec l’adresse IP du client qui sera lue par le serveur web, >> qui répondra ensuite à la requêtes au reverse proxy qui routera au >> client. >> C’est ça ? > > Oui, avec comme petit bémol que si tu t'adresses (ton reverse proxy) à > des services qui ne gèrent pas ça, tu ne vas pas pouvoir t'en sortir. > > Par exemple, nginx, apache et d'autres vont pouvoir se baser sur > l'en-tête créé, mais si tu veux t'adresser à des service comme exim, > mailman ou transmission, ça risque d'être impossible. Serveur web Apache. https ou WebDAV. Pas de serveur de messagerie. > Perso j'utilise haproxy comme reverse (il y a aussi nginx, apache et > envoy qui font ça très bien), et je suis confronté parfois à ce même > souci d'identification de l'adresse IP d'origine. Comment le traites-tu ?
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 19588ième jour après Epoch, RogerT écrivait: >> Le 19 août 2023 à 18:58, Michel Verdier a écrit : >> [...] >> Le problème que tu auras si ton proxy est transparent c'est que ton appli >> va répondre vers l'IP du client et ça cassera la connexion. Techniquement, le proxy transparent peut s'amuser à se faire passer pour l'IP externe, donc ça ne casserait pas la connection, mais je ne connais pas d'outil qui fasse ça. > Si je comprends bien, il suffirait que le reverse proxy ajoute une > entête avec l’adresse IP du client qui sera lue par le serveur web, > qui répondra ensuite à la requêtes au reverse proxy qui routera au > client. > C’est ça ? Oui, avec comme petit bémol que si tu t'adresses (ton reverse proxy) à des services qui ne gèrent pas ça, tu ne vas pas pouvoir t'en sortir. Par exemple, nginx, apache et d'autres vont pouvoir se baser sur l'en-tête créé, mais si tu veux t'adresser à des service comme exim, mailman ou transmission, ça risque d'être impossible. Perso j'utilise haproxy comme reverse (il y a aussi nginx, apache et envoy qui font ça très bien), et je suis confronté parfois à ce même souci d'identification de l'adresse IP d'origine. -- They have been at a great feast of languages, and stolen the scraps. -- William Shakespeare, "Love's Labour's Lost"
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 19 août 2023 à 18:58, Michel Verdier a écrit : > > Le 19 août 2023 RogerT a écrit : > >> Je sais qu’un reverse proxy peut réécrire les entêtes pour déjà faire >> passer l’adresse IP du client qu’il fait disparaître si on le laisse >> faire. > > Le problème que tu auras si ton proxy est transparent c'est que ton appli > va répondre vers l'IP du client et ça cassera la connexion. Il faut donc > voir dans ton appli l'entête qui doit être utilisée pour stocker l'IP à > vérifier. Si je comprends bien, il suffirait que le reverse proxy ajoute une entête avec l’adresse IP du client qui sera lue par le serveur web, qui répondra ensuite à la requêtes au reverse proxy qui routera au client. C’est ça ?
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 19 août 2023 RogerT a écrit : > Je sais qu’un reverse proxy peut réécrire les entêtes pour déjà faire > passer l’adresse IP du client qu’il fait disparaître si on le laisse > faire. Le problème que tu auras si ton proxy est transparent c'est que ton appli va répondre vers l'IP du client et ça cassera la connexion. Il faut donc voir dans ton appli l'entête qui doit être utilisée pour stocker l'IP à vérifier.
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 19 août 2023 à 16:15, François TOURDE a écrit > : > Le 19588ième jour après Epoch, > RogerT écrivait: > >> Bonjour, >> C’est très discuté dans les forums. >> Cette page que tu indiques semble confirmer que c’est assez flou (les >> ‘ X-*’ inventés pour faire des corrections rustines). > > Disons que ce ne sont pas vraiment des "rustines", mais simplement des > façon de faire liées au cas de figure dans lequel tu te trouves. > > Si tu utilises nginx comme reverse proxy, alors quoi qu'il arrive tu vas > "perdre" l'IP d'origine. La jonction TCP va se faire entre l'IP > d'origine et ta machine nginx. > > Dans ce cas, il faut établir une nouvelle jonction TCP entre ton serveur > nginx et le serveur qui délivre le service. Ce dernier n'aura donc comme > IP entrante celle de ton nginx. > > Dans le cas où tu souhaites préserver l'IP d'origine pour qu'elle arrive > sur ton serveur final, il faudrait que tu passes par un mécanisme de > NAT, comme par exemple le fait un routeur ubiquiti. Dans ce cas, ce > n'est plus du proxy mais du NAT. > > Le proxy et le routeur+NAT n'ont pas du tout les mêmes mécanismes > d'établissement et de gestion de connection. > > En espérant avoir été assez clair. Oui. Mais j’ai besoin d’un reverse proxy pour analyser et diriger la requête vers tel domaine vers le serveur web correspondant. Je sais qu’un reverse proxy peut réécrire les entêtes pour déjà faire passer l’adresse IP du client qu’il fait disparaître si on le laisse faire. Toute la question est de savoir quelle syntaxe fonctionne. Question bête : comment pourrait-on faire avec un routeur en NAT le travail d’un reverse proxy ?…
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 19588ième jour après Epoch, RogerT écrivait: > Bonjour, > C’est très discuté dans les forums. > Cette page que tu indiques semble confirmer que c’est assez flou (les > ‘ X-*’ inventés pour faire des corrections rustines). Disons que ce ne sont pas vraiment des "rustines", mais simplement des façon de faire liées au cas de figure dans lequel tu te trouves. Si tu utilises nginx comme reverse proxy, alors quoi qu'il arrive tu vas "perdre" l'IP d'origine. La jonction TCP va se faire entre l'IP d'origine et ta machine nginx. Dans ce cas, il faut établir une nouvelle jonction TCP entre ton serveur nginx et le serveur qui délivre le service. Ce dernier n'aura donc comme IP entrante celle de ton nginx. Dans le cas où tu souhaites préserver l'IP d'origine pour qu'elle arrive sur ton serveur final, il faudrait que tu passes par un mécanisme de NAT, comme par exemple le fait un routeur ubiquiti. Dans ce cas, ce n'est plus du proxy mais du NAT. Le proxy et le routeur+NAT n'ont pas du tout les mêmes mécanismes d'établissement et de gestion de connection. En espérant avoir été assez clair.
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 19 août 2023 à 12:12, François TOURDE a écrit > : > > Le 19587ième jour après Epoch, > yamo' écrivait: > >> >> Je lis dans la doc : >> >> location /some/path/ { >>proxy_set_header Host $host; >>proxy_set_header X-Real-IP $remote_addr; >>proxy_pass http://localhost:8000; >> } >> >> Il suffit donc dans ce cas d'interroger la valeur de "X-Real-IP". > > Il y a aussi l'entête x-forwarded-for qui peut jouer ce rôle. Mais dans > tous les cas, il faut que l'app derrière aille lire cette valeur. > > Un début de réflexion à ce sujet là: > https://security.stackexchange.com/questions/95865/difference-between-x-forwarded-for-ip-x-real-ip-vpns-and-tor > > Mes 2© > > -- > Don't plan any hasty moves. You'll be evicted soon anyway. > Bonjour, C’est très discuté dans les forums. Cette page que tu indiques semble confirmer que c’est assez flou (les ‘ X-*’ inventés pour faire des corrections rustines). Faudrait-il utiliser une notion de Trusted Proxies, qui serait par exemple le réseau x.y.z.0/24 sur lequel se trouve le lien fourni par l’opérateur (adresse IP du modem : x.y.z.t/32) ? Voir https://community.home-assistant.io/t/trusted-networks-when-using-nginx-reverse-proxy/37836 Et la référence qui y est citée : https://sgrudadh.blogspot.com/2018/01/nginx-and-home-assistant.html?m=1 Je crois qu’à défaut de savoir on doit tâtonner comme je fais et beaucoup d’autres aussi. Qui sait pour avoir déjà réussi ce réglage ?
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Le 19587ième jour après Epoch, yamo' écrivait: > > Je lis dans la doc : > > location /some/path/ { > proxy_set_header Host $host; > proxy_set_header X-Real-IP $remote_addr; > proxy_pass http://localhost:8000; > } > > Il suffit donc dans ce cas d'interroger la valeur de "X-Real-IP". Il y a aussi l'entête x-forwarded-for qui peut jouer ce rôle. Mais dans tous les cas, il faut que l'app derrière aille lire cette valeur. Un début de réflexion à ce sujet là: https://security.stackexchange.com/questions/95865/difference-between-x-forwarded-for-ip-x-real-ip-vpns-and-tor Mes 2© -- Don't plan any hasty moves. You'll be evicted soon anyway.
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Salut, RogerT a tapoté le 18/08/2023 14:10: >> https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ >> >> si je comprends correctement (c'est loin d'être sûr) ça a l'air de dire que >> tu dois redéfinir la variable host (valeur $proxy_host par défaut) au moyen >> de la directive proxy_set_header? >> >> mais je raconte peut-être de grosses bêtises. > Je ne sais pas. > Vu la diversité des réponses trouvées, et mon inexpérience sur cette > utilisation, je me dis que quelqu’un de la liste qui a déjà rencontré le > problème ou a su configurer correctement ce reverse proxy saura mettre > immédiatement le doigt sur le point. Je lis dans la doc : location /some/path/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:8000; } Il suffit donc dans ce cas d'interroger la valeur de "X-Real-IP". -- Stéphane
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
> Le 18 août 2023 à 10:50, didier gaumet a écrit : > > Bonjour, > > rappel: je suis une truffe en réseaux, donc ne pas se fier à mes propos > aveuglément > > la doc officielle -donc celle qui fait référence- sur le reverse proxy nginx > est là: > https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ > > si je comprends correctement (c'est loin d'être sûr) ça a l'air de dire que > tu dois redéfinir la variable host (valeur $proxy_host par défaut) au moyen > de la directive proxy_set_header? > > mais je raconte peut-être de grosses bêtises. Je ne sais pas. Vu la diversité des réponses trouvées, et mon inexpérience sur cette utilisation, je me dis que quelqu’un de la liste qui a déjà rencontré le problème ou a su configurer correctement ce reverse proxy saura mettre immédiatement le doigt sur le point.
Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Bonjour, rappel: je suis une truffe en réseaux, donc ne pas se fier à mes propos aveuglément la doc officielle -donc celle qui fait référence- sur le reverse proxy nginx est là: https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ si je comprends correctement (c'est loin d'être sûr) ça a l'air de dire que tu dois redéfinir la variable host (valeur $proxy_host par défaut) au moyen de la directive proxy_set_header? mais je raconte peut-être de grosses bêtises.
Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?
Bonjour, Avec nginx configuré en reverse proxy, j’ai un souci pour qu’il passe l’adresse IP du client au serveur web. Il réécrit l’entête en y mettant son adresse IP (cad celle du serveur où est nginx). C’est cette adresse que voit le serveur web à qui il passe la requête et qui ne sait donc pas où se trouve le client (pour une vérification de sécurité). Il y a plein de discussions sur les forums à propos d’ancienne et de nouvelle syntaxe nginx. Vu de loin, ça a l’air simple : contrôler la réécriture des entêtes. En pratique, comment configurer ? Quelle syntaxe ? Merci