代理协议过滤器 (proto)

此扩展的限定名称为 envoy.filters.listener.proxy_protocol

注意

此扩展旨在对不受信任的下游流量具有鲁棒性。它假设上游是可信的。

提示

此扩展扩展了以下扩展类别,并且可以与之一起使用

此扩展必须配置以下类型 URL 之一

代理协议监听器过滤器。

extensions.filters.listener.proxy_protocol.v3.ProxyProtocol

[extensions.filters.listener.proxy_protocol.v3.ProxyProtocol proto]

{
  "rules": [],
  "allow_requests_without_proxy_protocol": ...,
  "pass_through_tlvs": {...},
  "disallowed_versions": [],
  "stat_prefix": ...
}
规则

(repeated extensions.filters.listener.proxy_protocol.v3.ProxyProtocol.Rule) 要应用于请求的规则列表。

allow_requests_without_proxy_protocol

(bool) 允许不使用代理协议的请求通过。默认值为 false。

注意

这会破坏与规范的一致性。仅在监听器的所有流量都来自可信来源时才启用。有关此功能的安全含义的更多信息,请参见 https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt

注意

匹配代理协议 v2 签名的 12 字节或更少的请求以及匹配代理协议 v1 签名的 6 字节或更少的请求将超时(Envoy 无法区分这些请求与不完整的代理协议请求)。

pass_through_tlvs

(config.core.v3.ProxyProtocolPassThroughTLVs) 此配置控制哪些 TLV 可以传递到过滤器状态,如果它是代理协议 V2 标头。如果此字段没有设置,则不会传递任何 TLV。

注意

如果配置了此选项,您可能还想设置 core.v3.ProxyProtocolConfig.pass_through_tlvs,它控制上游的传递。

disallowed_versions

(repeated config.core.v3.ProxyProtocolConfig.Version) 不会匹配的代理协议版本。有助于限制过滤器的范围和攻击面。

当过滤器接收到被禁止的代理协议数据时,它将拒绝连接。默认情况下,过滤器将匹配所有代理协议版本。有关详细信息,请参见 https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt

注意

当与 allow_requests_without_proxy_protocol 结合使用时,过滤器将不会尝试匹配被禁止版本的签名。例如,当 disallowed_versions=V2allow_requests_without_proxy_protocol=true 以及传入请求匹配 V2 签名时,过滤器将允许请求通过,而无需任何修改。过滤器将此请求视为没有任何代理协议信息。

stat_prefix

(string) 为过滤器发出统计信息时要使用的可读前缀。如果未配置,则统计信息将发出,但没有前缀部分。有关更多信息,请参见 过滤器的统计信息文档

extensions.filters.listener.proxy_protocol.v3.ProxyProtocol.KeyValuePair

[extensions.filters.listener.proxy_protocol.v3.ProxyProtocol.KeyValuePair proto]

{
  "metadata_namespace": ...,
  "key": ...
}
metadata_namespace

(string) 命名空间 — 如果为空,则将使用过滤器的命名空间。

key

(string, REQUIRED) 要在命名空间内使用的键。

extensions.filters.listener.proxy_protocol.v3.ProxyProtocol.Rule

[extensions.filters.listener.proxy_protocol.v3.ProxyProtocol.Rule proto]

Rule 定义了在存在或不存在标头时要应用的元数据。

{
  "tlv_type": ...,
  "on_tlv_present": {...}
}
tlv_type

(uint32) 触发规则的类型 - 必需的 TLV 类型在代理协议中定义为 uint8_t。有关详细信息,请参见 规范

on_tlv_present

(extensions.filters.listener.proxy_protocol.v3.ProxyProtocol.KeyValuePair) 如果存在 TLV 类型,则应用此元数据 KeyValuePair。