HAProxy - jak dołączyć adres IP klienta w nagłówkach X-Client-IP i X-Forwarded-For?

11

Mam problem z serwerem HAProxy. Chcę przekazać w nagłówku adres IP klienta. Prawie to zrobiłem, ale jest ciekawy przypadek i nie mogę tego rozgryźć. Muszę napisać adres IP klienta w 2 miejscach w nagłówku, w tagach X-CLIENT-IP i X-FORWARDED-FOR.

Problemem jest: kiedy używam

option http-server-close
option forwardfor

Na serwerze docelowym widzę w nagłówku X-FORWARDED-FOR = xxx.xxx.xxx.xxx (klient ip), ale nie ma nagłówka x-client-ip.

Kiedy używam:

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

Na serwerze docelowym widzę nagłówek X-CLIENT-IP = xxx.xxx.xxx (adres IP klienta), ale X-FORWARDED-FOR = xxx.xxx.xxx.xxx (HAProxy ip)

Muszę zobaczyć w nagłówku docelowym, gdzie X-CLIENT-IP i X-FORWARDED-FOR ma wartość adresu IP klienta.

Próbuję łączyć konfiguracje jak

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

Bez wpływu. Nie mogę również zainstalować żadnych modułów. Celem jest IIS.

Jakieś pomysły? :(

KacproSo
źródło

Odpowiedzi:

13

Możesz spróbować skonfigurować niestandardowy nagłówek:

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

Lub możesz nawet skopiować go z nagłówka X-Forwarded-For, myślę, że składnia wyglądałaby tak:

http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])
Jakov Sosic
źródło
Druga opcja podaj mi w nagłówku x-client-ip = req.hdr_ip (% 5bX-Forwarded-For% 5d), więc coś jest nie tak. Ale spróbuję pierwszy.
KacproSo
Zestaw HTTP nagłówka żądania pierwszej rozdzielczości X-Client-IP% [src] działa idealnie.
KacproSo,
Ostatni przykład jest źle, prawo zasada: http-request set-nagłówek X-Client-IP% [req.hdr_ip (X-Przekazano-For)]
Rfraile
X-Client-IP i X-Forwarded-For mają różne cele. Kopiowanie X-Forwarded-For nie jest bezpieczne, ponieważ HAProxy może zwrócić wartość wysłaną przez klienta.
Der_Meister
5

Jeśli chcesz używać obu, musisz dodać drugi ze http-requestsłowem kluczowym.

# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]
GregL
źródło
Myślę, że lepiej jest usunąć nagłówek wysyłany z klienta przez set-header.
Der_Meister
@Der_Meister Być może masz rację, ale nie rozumiem, jak ma to związek z tym pytaniem lub odpowiedzią. Możesz rozwinąć temat?
GregL
1
Celem nagłówka X-Client-IP jest przekazanie backendowi rzeczywistego adresu IP połączenia, a nie losowej wartości z przychodzącego nagłówka. Nie wspomniano w pytaniu, chcę tylko ostrzec przyszłych czytelników.
Der_Meister
Ponownie możesz mieć rację, ale w tym przykładzie X-CLIENT-IPklient nie ustawia tej wartości, a raczej HAProxy na podstawie źródłowego adresu IP. Sugeruję pozostawienie tych komentarzy w pytaniach, w których jest to właściwe, aby nie mylić czytelników.
GregL
add-headernie usuwa X-CLIENT-IPustawień, które mogły zostać ustawione przez klienta. Dlatego @Der_Meister zaleca użycie set-headerzamiast tego. set-headerZamiast tego sugeruję edycję odpowiedzi .
pistache
0

Sugerowana odpowiedź powyżej, która nie zadziałała dla KacproSo, po prostu trzeba było odczytać wartość dodając &[...], więc powinno to działać dobrze:

http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]
użytkownik489680
źródło
0

Próbowanie na HAproxy 1.7 to poprawna składnia, która sprawia, że ​​działa, bez kwadratowych hamulców wokół X-Forwarded-For

   http-request set-header X-Client-IP %[req.hdr_ip(X-Forwarded-For)]
użytkownik3540644
źródło
-2

Możesz zainstalować moduł o nazwie mod_rpaf na swoich serwerach zaplecza. Spowoduje to skopiowanie X-FORWARDED-FOR IP na X-CLIENT-IP. Aby uzyskać więcej informacji, zobacz to . W systemie Windows powinieneś mieć podobne moduły, coś w rodzaju filtrów X-Forwarded-For ASAPI.

Jeroen
źródło
Nie może zainstalować żadnych modułów ..
neutrinus