Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SQUID] Ip source réelle

5 réponses
Avatar
rde
Bonjour à tous,


Voilà mon problème :
j'ai un serveur web apache sur une machine
j'ai un squid sur la même machine, utilisé en reverse proxy transparent
pour faire du cache et accélérer + alléger mon serveur web

Voici donc en gros le chemin d'une requête venant d'internet :
INTERNET ---> SQUID ---> APACHE ---> SQUID ---> INTERNET
ou
INTERNET ---> SQUID ---> INTERNET (si la page est dans le cache)

Le problème est que du coup Apache voit toutes les requêtes provenant de
l'IP locale (192.168.X.X), et non pas l'IP source de la requête !

Est-ce que quelqu'un saurait si c'est possible de faire en sorte
qu'apache voit l'ip source réelle ?

D'avance merci


Romaric

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

5 réponses

Avatar
Pascal Hambourg
Salut,

a écrit :

j'ai un serveur web apache sur une machine
j'ai un squid sur la même machine, utilisé en reverse proxy transparent
pour faire du cache et accélérer + alléger mon serveur web

Voici donc en gros le chemin d'une requête venant d'internet :
INTERNET ---> SQUID ---> APACHE ---> SQUID ---> INTERNET
ou
INTERNET ---> SQUID ---> INTERNET (si la page est dans le cache)

Le problème est que du coup Apache voit toutes les requêtes provenant de
l'IP locale (192.168.X.X), et non pas l'IP source de la requête !

Est-ce que quelqu'un saurait si c'est possible de faire en sorte
qu'apache voit l'ip source réelle ?



Tu peux utiliser l'en-tête HTTP X-Forwarded-For qui est ajoutée par squid.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Romaric DEFAUX
Pascal Hambourg a écrit :
Salut,

a écrit :

j'ai un serveur web apache sur une machine
j'ai un squid sur la même machine, utilisé en reverse proxy
transparent pour faire du cache et accélérer + alléger mon serveur web

Voici donc en gros le chemin d'une requête venant d'internet :
INTERNET ---> SQUID ---> APACHE ---> SQUID ---> INTERNET
ou
INTERNET ---> SQUID ---> INTERNET (si la page est dans le cache)

Le problème est que du coup Apache voit toutes les requêtes provenant
de l'IP locale (192.168.X.X), et non pas l'IP source de la requête !

Est-ce que quelqu'un saurait si c'est possible de faire en sorte
qu'apache voit l'ip source réelle ?



Tu peux utiliser l'en-tête HTTP X-Forwarded-For qui est ajoutée par
squid.



Premièrement merci de ta réponse rapide :)

C'est donc un paramètre à changer au niveau d'apache ? Tu saurais me
mettre sur une piste ?
Et pour éclairer un peu plus mon problème, c'est que je veux appliquer
certaines règles de réécritures au niveau du vhost selon l'IP source.
Pour l'instant j'utilise un truc du genre :
RewriteCond %{REMOTE_HOST} !192.168.X.X
C'est peut-être là que je ne devrais pas utiliser REMOTE_HOST mais autre
chose...
Pareil au niveau des logs d'apache, j'utilise les customLog "combined",
faut peut-être que je modifie ça...

Bon je cherche et si je trouve la solution je l'envoie sur la mailing.
En attendant, si tu sais comment faire n'hésite pas à me le dire ;) !

D'avance merci !


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Pascal Hambourg
Romaric DEFAUX a écrit :
Pascal Hambourg a écrit :

Tu peux utiliser l'en-tête HTTP X-Forwarded-For qui est ajoutée par
squid.





Ajouté, bordel. *Un* en-tête.

C'est donc un paramètre à changer au niveau d'apache ?



Je suppose.

Tu saurais me mettre sur une piste ?



Non, désolé. Je mets le nez dans apache moins d'une fois tous les deux
ans, et entre-temps j'oublie à peu près tout. De toute façon je n'ai
utilisé X-Forwarded-For qu'en PHP il y a une éternité, pas directement
avec apache.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Romaric DEFAUX
Romaric DEFAUX a écrit :
Pascal Hambourg a écrit :
Salut,

a écrit :

j'ai un serveur web apache sur une machine
j'ai un squid sur la même machine, utilisé en reverse proxy
transparent pour faire du cache et accélérer + alléger mon serveur web

Voici donc en gros le chemin d'une requête venant d'internet :
INTERNET ---> SQUID ---> APACHE ---> SQUID ---> INTERNET
ou
INTERNET ---> SQUID ---> INTERNET (si la page est dans le cache)

Le problème est que du coup Apache voit toutes les requêtes
provenant de l'IP locale (192.168.X.X), et non pas l'IP source de la
requête !

Est-ce que quelqu'un saurait si c'est possible de faire en sorte
qu'apache voit l'ip source réelle ?



Tu peux utiliser l'en-tête HTTP X-Forwarded-For qui est ajoutée par
squid.



Premièrement merci de ta réponse rapide :)

C'est donc un paramètre à changer au niveau d'apache ? Tu saurais me
mettre sur une piste ?
Et pour éclairer un peu plus mon problème, c'est que je veux appliquer
certaines règles de réécritures au niveau du vhost selon l'IP source.
Pour l'instant j'utilise un truc du genre :
RewriteCond %{REMOTE_HOST} !192.168.X.X
C'est peut-être là que je ne devrais pas utiliser REMOTE_HOST mais
autre chose...
Pareil au niveau des logs d'apache, j'utilise les customLog
"combined", faut peut-être que je modifie ça...

Bon je cherche et si je trouve la solution je l'envoie sur la mailing.
En attendant, si tu sais comment faire n'hésite pas à me le dire ;) !

D'avance merci !




J'ai trouvé !

Squid ajoute un en-tête de la forme X-Forwarded-For "127.0.0.1, W.X.Y.Z"
où W.X.Y.Z est l'IP d'origine (c'est lié à ma conf de SQUID je suppose,
en transparent avec une règle de nat dans iptable, d'où le 127.0.0.1).
Si l'IP source est locale, (j'ai testé en faisant un lynx), l'en-tête
X-Forwarded-For est vide.

Du coup j'ajoute la condition suivante avant mes règles :

RewriteCond %{HTTP:X-Forwarded-For} .*,.*

pour qu'elles ne s'appliquent que lorsque l'IP source réelle est externe.

Youpi !!!

Romaric

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Pascal Hambourg
Romaric DEFAUX a écrit :

Squid ajoute un en-tête de la forme X-Forwarded-For "127.0.0.1, W.X.Y.Z"
où W.X.Y.Z est l'IP d'origine (c'est lié à ma conf de SQUID je suppose,
en transparent avec une règle de nat dans iptable, d'où le 127.0.0.1).
Si l'IP source est locale, (j'ai testé en faisant un lynx), l'en-tête
X-Forwarded-For est vide.

Du coup j'ajoute la condition suivante avant mes règles :

RewriteCond %{HTTP:X-Forwarded-For} .*,.*

pour qu'elles ne s'appliquent que lorsque l'IP source réelle est externe.



Attention, je ne sais pas ce que tu veux faire exactement mais le
contenu de X-Forwarded-For peut contenir plus d'adresses si la requête
initiale provient d'un proxy qui a transmis cet en-tête. Et si c'est un
proxy inconnu dans lequel tu n'as pas confiance, c'est son adresse à lui
(la seconde en partant de la gauche, donc) qu'il faut prendre en compte.

Merci du retour.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact