在 HAProxy 中访问代理协议地址

在 HAProxy 中访问代理协议地址

我正在运行 HAProxy,它从上游源接收第 4 层代理协议。我需要创建一个自定义 HTTP 标头,其中包含地址。我似乎找不到如何引用该 TCP 标头。

下面是我正在尝试做的事情的一个示例:

frontend http_in
    bind *:1025 accept-proxy
    mode http
    default_backend http_out

backend http_out
    mode http
    http-request set-header X-Custom-Header %[<ip from proxy protocol header>]
    server some-server some-server:80

我如何确保使用来自 L4 标头的地址而不是某些可欺骗的 http 标头来填充新标头?

答案1

根据文档绑定accept-proxy选项,更一般地说是 PROXY 协议的使用,PROXY 协议头中包含的所有字段(源 IP 和端口、目标 IP 和端口)都替换了真实连接中的字段:

...
PROXY 协议规定了传入
连接的第 3/4 层地址,该地址将在使用地址的任何地方使用,唯一的
例外是“tcp 请求连接”规则,该规则只会看到
真实的连接地址。日志将反映协议中指示的地址
,除非违反协议,在这种情况下
仍将使用真实地址
。...

这意味着你的后端看起来会像这样

backend http_out
    mode http
    http-request set-header X-Custom-Header %[src]
    server some-server some-server:80

这是有效的,因为src示例字段将包含 PROXY 标头中定义的源 IP,而不是实际的源 IP。

相关内容