[PATCH] Add proxy_protocol option to mail listener
Kees Bos
cornelis.bos at gmail.com
Tue Jul 18 13:13:21 UTC 2017
Some inline stuff just to be sure I do understand what you mean.
On di, 2017-07-18 at 15:56 +0300, Maxim Dounin wrote:
> Hello!
>
> On Tue, Jul 18, 2017 at 12:06:09PM +0200, Kees Bos wrote:
>
> >
> > # HG changeset patch
> > # User Kees Bos <cornelis.bos at gmail.com>
> > # Date 1500371531 0
> > # Tue Jul 18 09:52:11 2017 +0000
> > # Node ID 8dd6050ca6858d9bea139067611ca5c69cfe8f18
> > # Parent e3723f2a11b7ec1c196d59c331739bc21d9d9afd
> > Add proxy_protocol option to mail listener
> >
> > Add support for the mail handlers. This enables the use of an
> > upstream
> > loadbalancer/proxy (like haproxy) that connects with the proxy
> > protocol.
> >
> > The original ip (as exposed with the proxy protocol) will be used
> > as
> > parameter for the 'Client-IP' in the authentication call and as
> > address
> > in the XCLIENT call.
> >
> > Optionally (if set), the real ips from the client that are using
> > the
> > proxy protocol can be restricted with "set_real_ip_from".
> This approach looks unsafe and counter-intuitive.
>
> Instead, address should be changed if and only if there is
> set_real_ip_from and it lists a particular client address, much
> like it is done in http and stream modules.
So, "set_real_ip_from" is required as soon as "proxy_protocol" is used
in the listen directive.
Correct?
>
> >
> >
> > Example config:
> > mail {
> > server_name mail.example.com;
> > auth_http localhost:9000/;
> >
> > server {
> > listen 143 proxy_protocol;
> > protocol imap;
> > }
> That is, only parsing of PROXY protocol header should happen here.
And the connection will be closed since "set_real_ip_from" is missing.
Correct?
> >
> >
> > server {
> > listen 25 proxy_protocol;
> > protocol smtp;
> > set_real_ip_from 127.0.0.0/8;
> > set_real_ip_from ::/128;
> And here we can change client's address if a connection was from
> listed addresses.
>
> We may also consider sending the information from the header in
> separate auth_http headers (something like Proxy-Protocol-IP,
> Proxy-Protocol-Port?) regardless of set_real_ip_from. But clearly
> this should be a separate header from Client-IP to make it
> possible for auth_http script to decide if this information should
> be trusted or not.
Would an additional Client-Real-IP and Client-Real-Port be better?
> (There are also multiple style issues in the code. Some are
> outlined below, though I haven't focused on this as the code logic
> is to be changed anyway. Most of the comments apply to more than
> one place.)
Tnx
More information about the nginx-devel
mailing list