Greetings all,

squid.conf references the ability to use the x-forwarded-for header in ACLs by 
using the follow_x_forwarded_for in ACL, referenced here: 
http://www.squid-cache.org/Doc/config/follow_x_forwarded_for/ and here 
http://www.squid-cache.org/Doc/config/acl_uses_indirect_client/

There appear to be three pre-reqs, which I've met:

squid.conf: acl_uses_indirect_client on
squid built with --enable-follow-x-forwarded-for (confirmed)
and the appropriate ACL entries (see below)

In my scenario, I have a pair of squid hosts (squid ver 3.5.6) sitting behind a 
pair of haproxy/keepalived hosts which provide balancing and 
redundancy/availability.  Haproxy is configured to add an x-forwarded-for 
header (if one doesn't already exist) and I can see the x-forwarded-for header 
in the request if I run packet capture on the squid hosts.

For this scenario, I have a box sitting on the 192.168.4.0/24 network, which 
has access to three IPs on 192.168.2.0/24 network (2.30, 2.31, and 2.32 which 
are haproxy1, haproxy2, and keepalived vIP respectively).  Hosts wanting 
internet access must using the haproxy-vip as a proxy IP, which is then 
forwarded to the real squid backends.  To sum up:

haproxy1 - 192.168.2.30
haproxy2 - 192.168.2.31
haproxy-vip - 192.168.2.32
squid1 - 192.168.2.128
squid2 - 192.168.2.129
zone1 - 192.168.3.0/24 with hosts having a proxy configured as 192.168.2.32:3128
client1 - 192.168.4.31 with a proxy configured as 192.168.2.32:3128

Squid will see the real-ip of the client connection as the haproxy-vip endpoint 
and not the real-client IP.  If I understand the documentation correctly, I 
should be able to perform something like the following in an ACL:

# create acl source references
acl zone1 src 192.168.3.0/24
acl client1 src 192.168.4.31/32

# acl to test x-forwarded-for matching header
acl testing_proxy_dst dstdomain .google.com
follow_x_forwarded_for allow zone1 testing_proxy_dst
follow_x_forwarded_for allow client1 testing_proxy_dst

When I attempt to perform a wget (testing) to 
www.google.com<http://www.google.com> from my client1, I'm getting a permission 
denied:

# wget www.google.com
--2019-06-06 08:20:30--  http://www.google.com/
Connecting to 192.168.2.32:3128... connected.
Proxy request sent, awaiting response... 403 Forbidden
2019-06-06 08:20:30 ERROR 403: Forbidden.

If I change the proxy (and corresponding relevant http_access acl ) so that the 
client goes direct to the squid host, the client is allowed.

Any help would be greatly appreciated.

Joey


_______________________________________________
squid-users mailing list
squid-users@lists.squid-cache.org
http://lists.squid-cache.org/listinfo/squid-users

Reply via email to