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