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: