HAProxy-如何在X-Client-IP和X-Forwarded-For标头中附加客户端IP?


10

我的HAProxy服务器有问题。我想在标题中转发客户端IP。我几乎做到了,但是有一个有趣的案例,我无法弄清楚。我需要在X-CLIENT-IP和X-FORWARDED-FOR标记的标头的2个地方写入客户端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。

有任何想法吗?:(

Answers:


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 2015年

第一种分辨率的http-request设置标头X-Client-IP%[src]完美地工作。
KacproSo 2015年

最后一个例子是错误的,正确的规则是:http-request set-header X-Client-IP%[req.hdr_ip(X-Forwarded-For)]
Rfraile

X-Client-IP和X-Forwarded-For具有不同的用途。复制X-Forwarded-For是不安全的,因为HAProxy可以返回客户端发送的值。
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-header不会删除X-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.