Con questa configurazione i client non devono impostare il browser per utilizzare il proxy sulla porta 3128, ma automaticamente il firewall Linux intercetta la chiamata verso la porta HTTP di un server esterno e la ridirige verso la porta 3128 del proxy locale.
L'unico inconveniente di questa configurazione è che non funziona per il protocollo HTTPS (ovviamente, altrimenti Squid avrebbe attuato un attacco Man in the middle).
Prima della versione 2.6 la configurazione come proxy trasparente è praticamente un hack che sfrutta le opzioni httpd_accel_ (nate per far lavorare Squid come acceleratore di server httpd, non come cache). Bisogna configurare Squid e aggiungere una regola netfilter.
La configurazione di Squid (/etc/squid/squid.conf) prevede queste righe aggiuntive:
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
La regola netfilter da impostare è la seguente (supponendo che le richieste dalla rete locale provengano da eth0):
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Nelle versioni più recenti c'è un parametro apposito per il funzionamento in modo proxy trasparente, in /etc/squid/squid.conf si mettono le direttive:
http_port 3128 transparent # NOTE: This directive is not related to caching. The replies # is cached as usual even if you use always_direct. # This directive is required for transparent proxy. always_direct allow all
Questo istruisce Squid a mettersi in ascolto sulla porta indicata e a funzionare come proxy trasparente. Ovviamente la regola netfilter rimane necessaria.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Se si utilizza il firewall shorewall, la regola netfilter può essere ottenuta con questa riga in /etc/shorewall/rules:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ # PORT PORT(S) DEST LIMIT GROUP REDIRECT loc 3128 tcp www - !192.168.0.10
L'indirizzo 192.168.0.10 in questo caso è il firewall/server proxy stesso, che ospita alcuni siti web il cui accesso non deve passare dal proxy.
L'equivalente ricetta direttamente in iptables sarebbe:
iptables -t nat -I PREROUTING -i eth0 -p tcp -d !192.168.0.10 --dport 3128 -j REDIRECT --to-ports 3128
Se Squid è configurato come proxy trasparente potrebbe essere difficile forzare l'aggiornamento di un documento web.
Per forzare il purge bisogna installare il pacchetto squidclient ed eseguire:
squidclient -r http://debian.gfoss.it/dists/lenny/Release.gpg