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

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])

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]

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])]

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)]

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


Nie może zainstalować żadnych modułów ..
neutrinus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.