Proxy trasparente con squid

Proxy trasparente con squid

Un proxy trasparente è un server proxy che non necessita di alcuna configurazione da parte dell’utente. In ambiente linux può essere facilmente realizzato attraverso squid e iptables.

In questo post vediamo come configurare squid per questo scopo.

Per prima cosa, è necessario che il server in questione faccia da gateway per la rete di host che deve proteggere. Ciò richiede che abbia due interfacce di rete, ad esempio:

  • eth0 (rete interna)
  • eth1 (rete esterna)

Bisogna configurare, anche, delle regole di firewall che garantiscano:

  • connessione diretta (o tramite masquerade) degli host appartenenti alla rete interna (in particolare tramite il protocollo dns).
  • blocco delle connessioni in ingresso verso la rete.

Il proxy server che verrà installato, dovrà essere configurato come http accelerator (caching proxy) e sarà necessario redirezionare tutto il traffico http in transito sulla porta in cui è in esecuzione tale servizio.

Un proxy che permette questa funzionalità è squid (http://www.squid-cache.org).

Configurare Squid

Il file di configurazione di squid è /etc/squid/squid.conf. Per prima cosa occorre definire su quali porte stare in ascolto:
http_port 8080 transparent
Si può eventualmente anche indicare l’interfaccia su cui stare in ascolto nel seguente modo:
http_port 192.168.0.254:8080 transparent
ove 192.168.0.254 è l’indirizzo che ha il server nella rete interna.

La keyword transparent consente di utilizzare squid come http accellerator.

Per le versioni precedenti alla 2.6 era necessaria una sintassi differente:
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Configurazione del firewall

Una volta che il transparent proxy è funzionante, occorre redirigere tutto il traffico http, che è destinato alla porta 80, sulla porta dove sta in ascolto squid 8080. Per fare ciò, basta aggiungere la seguente regola:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Agire sulla catena prerouting implica che tutto il traffico in ingresso e in transito diretto alla porta 80 (non importa indirizzo di sorgente o di destinazione del pacchetto) è rediretto sulla porta 8080.

Si può fare la stessa cosa con https (porta tcp 443) ed ftp (porta tcp 20 e 21).

Share this content: