From ArchWiki

iptables rules

I'm not sure if these also apply when using shorewall. This is based on the following assumptions:

  • iptables server is the gateway server
  • squid is listening on port 3128
  • local network is connecting to the server is and already has basic nat rules set up
  • iptables server is

It took me a while to realise that in addition to redirecting the traffic, the squid port needed to be opened before it would work:

echo " # open access to proxy - squid - port 3128"
$IPTABLES -A open -p tcp --syn --dport 3128 -j ACCEPT

echo " # Transparently forward http traffic to Squid"
$IPTABLES -t nat -A PREROUTING -i eth0 ! -d -p tcp --dport 80 -j REDIRECT --to-port 3128


I couldn't get the example working at all, however looking at gave me the following setup that I then save using iptables-save and it works like a charm. After downgrading from squid 3.4.3 to 3.4.2, something is off with 3.4.3.


# your proxy IP

# your proxy listening port (port 8080 intercept in squid.conf)

iptables -t nat -F
iptables -t nat -A PREROUTING -s $SQUIDIP -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination $SQUIDIP:$SQUIDPORT
iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -t mangle -F
iptables -t mangle -A PREROUTING -p tcp --dport $SQUIDPORT -j DROP