This is a possible regsub() to extract the next-to-last IP address (it assumes 
at lest two are available):

    set req.http.X-Client-Ip = regsub(
        req.http.X-Forwarded-For,
        "^.*(?:^|,)\s*([^,\s]+)\s*,[^,]+$", 
        "\1");

Best,

--
Carlos Abalde

> On 20 Aug 2021, at 13:08, Justin Lloyd <[email protected]> wrote:
> 
> I was just trying to get varnish-modules to build (having to install varnish 
> and build tools on my dev manager server) and hit the limitation that 
> vmod_str isn’t available until Varnish 6.6. I’m on Varnish 6.5 so I’d need to 
> test the 6.6 upgrade in dev and then roll that out to live, which will take 
> some time (higher priority and urgency issues and projects on my plate). I’ll 
> play with regsub() some more to see if I can figure out a temporary approach.
>  
> Thanks,
> Justin
>  
>  
> From: varnish-misc <[email protected]> 
> On Behalf Of Justin Lloyd
> Sent: Thursday, August 19, 2021 2:39 PM
> To: Guillaume Quintard <[email protected]>; Carlos Abalde 
> <[email protected]>
> Cc: [email protected]
> Subject: RE: Varnish and AWS ALBs
>  
> Hi Guillaume!
>  
> It looks like you and Carlos are both correct. For some reason, before I was 
> not seeing the Varnish XFF values from faked XFFs, not sure why, but now I’m 
> seeing the fakes I’m using against one of my dev sites and I’m seeing the 
> three values where it’s FAKED_IP, REAL_IP, ALB_IP. So with a little bit more 
> VCL code (or probably easier once I move to Varnish Enterprise next year), I 
> should be able to handle this. I’ll give it a whirl and see how it goes.
>  
> Thanks!
>  
> Justin
>  
>  
> From: Guillaume Quintard <[email protected] 
> <mailto:[email protected]>> 
> Sent: Thursday, August 19, 2021 2:00 PM
> To: Carlos Abalde <[email protected] <mailto:[email protected]>>
> Cc: Justin Lloyd <[email protected] <mailto:[email protected]>>; 
> [email protected] <mailto:[email protected]>
> Subject: Re: Varnish and AWS ALBs
>  
> Hi,
>  
> If I read this correctly: 
> https://docs.aws.amazon.com/elasticloadbalancing/latest/application/x-forwarded-headers.html
>  
> <https://docs.aws.amazon.com/elasticloadbalancing/latest/application/x-forwarded-headers.html>
>  , you can trust the before-last IP, because it was added by the ALB, always. 
> (and using vmod_str makes it easy to retrieve 
> https://github.com/varnish/varnish-modules/blob/master/src/vmod_str.vcc#L42 
> <https://github.com/varnish/varnish-modules/blob/master/src/vmod_str.vcc#L42>)
>  
> Side question: would an NLB work? They support proxy-protocol, that would 
> also solve your problem.
>  
> Cheers,
>  
> -- 
> Guillaume Quintard
>  
>  
> On Thu, Aug 19, 2021 at 1:52 PM Carlos Abalde <[email protected] 
> <mailto:[email protected]>> wrote:
> Hi,
>  
> No so sure about that. Let's assume the client address is 1.1.1.1. Two 
> possible scenarios:
>  
> - The client request reaches the ALB without XFF. The ALB will inject XFF 
> with value 1.1.1.1. Then Varnish will modify XFF adding the ALB's address 
> (i.e., 1.1.1.1,<ALB IP>). Using the next-to-last IP you're using the right 
> client address.
>  
> - The client request reaches the ALB with a forged XFF (e.g. 127.0.0.1). The 
> ALB will will modify XFF (i.e. 127.0.0.1,1.1.1.1). The Varnish will do the 
> same (i.e. 127.0.0.1,1.1.1.1,<ALB IP>). Using the next-to-last IP you're 
> still using the right client address.
>  
> I've not checked using a ALB, but that should be the expected behaviour for 
> me.
>  
> Best,
>  
> --
> Carlos Abalde
>  
> _______________________________________________
> varnish-misc mailing list
> [email protected] <mailto:[email protected]>
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc 
> <https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc>
_______________________________________________
varnish-misc mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc

Reply via email to