HAProxy-X-Client-IP 및 X-Forwarded-For 헤더에 클라이언트 IP를 추가하는 방법은 무엇입니까?


10

HAProxy 서버에 문제가 있습니다. 클라이언트 IP를 헤더로 전달하고 싶습니다. 거의 다했지만 흥미로운 경우가 있으며 알아낼 수 없습니다. X-CLIENT-IP 및 X-FORWARDED-FOR 태그에서 헤더의 두 위치에 클라이언트 IP를 작성해야합니다.

문제는 내가 사용할 때

option http-server-close
option forwardfor

대상 서버에서 헤더 X-FORWARDED-FOR = xxx.xxx.xxx.xxx (client ip)에 x-client-ip 헤더가 없습니다.

내가 사용할 때 :

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

대상 서버에서 헤더 X-CLIENT-IP = xxx.xxx.xxx (클라이언트 IP)이지만 X-FORWARDED-FOR = xxx.xxx.xxx.xxx (HAProxy ip)

X-CLIENT-IP와 X-FORWARDED-FOR이 클라이언트 IP의 가치를 갖는 대상 헤더를 볼 필요가 있습니다.

나는 같은 구성을 혼합하려고합니다.

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

효과가 없습니다. 모듈을 설치할 수도 없습니다. 대상은 IIS입니다.

어떤 아이디어? :(

답변:


12

다음과 같이 사용자 정의 헤더를 설정할 수 있습니다.

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

또는 X-Forwarded-For 헤더에서 복사 할 수도 있습니다. 구문은 다음과 같습니다.

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

두 번째 옵션은 x-client-ip = req.hdr_ip (% 5bX-Forwarded-For % 5d) 헤더에 표시하므로 문제가 있습니다. 그러나 나는 먼저 시도합니다.
KacproSo

첫 번째 해결책 http-request set-header X-Client-IP % [src]가 완벽하게 작동합니다.
KacproSo

마지막 예가 잘못되었습니다. 올바른 규칙은 다음과 같습니다. http-request set-header X-Client-IP % [req.hdr_ip (X-Forwarded-For)]
Rfraile

X-Client-IP와 X-Forwarded-For의 목적은 다릅니다. HAProxy는 클라이언트가 보낸 값을 반환 할 수 있기 때문에 X-Forwarded-For를 복사하는 것은 안전하지 않습니다.
Der_Meister

5

두 가지를 모두 사용하려면 http-request키워드를 사용 하여 두 번째를 추가해야 합니다.

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

set-header가 클라이언트에서 보낸 악성 헤더를 제거하는 것이 좋습니다.
Der_Meister

@Der_Meister 당신이 옳을 수도 있지만, 이것이이 질문이나 답변과 어떤 관련이 있는지는 모르겠습니다. 정교하게 관리?
GregL

1
X-Client-IP 헤더의 목적은 들어오는 헤더의 임의 값이 아니라 연결의 실제 IP 주소를 백엔드에 알리는 것입니다. 그것은 질문에 언급되지 않았으며 미래 독자들에게 경고하고 싶습니다.
Der_Meister

다시 말하지만,이 예제에서는 X-CLIENT-IP클라이언트가 아니라 소스 IP를 기반으로하는 HAProxy에 의해 설정됩니다. 독자들에게 혼란을주지 않기 위해 관련 있는 질문에 대해서는이 의견을 남겨 두는 것이 좋습니다 .
GregL

add-headerX-CLIENT-IP클라이언트가 설정 한 것을 제거하지 않습니다 . @Der_Meister가 set-header대신 사용 하는 것이 좋습니다 . set-header대신 사용할 수 있도록 답변을 수정하시기 바랍니다 .
pistache

0

Kacpro에서는 작동하지 않는 위의 제안 된 답변 따라서을 추가하여 값을 읽으면 &[...]되었으므로 제대로 작동합니다.

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

0

HAproxy 1.7을 시도하면 이것이 X-Forwarded-For 주변의 사각형 브레이크 없이이 작업을 수행하는 올바른 구문입니다

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

-2

백엔드 서버에 mod_rpaf라는 모듈을 설치할 수 있습니다. X-FORWARDED-FOR IP가 X-CLIENT-IP에 복사됩니다. 자세한 내용은 이것을 참조 하십시오 . Windows에서는 X-Forwarded-For ASAPI 필터와 같은 유사한 모듈이 있어야합니다.


그는 어떤 모듈도 설치할 수 없습니다.
neutrinus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.