====== 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