Piero V.

Squid come proxy trasparente

Ecco una guida su come usare il server proxy/cache in modalità trasparente con controllo di clamav e dansguardian.

Articolo rilasciato sotto licenza GNU FDL 1.3.

Le interfacce di rete usate sono eth0 come interfaccia per la rete esterna. In questo caso ha IP statico (10.0.2.15) ma può avere anche IP dinamico. La rete tra le macchine che devono essere dietro il proxy è eth1 e ha indirizzo IP statico (192.168.56.10). Se qualcuno ha confidenza con virtualbox si accorgerà che quisti sono i suoi tipici IP.

Per la guida userò debian ma qualunque distro andrà bene, basta cambiare il gestore di pacchetti.

Installiamo squid, clamav e dansguardian.

apt-get install squid clamav clamav-daemon clamav-freshclam dansguardian

Per prima cosa configuriamo squid.

Il file di configurazione l’ho preso da FaberLibertatis.org.

Spostiamo il file di configurazione originale con mv /etc/squid/squid.conf /etc/squid/squid.conf.default e ora facciamone uno noi salvandolo su /etc/squid/squid.conf

# File: squid.conf
# Autore originale Stefano Sasso (ste A dscnet PUNTO org)
# File preso da http://faberlibertatis.org/wiki/Squid_Mini_HOWTO

# TAG: http_port : la posta in cui squid resta in ascolto
http_port 192.168.56.10:3128 transparent # Cambiare col vostro IP

# TAG: visible_hostname : il nome host che verrà visto
visible_hostname proxy.miodominio.com

# TAG: cache_mgr : l'email dell'amministratore della cache
cache_mgr root@miodominio.com

# ACL: access control list : non deve tenere in cache le pagine dinamiche
acl CGI urlpath_regex cgi-bin ?
acl ASP urlpath_regex asp ?
acl PHP urlpath_regex php ?
acl JSP urlpath_regex jsp ?
no_cache deny CGI ASP PHP JSP

# TAG: cache_mem : la ram utilizzata dalla cache; per avere prestazioni ottimali
# dovrebbe essere 1/4 della ram del sistema
cache_mem 128 MB

# TAG: cache_dir : la directory dove deve venir memorizzata la cache
# il primo numero si riferisce alla dimensione della cache in Mb
cache_dir ufs /var/spool/squid 500 16 256

# TAG: cache_access_log : il file di log per gli accessi
cache_access_log /var/log/squid/access.log

# TAG: cache_log : i log della cache
cache_log /var/log/squid/cache.log

# TAG: cache_store_log : i log di storage
cache_store_log /var/log/squid/store.log

# TAG: emulate_httpd_log : scrive i log in una forma più leggibile
emulate_httpd_log on

# TAG: mime_table : il file di configurazione per i tipi MIME
mime_table /usr/share/squid/mime.conf

# TAG: dns_nameservers : i/il nostro/i DNS
dns_nameservers 127.0.0.1 192.168.0.14 192.168.0.196

# ACL generali
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.0/255.255.255.0
acl SSL_ports port 443 563
acl Safe_ports 80 81 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT

# ACL per l'accesso alla cache dalla/e nostra/e rete/i
acl mynet1 src 192.168.0.0/255.255.255.0 # Cambiatela con la vostra rete/netmask
#acl mynet2 src 10.0.0.0/255.0.0.0  #Eventuali altre reti
#acl mynet3 src 192.168.10.0/255.255.255.0

# Le regole per l'accesso alla cache e a internet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow mynet1
#http_access allow mynet2
#http_access allow mynet3
# Ora neghiamo tutto ciò che non è concesso esplicitamente
http_access deny all

icp_access allow localhost
icp_access allow mynet1
#icp_access allow mynet2
#icp_access allow mynet3
icp_access deny all
miss_access allow localhost
miss_access allow mynet1
#miss_access allow mynet2
#miss_access allow mynet3
miss_access deny all

# squid.conf END

ClamAV è già a posto, invece dansguardian ha bisogno di quattro modifiche.

Apriamo il file /etc/dansguardian/dansguardian.conf e commentiamo mettendole un # davanti la riga:

UNCONFIGURED - Please remove this line after configuration
==>
#UNCONFIGURED - Please remove this line after configuration

Dopo troviamo language e mettiamo language = 'italian', troviamo proxyip = 127.0.0.1 e mettiamo il nostro indirizzo ip.

Infine troviamo la riga contentscanner = ‘/etc/dansguardian/contentscanners/clamav.conf’ e decommentiamola (togliamo il #).

Ora riavviamo pure i demoni interessati.

Cosìperò se volete usare il proxy, dovrete impostarlo sui browser.

C’è invece un metodo più comodo: il proxy trasparente e lo abbiamo già configurato affinché lo sia.

Basta usare queste due regole di iptables e impostare come gateway il server dove c’è il proxy in esecuzione (richiede però il MASQUERADING, vedi sotto):

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport  80 -j DNAT --to-destination 192.168.56.10:8080
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

Questo ha un unico svantaggio: l’HTTPS non potrà essere rimandato al proxy perché sarebbe come se il proxy facesse un attaco Man in the middle (uomo nel mezzo).

La cosa che ho scritto sopra del masquerading vuol dire far funzionare il server tipo da router.

Lo si attiva da root con (non ho controllato che ci fossero errori negli ultimi due comandi):

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # Accetta tutti i pacchetti in transito dalla LAN alla WAN
iptables -A FORWARD -i eth1 -o eth0 -j DROP # Elimina tutti i pacchetti in transito dalla WAN alla LAN

Consiglio di mettere questi comandi in uno script da eseguire all’avvio del computer o dell’interfaccia di rete.

Per esempio questo script permette di passare soltanto FTP, SSH, DNS e HTTPS dalla LAN alla WAN e redirige l’HTTP a dansguardian che lo redirige a squid:

#!/bin/bash
# Abilitiamo ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# Apriamo il traffico dall'interfaccia della LAN all'interfaccia su internet
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Blocchiamo tutto il traffico appena aperto
# Abilitiamo FTP, SSH, DNS e HTTPS
iptables -I FORWARD 1 -p tcp -m multiport --dports 22,53,443 -j ACCEPT
iptables -I FORWARD 2 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Blocchiamo il resto
iptables -I FORWARD 3 -j DROP
# Redirigiamo il traffico della porta 80 alla porta 8080, dove c'è in ascolto dansguardian
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport  80 -j DNAT --to-destination 192.168.56.10:8080
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080