[squid-users] transparently proxy squid in a docker container

Amos Jeffries squid3 at treenet.co.nz
Wed Feb 24 10:52:48 UTC 2021


On 24/02/21 3:14 pm, Justin Michael Schwartzbeck wrote:
> Hi all,
> 
> For some years I have used squid 3.5 with SSL bump and transparent proxy 
> locally on my laptop. I have been using the following in my squid.conf:
> 
> 
> ssl_bump server-first all
> http_port 3128
> http_port 3129 intercept
> http_port 3130 ssl-bump intercept generate-host-certificates=on 
> dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/bluestar.crt 
> key=/etc/squid/ssl/bluestar.pem
> 
> 
> So if I want to manually set the proxy on the client side, I use port 
> 3128, but by default all http/https traffic is redirected to port 3129 
> and 3130, respectively. Here are my iptables rules:
> 
> 
> iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner 
> root -j RETURN
> iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner 
> dockeruser -j RETURN
> iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT 
> --to-ports 3129
> iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -m owner --uid-owner 
> root -j RETURN
> iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -m owner --uid-owner 
> dockeruser -j RETURN
> iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j REDIRECT 
> --to-ports 3130
> 

These rules are inside the container, yes?


> 
> dockeruser is the user that starts the docker container, and proxy is 
> the actual squid user. I didn't know which one I needed a rule for, so I 
> just chose both.
> 

Should be the "effective user" Squid runs as. Apparently "proxy" from 
that description.


> As I said before, this worked great when I was running squid 3.5 on bare 
> metal. Now I am running squid 4 in a docker container. I am seeing the 
> following error many times in the squid logs when I try to use the 
> transparent proxy:
> 
> 
> 2021/02/24 01:45:17| WARNING: Forwarding loop detected for:
> 

Something on the network is routing traffic back to Squid. The most 
common cause is missing or broken policy routing rules on a router.

Be aware that for containers or virtual systems the host OS may be 
acting as a router for the container. As such it needs policy routing 
like any other.
  see 
<https://wiki.squid-cache.org/ConfigExamples/Intercept/IptablesPolicyRoute> 
has details of rules needed, assuming your host OS is a Linux.


Amos


More information about the squid-users mailing list