我们在 AWS 上部署了一个应用程序。在前面,AWS 负载均衡器接受所有传入的 HTTP 请求;EC2 实例直接位于此平衡器后面。在单个实例上,HAproxy 接收所有请求,然后委托给基于 Java 的真实应用程序服务器(在我们的特殊情况下,haproxy 和业务应用程序服务器位于同一个 EC2 实例上,haproxy 不只是为了中继而扮演负载平衡角色http请求,也就是说haproxy和应用服务器是一一对应的)。
当我们尝试对该系统发起 http 调用时:
要求
GET /token HTTP/1.1
Host: xxx.xxx.xxx.xxx
回复
HTTP/1.1 403 Forbidden
X-Forwarded-Proto: https
X-Forwarded-For: xxx.xxx.xxx.xxx
X-Forwarded-Port: 443
X-Forwarded-Host: xx.xx.xx.xxx
Date: Wed, 09 Dec 2015 22:04:06 GMT
Server: WSO2-PassThrough-HTTP
据我了解,X-Forwarded-*应该只出现在服务器端,以便服务器在中间有代理时识别传入请求的来源。我不知道为什么这些标题也会出现在响应中。这让我担心将内部 IP 泄露给潜在的恶意客户端。
以下是 haproxy 设置的代码片段:
frontend worker
bind :443 ssl crt xxx crt xxx crt xx accept-proxy no-sslv3 no-tls-tickets
mode http
acl forwarded hdr_cnt(X-Forwarded-Host) gt 0
acl trusted src 127.0.0.0/24
capture request header X-Forwarded-For len 64
default_backend worker
http-request deny if METH_TRACE
http-request set-header X-Forwarded-Host %[dst] unless forwarded trusted
http-request set-header X-Forwarded-Port %[dst_port]
http-request set-header X-Forwarded-Proto https if { ssl_fc }
option forwardfor if-none
reqidel ^X-Forwarded-For:.* unless trusted
rspadd Strict-Transport-Security:\ max-age=63072000;\ includeSubdomains;\ preload
use_backend xxx.xxx.xxx if { ssl_fc_sni -i xxx.xxx.xxx }
use_backend xxx.xxx.xxx if { ssl_fc_sni -i xxx.xxx.xxx }
请告知为什么这些非标准标头出现在 http 响应中,以及这是否有安全风险。