= PROXY Protocol
:idprefix:
:idseparator: -
:docinfo: shared

As noted in the official https://github.com/haproxy/haproxy/blob/e6a9192af68c5e385aa73c3e1cc51eb9f0cc09d6/doc/proxy-protocol.txt[PROXY Protocol documentation]:

[quote,]
____
The PROXY protocol provides a convenient way to safely transport connection information such as a client's address across multiple layers of NAT or TCP proxies.
____

This essentially allows the broker to know a client's IP address even when the connection is established through reverse proxy that supports the PROXY protocol (e.g. HAProxy, nginx, etc.).
Without PROXY protocol support the broker would see such client connections as coming from the proxy itself which can be misleading for administrators and complicate trouble-shooting.

Both versions 1 & 2 of the PROXY Protocol are supported.

Any of our supported messaging protocols can be used in combination with the PROXY protocol with or without TLS.

== Configuration

Support for the PROXY Protocol is configured on a per-acceptor basis using the `proxyProtocolEnabled` parameter, e.g.:

[,xml]
----
<acceptor name="proxy-artemis">tcp://0.0.0.0:61616?proxyProtocolEnabled=true</acceptor>
----

=== Security

Support for the PROXY Protocol must be explicitly configured due to security reasons.
As noted in the official https://github.com/haproxy/haproxy/blob/master/doc/proxy-protocol.txt[PROXY Protocol documentation]:

[quote,]
____
The receiver MUST be configured to only receive the protocol described in this specification and MUST not try to guess whether the protocol header is present or not.
This means that the protocol explicitly prevents port sharing between public and private access.
Otherwise it would open a major security breach by allowing untrusted parties to spoof their connection addresses.
*The receiver SHOULD ensure proper access filtering so that only trusted proxies are allowed to use this protocol.* [emphasis added]
____

Because of this, an acceptor using `proxyProtocolEnabled=true` can _only_ accept connections using the PROXY protocol and vice versa.

If a client attempts to use (or not use) the PROXY Protocol in violation of the configured value for `proxyProtocolEnabled` the broker will log a warning with the code `AMQ224151` containing details about the violation.

== Management

Client connections established through a reverse proxy configured with PROXY Protocol support will have 2 additional pieces of information compared to non-proxied connections:

proxyAddress::
The IP address and port of the proxy through which the client's connection is established.

proxyProtocolVersion::
The version of the PROXY Protocol used when establishing the connection from the proxy to the broker.
+
Valid values are `V1` and `V2`.

This information is available via the `listConnections` method of the `ActiveMQServerControl`.
On the web console corresponding details will be available in the "Connections" tab.