====== Squid HTTP proxy ======
**ATTENZIONE**! Con la **versione 4** di Squid la sintassi da usare nel file di configurazione per avere un proxy trasparente è cambiata. Vedere il post **[[http://roberts.bplaced.net/index.php/linux-guides/centos-6-guides/proxy-server/squid-transparent-proxy-http-https|Squid Transparent Proxy (HTTP+HTTPs)]]** che addirittura implementa un proxy trasparente anche sul protocollo HTTPS.
===== Configurazione come proxy trasparente =====
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 [[wp>Man_in_the_middle|Man in the middle]]).
==== Versioni precedenti alla 2.6 ====
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
==== Versione 2.6 ====
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
==== Versione 3 e 4 ====
Con le nuove versioni di Squid è necessario definire due porte, una per la funzione di proxy trasparente indicata con l'attributo **intercept** e una standard per il forward proxy:
http_port 8080
http_port 3128 intercept
Senza questa configurazione si ottiene l'errore che impedisce l'avvio del demone:
ERROR: No forward-proxy ports configured.
Rimane ovviamente necessaria la configurazione netfilter per il redirect automatico sulla porta 3128 dei client.
==== Transparent proxy con Shorewall ====
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
===== Rimuovere una pagina dalla cache =====
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