HAProxy: come aggiungere l'IP client nelle intestazioni X-Client-IP e X-Forwarded-For?


10

Ho un problema con il server HAProxy. Voglio inoltrare nell'intestazione un IP client. L'ho quasi fatto, ma c'è un caso interessante e non riesco a capirlo. Devo scrivere l'IP client in 2 punti nell'intestazione, nei tag X-CLIENT-IP e X-FORWARDED-FOR.

Il problema è: quando uso

option http-server-close
option forwardfor

Sul server di destinazione vedo nell'intestazione X-FORWARDED-FOR = xxx.xxx.xxx.xxx (ip client) ma non esiste un'intestazione x-client-ip.

Quando uso:

option forwardfor header X-Client-IP
option http-server-close

Sul server di destinazione vedo l'intestazione X-CLIENT-IP = xxx.xxx.xxx (IP client) ma X-FORWARDED-FOR = xxx.xxx.xxx.xxx (IP HAProxy)

Devo vedere nell'intestazione del target dove X-CLIENT-IP e X-FORWARDED-FOR hanno valore dell'IP client.

Provo a mescolare configurazioni come

 option forwardfor
 option forwardfor header X-Client-IP
 option http-server-close

Nessun efetto. Non riesco anche a installare alcun modulo. L'obiettivo è IIS.

Qualche idea? :(

Risposte:


12

Puoi provare a impostare un'intestazione personalizzata, in questo modo:

http-request set-header X-Client-IP %[src]

Oppure puoi anche copiarlo dall'intestazione X-Forwarded-For, penso che la sintassi andrebbe qualcosa del tipo:

http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])

La seconda opzione mi dà nell'intestazione x-client-ip = req.hdr_ip (% 5bX-Forwarded-For% 5d), quindi qualcosa non va. Ma ci proverò per primo.
Kacpro, quindi

X-Client-IP% [src] della richiesta di risoluzione HTTP della prima risoluzione funziona perfettamente.
KacproSo,

L'ultimo esempio è sbagliato, la regola giusta è: http-request set-header X-Client-IP% [req.hdr_ip (X-Forwarded-For)]
Rfraile

X-Client-IP e X-Forwarded-For hanno scopi diversi. Copiare X-Forwarded-For non è sicuro, poiché HAProxy può restituire il valore inviato dal client.
Der_Meister,

5

Se si desidera utilizzare entrambi, è necessario aggiungere il secondo con una http-requestparola chiave.

# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]

Penso che set-header sia meglio rimuovere le intestazioni dannose inviate dal client.
Der_Meister,

@Der_Meister Forse hai ragione, ma non vedo come ciò abbia rilevanza per questa domanda o risposta. Ti interessa elaborare?
GregL

1
Lo scopo dell'intestazione X-Client-IP è dire al backend l'indirizzo IP reale della connessione, non un valore casuale da un'intestazione in arrivo. Non è menzionato nella domanda, voglio solo avvertire i futuri lettori.
Der_Meister,

Ancora una volta, potresti avere ragione, ma in questo esempio, X-CLIENT-IPnon viene impostato dal client, ma piuttosto da HAProxy in base all'IP di origine. Suggerirei di lasciare questi commenti su domande in cui è pertinente per non confondere i lettori.
GregL

add-headernon rimuove X-CLIENT-IPciò che potrebbe essere stato impostato dal client. Questo è il motivo per cui @Der_Meister ha raccomandato di utilizzare set-headerinvece. Suggerisco invece di modificare la risposta da utilizzare set-header.
pistache

0

La risposta suggerita sopra che non ha funzionato per KacproSo doveva solo leggere il valore aggiungendo &[...], quindi dovrebbe funzionare bene:

http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]

0

Provando su HAproxy 1.7 questa è la sintassi corretta che fa funzionare tutto questo, senza le staffe quadrate attorno a X-Forwarded-For

   http-request set-header X-Client-IP %[req.hdr_ip(X-Forwarded-For)]

-2

Puoi installare un modulo chiamato mod_rpaf sui tuoi server back-end. Questo copia l'IP X-FORWARDED-FOR nell'IP X-CLIENT. Per maggiori informazioni vedi questo . Su Windows dovresti avere moduli simili, qualcosa come i filtri X-Forwarded-For ASAPI.


Non può installare alcun modulo ..
neutrinus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.