Re: Comment régler nginx comme reverse proxy pour qu’il transmette l’adresse IP du client ?

2023-08-21 Par sujet Michel Verdier
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 ?

2023-08-21 Par sujet RogerT



> 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 ?

2023-08-21 Par sujet François TOURDE
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 ?

2023-08-20 Par sujet Michel Verdier
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 ?

2023-08-20 Par sujet Jacques

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 ?

2023-08-20 Par sujet RogerT



> 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 ?

2023-08-20 Par sujet Michel Verdier
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 ?

2023-08-20 Par sujet Michel Verdier
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 ?

2023-08-19 Par sujet RogerT



> 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 ?

2023-08-19 Par sujet François TOURDE
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 ?

2023-08-19 Par sujet RogerT



> 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 ?

2023-08-19 Par sujet Michel Verdier
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 ?

2023-08-19 Par sujet RogerT



> 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 ?

2023-08-19 Par sujet François TOURDE
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 ?

2023-08-19 Par sujet RogerT


> 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 ?

2023-08-19 Par sujet François TOURDE
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 ?

2023-08-18 Par sujet yamo'
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 ?

2023-08-18 Par sujet RogerT



> 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 ?

2023-08-18 Par sujet didier gaumet

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 ?

2023-08-18 Par sujet RogerT
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