Re: HAProxy proxy protocol support
Howard Chu <[email protected]> Thu, 19 Nov 2020 16:04:14 +0000
| Newsgroups | gmane.network.openldap.devel |
|---|---|
| Message-ID | <[email protected]> |
Paul B. Henson wrote: > We currently run our openLDAP service on our campus behind an F5 load balancer which preserves the IP address of the connecting client through to the backend > servers, which we rely on for a small amount of IP address based authorization differentiating between on-campus and off-campus access. > > However, management is strongly pushing us to migrate the service to the Amazon cloud, using Amazon's load balancer. Unfortunately, Amazon's load balancer only > supports client NAT for directing connections to the back end servers, so they have no idea who the actual client is, it just appears to be the load balancer > itself. > > Amazon's solution for that is to support HAProxy's proxy protocol in their load balancer: > > https://www.haproxy.com/blog/haproxy/proxy-protocol/ > > Basically, this is an in band signaling mechanism that inserts an additional header in the initial connection data containing the original client IP > address/source port and destination IP address/source port, allowing the server to utilize that information for the connection rather than the actual details of > the network connection from the proxy itself. > > This requires support from the application running on the server, as it must remove and process that proxy header from the connection data before moving on with > whatever data would normally be passed on the connection. > > There are some fair number of services that support this proxy, including of course HAProxy itself, such as the apache web server and the postfix mail server. > > openLDAP does not support the protocol, and I was unable to find any past discussion of it. > > I was wondering if this feature would be something acceptable for inclusion to openLDAP, or if from an architectural perspective it would be considered > undesirable. > > In general, I believe applications listening on a specific port are either expecting the proxy protocol header, or not, I do not think it is dynamically > determined. As such, from an implementation perspective, my initial thought is that it would be implemented in terms of configuration as an additional URL > specified via the -h option, something like "ldapp://" or "ldap_p://", "ldapsp://" or "ldaps_p://" or whatever seems most desirable. A server might listen on > the standard ports accepting only proxied connections, or it might listen for normal connections on the standard ports and for proxy connections on alternative > ports. Yeah, that agrees with my read of the document. I think "ldapp://" and "ldapsp://" would be usable. > When a connection is accepted on a port marked as requiring the proxy protocol, it would read and process the proxy header to populate the appropriate data > structures regarding connection, and then move on as it normally would to deal with the connection. > > If this feature is of interest, I will probably spend a little time poking at it and seeing how much trouble it will be to implement. Doesn't seem too problematic. I would only support the version 2 (binary) header, seems silly to implement the version 1 support for such an old spec. -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/