Proxy Server con filtraggio dei contenuti della navigazione: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (rimossa dalle guide da controllare)
 
(5 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze}}
== Introduzione ==
== Introduzione ==
In diversi contesti di rete, si pensi ad esempio ad una rete LAN aziendale o ai laboratori informatici di scuole medie inferiori, può essere importante implementare un sistema il più possibile automatico per il controllo e il filtraggio di alcuni contenuti web considerati dall'amministratore inappropriati al contesto. Si considerino a titolo di esempio le seguenti necessità:
In diversi contesti di rete, si pensi ad esempio ad una rete LAN aziendale o ai laboratori informatici di scuole medie inferiori, può essere importante implementare un sistema il più possibile automatico per il controllo e il filtraggio di alcuni contenuti web considerati dall'amministratore inappropriati al contesto. Si considerino a titolo di esempio le seguenti necessità:
Riga 57: Riga 58:
Iptables si configura generalmente costruendo degli script di regole da attivare all'avvio della macchina gateway. Le regole logiche definite al paragrafo precedente conducono alla stesura di uno script simile al seguente.
Iptables si configura generalmente costruendo degli script di regole da attivare all'avvio della macchina gateway. Le regole logiche definite al paragrafo precedente conducono alla stesura di uno script simile al seguente.
<br/>
<br/>
Lo script, chiamato <tt>firebox.sh</tt>, servirà quindi per gestire il firewall tramite iptables, con funzionalità di nat (masquerade) e di forwarding. Può ovviamente essere modificato e espanso per specifiche esigenze. Creeremo e salveremo il file nella directory <tt>/etc/init.d/</tt>.
Lo script, chiamato <code>firebox.sh</code>, servirà quindi per gestire il firewall tramite iptables, con funzionalità di nat (masquerade) e di forwarding. Può ovviamente essere modificato e espanso per specifiche esigenze. Creeremo e salveremo il file nella directory <code>/etc/init.d/</code>.
<pre>
<pre>
# nano /etc/init.d/firebox.sh
# nano /etc/init.d/firebox.sh
Riga 111: Riga 112:
La nostra macchina Debian è ora un gateway per tutta la rete LAN.
La nostra macchina Debian è ora un gateway per tutta la rete LAN.
<br/>
<br/>
Come ultima cosa modifichiamo il file <tt>/etc/hosts</tt>, aggiungendo:
Come ultima cosa modifichiamo il file <code>/etc/hosts</code>, aggiungendo:
<pre>
<pre>
127.0.0.1      localhost
127.0.0.1      localhost
Riga 127: Riga 128:
# apt-get install clamav-daemon clamav-freshclam
# apt-get install clamav-daemon clamav-freshclam
</pre>
</pre>
La configurazione di ClamAV è contenuta nella directory <tt>/etc/clamav</tt>, ma per i nostri scopi sono più che sufficienti le impostazioni di default. FreshClam aggiornerà le definizioni dei virus su base oraria; se vogliamo modificare questo comportamento dobbiamo agire sul file:
La configurazione di ClamAV è contenuta nella directory <code>/etc/clamav</code>, ma per i nostri scopi sono più che sufficienti le impostazioni di default. FreshClam aggiornerà le definizioni dei virus su base oraria; se vogliamo modificare questo comportamento dobbiamo agire sul file:
<pre>
<pre>
# nano /etc/clamav/freshclam.conf
# nano /etc/clamav/freshclam.conf
Riga 151: Riga 152:
# apt-get install squid3 squidclient
# apt-get install squid3 squidclient
</pre>
</pre>
Il proxy Squid si configura attraverso il suo file di configurazione <tt>/etc/squid3/squid.conf</tt>, che ora creeremo in base alle nostre esigenze:
Il proxy Squid si configura attraverso il suo file di configurazione <code>/etc/squid3/squid.conf</code>, che ora creeremo in base alle nostre esigenze:
<pre>
<pre>
mv /etc/squid3/squid.conf /etc/squid3/squid.conf.original
mv /etc/squid3/squid.conf /etc/squid3/squid.conf.original
Riga 229: Riga 230:
# apt-get install squidguard
# apt-get install squidguard
</pre>
</pre>
Quindi recuperiamo i files delle blackist, le scompattiamo in <tt>/var/lib/squidguard/db/…</tt> e generiamo il database delle liste:
Quindi recuperiamo i files delle blackist, le scompattiamo in <code>/var/lib/squidguard/db/…</code> e generiamo il database delle liste:
<pre>
<pre>
# cd /var/lib/squidguard/db/
# cd /var/lib/squidguard/db/
# wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
# wget http://www.shallalist.de/Downloads/shallalist.tar.gz
# tar xzf blacklists.tar.gz
# tar xzf shallalist.tar.gz
# chown -R proxy:proxy blacklists
# chown -R proxy:proxy blacklists
# ln -s /etc/squidguard/squidGuard.conf /etc/squid3/squidGuard.conf
# ln -s /etc/squidguard/squidGuard.conf /etc/squid3/squidGuard.conf
# su proxy
# squidGuard -d -c /etc/squid3/squidGuard.conf -C all
# squidGuard -d -c /etc/squid3/squidGuard.conf -C all
</pre>
</pre>
Riga 382: Riga 382:
# chmod +x /usr/lib/cgi-bin/squidGuard.cgi
# chmod +x /usr/lib/cgi-bin/squidGuard.cgi
</pre>
</pre>
e infine decommentiamo la riga per attivare il proxy trasparente nel nostro script <tt>firebox.sh</tt>:
e infine decommentiamo la riga per attivare il proxy trasparente nel nostro script <code>firebox.sh</code>:
<pre>
<pre>
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Riga 413: Riga 413:
# apt-get install dansguardian
# apt-get install dansguardian
</pre>
</pre>
Il file principale di configurazione è <tt>/etc/dansguardian/dansguardian.conf</tt>. Apportiamovi alcune modifiche:
Il file principale di configurazione è <code>/etc/dansguardian/dansguardian.conf</code>. Apportiamovi alcune modifiche:
<pre>
<pre>
# mv /etc/dansguardian/dansguardian.conf /etc/dansguardian/dansguardian.conf.original
# mv /etc/dansguardian/dansguardian.conf /etc/dansguardian/dansguardian.conf.original
Riga 477: Riga 477:
maxagechildren = 500
maxagechildren = 500
</pre>
</pre>
Da notare la riga: <tt>contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'</tt>, che dice a DansGuardian di effettuare una scansione dei files attraverso l'antivirus ClamAV, installato in precedenza.
Da notare la riga: <code>contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'</code>, che dice a DansGuardian di effettuare una scansione dei files attraverso l'antivirus ClamAV, installato in precedenza.
<br/>
<br/>
Infine modifichiamo la riga in <tt>firebox.sh</tt> da
Infine modifichiamo la riga in <code>firebox.sh</code> da
<pre>
<pre>
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Riga 496: Riga 496:
# chown -R root:root /etc/dansguardian/lists
# chown -R root:root /etc/dansguardian/lists
</pre>
</pre>
Così facendo abbiamo scompattato il file scaricato dentro la directory <tt>/etc/dansguardian/lists</tt>; verrà creata una sottodirectory chiamata blacklists contenente tutte le liste, immediatamente utilizzabili.
Così facendo abbiamo scompattato il file scaricato dentro la directory <code>/etc/dansguardian/lists</code>; verrà creata una sottodirectory chiamata blacklists contenente tutte le liste, immediatamente utilizzabili.
<br/>
<br/>
Per rendere attive le blacklist scaricate dobbiamo aprire i files bannedsitelist e bannedurllist e decommentare le categorie di siti che intendiamo filtrare.
Per rendere attive le blacklist scaricate dobbiamo aprire i files bannedsitelist e bannedurllist e decommentare le categorie di siti che intendiamo filtrare.
Riga 507: Riga 507:


=== I filtri di DansGuardian ===
=== I filtri di DansGuardian ===
I files che permettono di agire sui filtri di DansGuardian, che in questo articolo descriveremo solo brevemente, si trovano tutti nella directory <tt>/etc/dansguardian</tt> e seguono questa convenzione:
I files che permettono di agire sui filtri di DansGuardian, che in questo articolo descriveremo solo brevemente, si trovano tutti nella directory <code>/etc/dansguardian</code> e seguono questa convenzione:
* i file che cominciano per banned si riferiscono all'azione di "negare l'accesso";
* i file che cominciano per banned si riferiscono all'azione di "negare l'accesso";
* i file che iniziano per exception si riferiscono all'azione di "consentire l'accesso".
* i file che iniziano per exception si riferiscono all'azione di "consentire l'accesso".
Riga 541: Riga 541:
Quindi installiamo il modulo DG Webmin dal [http://dgwebminmodule.sourceforge.net/ sito ufficiale].
Quindi installiamo il modulo DG Webmin dal [http://dgwebminmodule.sourceforge.net/ sito ufficiale].
<br/>
<br/>
Una volta scaricato, andiamo in ''Webmin - Webmin configuration'' e installiamo il modulo; quindi configuriamo il modulo installato, cambiando il path dell'eseguibile DansGuardian da <tt>/sbin/dansguardian</tt> a <tt>/usr/sbin/dansguardian</tt>.
Una volta scaricato, andiamo in ''Webmin - Webmin configuration'' e installiamo il modulo; quindi configuriamo il modulo installato, cambiando il path dell'eseguibile DansGuardian da <code>/sbin/dansguardian</code> a <code>/usr/sbin/dansguardian</code>.


== Calamaris, il generatore di report per Squid ==
== Calamaris, il generatore di report per Squid ==
Riga 548: Riga 548:
# apt-get install calamaris
# apt-get install calamaris
</pre>
</pre>
Ad installazione completata possiamo passare alla configurazione. Per prima cosa creiamo la directory calamaris in <tt>/var/www</tt> e le sottodirectory daily, weekly e monthly, in cui andranno salvati rispettivamente i report giornalieri, settimanali e mensili:
Ad installazione completata possiamo passare alla configurazione. Per prima cosa creiamo la directory calamaris in <code>/var/www</code> e le sottodirectory daily, weekly e monthly, in cui andranno salvati rispettivamente i report giornalieri, settimanali e mensili:
<pre>
<pre>
# mkdir -p /var/www/calamaris
# mkdir -p /var/www/calamaris
Riga 568: Riga 568:
http://192.168.10.254/calamaris
http://192.168.10.254/calamaris
</pre>
</pre>
Per ricevere i report direttamente via email (oltre ad ottenere il loro salvataggio nelle dir precedentemente create), possiamo modificare come segue il file cron.conf posizionato in <tt>/etc/calamaris</tt>:
Per ricevere i report direttamente via email (oltre ad ottenere il loro salvataggio nelle dir precedentemente create), possiamo modificare come segue il file cron.conf posizionato in <code>/etc/calamaris</code>:
<pre>
<pre>
daily:vostro.indirizzo@email.it:/var/www/calamaris/daily/index.html:both:'Squid giornaliero'
daily:vostro.indirizzo@email.it:/var/www/calamaris/daily/index.html:both:'Squid giornaliero'
Riga 588: Riga 588:
** individuare preventivamente i siti considerati correlati o meno con la prestazione lavorativa;
** individuare preventivamente i siti considerati correlati o meno con la prestazione lavorativa;
** utilizzare filtri che prevengano determinate operazioni, quali l'accesso a siti inseriti in una sorta di black list o il download di file musicali o multimediali.
** utilizzare filtri che prevengano determinate operazioni, quali l'accesso a siti inseriti in una sorta di black list o il download di file musicali o multimediali.
<br/>
 
<br/>
{{Autori
--[[Utente:Ferdybassi|Ferdybassi]] 11:22, 2 set 2012 (CEST)
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 11:22, 2 set 2012 (CEST)
}}
 
[[Categoria:Monitoraggio]]
[[Categoria:Monitoraggio]]
[[Categoria:Altri servizi di rete]]
[[Categoria:Altri servizi di rete]]
[[Categoria:Network tools]]
[[Categoria:Network tools]]
[[Categoria: Proxy]]

Versione attuale delle 07:44, 17 giu 2017

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"

Introduzione

In diversi contesti di rete, si pensi ad esempio ad una rete LAN aziendale o ai laboratori informatici di scuole medie inferiori, può essere importante implementare un sistema il più possibile automatico per il controllo e il filtraggio di alcuni contenuti web considerati dall'amministratore inappropriati al contesto. Si considerino a titolo di esempio le seguenti necessità:

  • proteggere i minori dal rischio di imbattersi in siti dedicati alla pornografia, alla violenza, al gioco d'azzardo e altro (il cosiddetto parental control);
  • impedire al personale di un'azienda o di un ente di perdere tempo frequentando siti non connessi con l'attività lavorativa;
  • migliorare l'utilizzo della banda disponibile, bloccando l'accesso a siti non connessi con l'attività lavorativa o la visione di filmati in streaming

Gli ingredienti che permettono di raggiungere gli obiettivi sopra elencati in una macchina Debian sono:

  • un insieme di blacklist che elenchino sia i siti e le URL da bloccare o meno, sia frasi che, trovate in una pagina, facciano sì che essa sia bloccata;
  • un software di filtraggio, o url rewriter, che, servendosi delle blacklist, possa dirottare una richiesta verso una pagina prestabilita, oppure lasciarla passare;
  • un software proxy, che si occupi essenzialmente di ricevere le richieste dal url rewriter e ad inoltrarle verso l'esterno;
  • le utility iptables, utilizzate per definire le regole che, in maniera trasparente, dirottano tutto il traffico web attraverso il proxy o il software di filtraggio, indipendentemente dalla volontà degli utenti;
  • il supporto Netfilter nel kernel, necessario alle utility iptables.

Per raggiungere tutti questi obiettivi è anche necessario che la macchina Debian che configureremo sia impostata come gateway predefinito della rete LAN che vogliamo sottoporre a filtraggio. Lo schema logico di questa struttura di rete sarà quindi come il seguente:

 Rete       Default         URL           Proxy
locale <--> Gateway <-->  Rewriter   <--> Server <--> Internet
 LAN        Debian      DansGuardian      Squid
          \                                     /
           \___________________________________/
                             |
             Tutti questi servizi risiederanno
               su una singola macchina Debian

Nei capitoli seguenti analizzeremo uno per uno tutti i punti della struttura da implementare.

Prerequisiti

Nel resto della guida supporremo che le due schede di rete siano così configurate:

# ETHO - Connessa a LAN
allow-hotplug eth0
iface eth0 inet static
    address 192.168.10.254
    netmask 255.255.255.0
    network 192.168.10.0
    broadcast 192.168.10.255
    dns-nameservers 8.8.4.4 8.8.8.8

# ETH1 - Connessa a INTERNET
allow-hotplug eth1
iface eth1 inet dhcp

In questa configurazione, la scheda di rete collegata ad internet è impostata con il DHCP, ma ovviamente può essere utilizzato un IP statico a seconda delle esigenze. Per modificare la configurazione di rete di Debian si segua ad esempio questa guida: Come impostare indirizzi IP fissi su Debian

Installazione e configurazione di iptables

Perché la nostra Debian funzioni come gateway e instradi correttamente i pacchetti dalla nostra LAN verso internet e viceversa, abbiamo bisogno che siano abilitate le funzionalità di IP forwarding e che siano stabilite alcune regole di instradamento. Tutto questo può essere fatto grazie a iptables, il programma che consente la configurazione di netfilter, il componente del kernel Linux che permette il filtraggio (con e senza stati) dei pacchetti, la traduzione degli indirizzi di rete e di porta e altre forme di manipolazione dei pacchetti IP.
Iptables dovrebbe già essere stato installato nell'installazione base di Debian, ma per scrupolo effettuiamo un controllo:

# apt-get install iptables

Abbiamo inoltre bisogno di stabilire un insieme di regole da dettare a iptables:

  • disabilitare le connessioni entranti da internet sulla scheda eth1;
  • permettere l'instradamento dei pacchetti in uscita dalla LAN (scheda eth0) verso internet;
  • permettere alle connessioni stabilite di ricevere i pacchetti di ritorno.

Iptables si configura generalmente costruendo degli script di regole da attivare all'avvio della macchina gateway. Le regole logiche definite al paragrafo precedente conducono alla stesura di uno script simile al seguente.
Lo script, chiamato firebox.sh, servirà quindi per gestire il firewall tramite iptables, con funzionalità di nat (masquerade) e di forwarding. Può ovviamente essere modificato e espanso per specifiche esigenze. Creeremo e salveremo il file nella directory /etc/init.d/.

# nano /etc/init.d/firebox.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides:          firebox
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 6
# Short-Description: firewall and routing initscript
### END INIT INFO

# Pulisco eventuali catene esistenti
iptables -F
iptables -t nat -F

# Abilito le connessioni di loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -j ACCEPT

# Accesso libero a SSH
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -m conntrack --ctstate NEW -j DROP

# Regola per il proxy trasparente
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

# Abilito il forward
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

# Abilito il NAT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

iptables -A FORWARD -i eth1 -o eth1 -j REJECT

# Abilito le funzioni di IP Forward
echo 1 > /proc/sys/net/ipv4/ip_forward

Il mascheramento IP di Linux utilizzato nello script è un metodo per eseguire una traduzione dell'Indirizzo di Rete (in breve NAT, Network Address Translation) affinché anche macchine alle quali non è stato assegnato un indirizzo internet possano utilizzare tutti i servizi disponibili in rete, grazie ad una workstation Linux che funzioni come gateway. Tutta internet vedrà le richieste dell'intera LAN come se provenissero dalla sola macchina gateway poiché gli indirizzi IP originari dei vari client saranno stati mascherati da iptables. A questo punto non resta che salvare il file , renderlo eseguibile con il comando:

# chmod +x /etc/init.d/firebox.sh

e automatizzarlo:

# update-rc.d firebox.sh start 20 2 3 4 5 . stop 0 6

La nostra macchina Debian è ora un gateway per tutta la rete LAN.
Come ultima cosa modifichiamo il file /etc/hosts, aggiungendo:

127.0.0.1       localhost
127.0.1.1       firewall
192.168.10.254  firewall gateway proxy

dove al posto di “firewall” occorre mettere il nome della macchina che abbiamo scelto durante l’installazione di Debian.
Riavviamo la macchina prestando attenzione ai messaggi durante il boot e testiamo la configurazione.

Scansione antivirus attraverso ClamAV

Dato che intendiamo proteggere la nostra LAN il più possibile, installeremo un antivirus, che configureremo per effettuare una scansione degli allegati scaricati dai client. L'antivirus scelto è ClamAV.

# apt-get install clamav-daemon clamav-freshclam

La configurazione di ClamAV è contenuta nella directory /etc/clamav, ma per i nostri scopi sono più che sufficienti le impostazioni di default. FreshClam aggiornerà le definizioni dei virus su base oraria; se vogliamo modificare questo comportamento dobbiamo agire sul file:

# nano /etc/clamav/freshclam.conf

cambiando la sezione:

# Check for new database 24 times a day
Checks 24

Il proxy server Squid

Un caching proxy server come Squid è un software che si interpone tra un client ed un server web, inoltrando le richieste e le risposte dall'uno all'altro:

  • il client si collega al proxy invece che al server web, e gli invia delle richieste;
  • il proxy a sua volta si collega al server web e inoltra la richiesta del client;
  • il proxy riceve poi la risposta e la inoltra al client.

In altre parole il proxy agisce come mediatore tra un qualunque pc della rete locale e internet. Questa funzione comporta alcuni vantaggi, tra cui:

  • possibilità di tenere traccia di tutte le operazioni effettuate (ad esempio di tutte le pagine web visitate), consentendo statistiche ed osservazioni dell'utilizzo della rete. Non ci si dimentichi però di operare in conformità alle norme in vigore riguardanti la privacy;
  • possibilità di velocizzare la navigazione dei client, poiché il proxy server mantiene nella sua memoria cache le pagine visitate più di frequente, potendole così servire ai client in maniera più rapida.

Faremo inoltre in modo che il proxy si comporti in maniera trasparente, sollevando l'amministratore di rete da qualsiasi configurazione sulle macchine client.

Il proxy server più utilizzato nel mondo Linux è Squid, che andremo adesso ad installare sulla nostra macchina gateway:

# apt-get install squid3 squidclient

Il proxy Squid si configura attraverso il suo file di configurazione /etc/squid3/squid.conf, che ora creeremo in base alle nostre esigenze:

mv /etc/squid3/squid.conf /etc/squid3/squid.conf.original
touch /etc/squid3/squid.conf
nano /etc/squid3/squid.conf

con contenuto:

# La porta di Squid
http_port 3128 transparent

# Se si modifica la linea seguente occorre lanciare:
# squid3 -f /etc/squid3/squid.conf -z
# per ricostruire la cache
cache_dir ufs /var/spool/squid3 1024 256 256

# I Log
cache_mgr info@miodominio.org
cache_access_log /var/log/squid3/access.log common
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
cache_swap_log /var/log/squid3/cache_swap.log
emulate_httpd_log on

# Configuro l'autenticazione su OpenLDAP
# Abilitare le righe seguenti solo se si intende utilizzare
# un server LDAP per l'autenticazione degli utenti
#auth_param basic program /usr/lib/squid3/squid_ldap_auth -b "ou=Users,dc=dominio,dc=local" -f "uid=%s" -h 127.0.0.1
#auth_param basic children 25
#auth_param basic realm Squid proxy Server
#auth_param basic credentialsttl 2 hours

# Configurazione minima raccomandata
#acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 22 # SSH

acl CONNECT method CONNECT

# Richiedo l'autenticazione LDAP per proseguire nella navigazione
#acl ldapauth proxy_auth REQUIRED
#acl authenticated proxy_auth REQUIRED

# Definizione delle reti
acl lan_eth src 192.168.10.0/255.255.255.0
acl lan_wifi src 192.168.1.0/255.255.255.0

# Autorizzo o no la navigazione
http_access allow localhost
http_access allow lan_eth
http_access allow lan_wifi
http_access deny all

# Attivo Squidguard
redirect_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf
redirect_children 5

# Imposto l'hostname del Proxy server
visible_hostname firewall

Il proxy così configurato non fa altro che controllare le classi degli indirizzi autorizzati alla navigazione, ma a noi serve qualcosa in più...

Il filtro SquidGuard

Cominciamo con installare SquidGuard, un programma che ci permette di filtrare i tipi di siti web autorizzati e di impostare la navigazione in funzione delle fasce orarie stabilite.

# apt-get install squidguard

Quindi recuperiamo i files delle blackist, le scompattiamo in /var/lib/squidguard/db/… e generiamo il database delle liste:

# cd /var/lib/squidguard/db/
# wget http://www.shallalist.de/Downloads/shallalist.tar.gz
# tar xzf shallalist.tar.gz
# chown -R proxy:proxy blacklists
# ln -s /etc/squidguard/squidGuard.conf /etc/squid3/squidGuard.conf
# squidGuard -d -c /etc/squid3/squidGuard.conf -C all

A questo punto possiamo crearci il nostro file di configurazione personalizzato per SquidGuard:

# mv /etc/squid3/squidGuard.conf /etc/squid3/squidGuard.conf.original
# touch /etc/squid3/squidGuard.conf
# nano /etc/squid3/squidGuard.conf

con contenuto:

#
# CONFIG FILE FOR SQUIDGUARD
#
dbhome /var/lib/squidguard/db/blacklists
logdir /var/log/squid3
#
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat
# Definisco alcuni giorni speciali
time SpecialsDays {
date *.12.24 21:00 - 00:00
date *.12.25 00:00 - 05:00
date *.08.15 00:00 - 23:59
date *.01.01 00:00 - 23:59
}
# Le ore lavorative
time workhours {
weekly mtwhf 08:30 - 19:00
}
# IP dell'amministratore di rete
src admin {
ip 192.168.10.1
}
# IP del capo
src notadminbutbigboss {
ip 192.168.10.253
}
# Range IP dell'ufficio
src workers {
ip 192.168.10.0/16
}
# Il resto del mondo
src all {
ip 172.30.0.0/16
}
# Definisco le destinazioni di navigazione
# appoggiandomi alle blacklist scaricate
dest adults {
urllist adult/urls
domainlist adult/domains
expressionlist adult/very_restrictive_expression
}
dest drogues {
urllist drugs/urls
domainlist drugs/domains
}
est phishing {
urllist phishing/urls
domainlist phishing/domains
}
dest guns {
urllist marketingware/urls
domainlist marketingware/domains
}
dest danger {
urllist dangerous_material/urls
domainlist dangerous_material/domains
}
dest gambling {
urllist gambling/urls
domainlist gambling/domains
}
dest hacking {
urllist hacking/urls
domainlist hacking/domains
}
dest lingerie {
urllist lingerie/urls
domainlist lingerie/domains
}
dest malware {
urllist malware/urls
domainlist malware/domains
}
dest sexual_education {
urllist sexual_education/urls
domainlist sexual_education/domains
}
dest social_networks {
urllist social_networks/urls
domainlist social_networks/domains
}
dest warez {
urllist warez/urls
domainlist warez/domains
}
rewrite test {
s@fuck@ooops@ir
s@blonde@ooops@ir
s@Hot@ooops@ir
s@sex@ooops@ir
s@porns@ooops@ir
s@bikini@ooops@ir
}
# Definisco le regole di navigazione
# L'amministratore e il capo navigano dove vogliono
# Gli uffici navigano solo in orario di lavoro, ma
# non nei siti inclusi nelle blackist utilizzate
# per definire le regole
acl {
admin {
pass any
}
notadminbutbigboss {
pass any
}
workers within workhours {
pass !adults !drogues !phishing !guns !hacking !danger !gambling !lingerie !malware !sexual_education !social_networks !warez any
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
#redirect http://192.168.10.254/stop.html
}
all {
pass !adults !drogues !phishing !guns !hacking !danger !gambling !lingerie !malware !sexual_education !social_networks !warez any
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
#redirect http://192.168.10.254/stop.html
}
all within SpecialsDays {
pass any
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
#redirect http://192.168.10.254/stop.html
}
default {
pass none
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
#redirect http://192.168.10.254/stop.html
}
}

Impostiamo la pagina di redirect quando viene visitato un sito bloccato:

# gunzip /usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz
# mv /usr/share/doc/squidguard/examples/squidGuard-simple.cgi /usr/lib/cgi-bin/squidGuard.cgi
# chmod +x /usr/lib/cgi-bin/squidGuard.cgi

e infine decommentiamo la riga per attivare il proxy trasparente nel nostro script firebox.sh:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Riavviamo il nostro script e prepariamoci a verificarne il funzionamento. Se da un client della rete proviamo a navigare su internet, agendo sulla console del nostro gateway dovremmo vederne i log:

# tail -f /var/log/squid/access.log
1104854410.086    159 192.168.10.50 TCP_MISS/302 469 GET \
http://www.google.com/ - DIRECT/216.239.59.104 text/html
1104854410.217    128 192.168.10.50 TCP_MISS/200 1459 GET \
http://www.google.it/ - DIRECT/216.239.59.99 text/html
1104854410.397    180 192.168.10.50 TCP_MISS/200 9022 GET \
 http://www.google.it/intl/it/images/logo.gif - DIRECT/216.239.59.99 image/gif
1104854415.196    200 192.168.10.50 TCP_MISS/200 1459 GET \
http://www.google.it/ - DIRECT/216.239.59.99 text/html
1104854415.271     74 192.168.10.50 TCP_REFRESH_HIT/304 235 GET \
http://www.google.it/intl/it/images/logo.gif - DIRECT/216.239.59.99 text/html

Perfetto! Il nostro proxy server è entrato correttamente in funzione.

Prime conclusioni

Abbiamo fino ad ora impostato una macchina Debian per funzionare come gateway di una rete LAN e per far girare un proxy server che sveltisca la navigazione dei client e ne registri i log. Pur essendo questa una configurazione funzionante e completa, in alcune situazioni potrebbe essere conveniente espanderla e installare anche un sistema per filtrare i contenuti della navigazione, andando oltre ai blocchi impostabili con SquidGuard. È in questi casi che torna utile una categoria di programmi chiamata URL rewriter.

DansGuardian: l'URL rewriter

Un URL rewriter è un software che si occupa di riscrivere un URL, sostituendolo con un'altro ritenuto più opportuno sulla base delle regole e dei filtri impostati. Il risultato è il dirottamento di certe richieste verso una o più pagine predefinite. Un caso tipico è quello in cui l'utente viene deviato su una pagina recante un messaggio standard del tipo "Spiacente, il sito che volevi raggiungere non sembra collegato agli interessi dell'Azienda" o qualcosa del genere.
Installiamo DansGuardian:

# apt-get install dansguardian

Il file principale di configurazione è /etc/dansguardian/dansguardian.conf. Apportiamovi alcune modifiche:

# mv /etc/dansguardian/dansguardian.conf /etc/dansguardian/dansguardian.conf.original
# touch /etc/dansguardian/dansguardian.conf
# nano /etc/dansguardian/dansguardian.conf

e diamogli questo contenuto:

reportinglevel = 3
languagedir = '/etc/dansguardian/languages'
language = 'italian'
loglevel = 3
logexceptionhits = 2
logfileformat = 1
filterip =
filterport = 8080
proxyip = 192.168.10.254
proxyport = 3128
accessdeniedaddress = 'http://192.168.10.254/cgi-bin/dansguardian.pl'
nonstandarddelimiter = on
usecustombannedimage = on
custombannedimagefile = '/usr/share/dansguardian/transparent1x1.gif'
filtergroups = 1
filtergroupslist = '/etc/dansguardian/lists/filtergroupslist'
bannediplist = '/etc/dansguardian/lists/bannediplist'
exceptioniplist = '/etc/dansguardian/lists/exceptioniplist'
showweightedfound = on
weightedphrasemode = 2
urlcachenumber = 1000
urlcacheage = 900
scancleancache = on
phrasefiltermode = 2
preservecase = 0
hexdecodecontent = off
forcequicksearch = off
reverseaddresslookups = off
reverseclientiplookups = off
logclienthostnames = off
createlistcachefiles = on
maxuploadsize = -1
maxcontentfiltersize = 256
maxcontentramcachescansize = 2000
maxcontentfilecachescansize = 20000
filecachedir = '/tmp'
deletedownloadedtempfiles = on
initialtrickledelay = 20
trickledelay = 10
downloadmanager = '/etc/dansguardian/downloadmanagers/fancy.conf'
downloadmanager = '/etc/dansguardian/downloadmanagers/default.conf'
contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'
contentscannertimeout = 60
contentscanexceptions = off
recheckreplacedurls = off
forwardedfor = off
usexforwardedfor = off
logconnectionhandlingerrors = on
logchildprocesshandling = off
maxchildren = 120
minchildren = 8
minsparechildren = 4
preforkchildren = 6
maxsparechildren = 32
maxagechildren = 500

Da notare la riga: contentscanner = '/etc/dansguardian/contentscanners/clamav.conf', che dice a DansGuardian di effettuare una scansione dei files attraverso l'antivirus ClamAV, installato in precedenza.
Infine modifichiamo la riga in firebox.sh da

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

a

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Lo scopo di questa modifica è fare in modo che la regola di iptables impostata all'inizio dell'articolo indirizzi ora i pacchetti verso il nostro url rewriter DansGuardian (che abbiamo infatti posto in ascolto sulla porta 8080), lasciando poi a quest'ultimo il compito di reindirizzare i pacchetti filtrati verso il proxy server.

Le blacklist

Per far funzionare al meglio il nostro DansGuardian abbiamo bisogno ancora di una cosa: un insieme di blacklist preconfezionato e diviso in categorie. Il migliore (e anche quello consigliato dagli autori di DansGuardian) è l'elenco scaricabile da URL Blacklist. Si noti che il download non è gratuito e che, prima di sottoscrivere un abbonamento, abbiamo diritto ad un solo download di prova. Purtroppo non sono a conoscenza di altre backlist compatibili con DansGuardian e altrettanto valide. Scarichiamo delle blacklists aggiornate dal sito: URL Blacklist:

# tar -xzf bigblacklist.tar.gz
# mv blacklists /etc/dansguardian/lists
# chown -R root:root /etc/dansguardian/lists

Così facendo abbiamo scompattato il file scaricato dentro la directory /etc/dansguardian/lists; verrà creata una sottodirectory chiamata blacklists contenente tutte le liste, immediatamente utilizzabili.
Per rendere attive le blacklist scaricate dobbiamo aprire i files bannedsitelist e bannedurllist e decommentare le categorie di siti che intendiamo filtrare.
Già che ci siamo, apportiamo anche alcune altre modifiche ad un paio di altri files, dato che le impostazioni di default potrebbero essere trovate troppo restrittive:

  • bannedextensionlist: decidiamo per quali estensioni di files vogliamo consentire il download;
  • bannedmimetypelist;
  • weightedphraselist: la directory /etc/dansguardian/phraselists/badwords/ contiene le liste di frasi da censurare, divise per idioma.

Adattate ognuno di questi file alle vostre esigenze e, a configurazione ultimata, riavviate DansGuardian per fargli digerire le modifiche.

I filtri di DansGuardian

I files che permettono di agire sui filtri di DansGuardian, che in questo articolo descriveremo solo brevemente, si trovano tutti nella directory /etc/dansguardian e seguono questa convenzione:

  • i file che cominciano per banned si riferiscono all'azione di "negare l'accesso";
  • i file che iniziano per exception si riferiscono all'azione di "consentire l'accesso".

L'ordine in cui i file sono esaminati dal programma è il seguente:

  • exceptioniplist - contiene l'elenco degli indirizzi IP che devono saltare il controllo dei contenuti (ad.es. gli indirizzi dei PC degli amministratori);
  • exceptionuserlist - contiene l'elenco degli utenti che saltano il controllo di dansgardian (ad. es. gli amministratori);
  • exceptionsitelist - contiene la parte terminale dei domini le cui pagine non saranno filtrate (ad. es. linux.org);
  • exceptionurllist - contiene l'indirizzo di pagine di siti che non sono filtrate;
  • blanket block - permette lo sblocco totale o parziale dei siti che sono indicati nei file greysitelist e greyurllist, a differenza dei file exception* il filtro è applicato;
  • bannediplist - indirizzi IP dei PC che non devono avere accesso al web;
  • banneduserlist - nomi degli utenti che non devono avere accesso al web;
  • bannedregexpurllist - elenco delle espressioni regolari negli URL a cui negare l'accesso;
  • bannedurllist - indirizzi di pagine web a cui non deve essere consentito l'accesso (serve per non bloccare un sito intero, ma solo parti di esso);
  • blanket ip block - consente il blocco degli URL basati su IP;
  • bannedsitelist - contiene la lista dei siti (domini) a cui non è consentito l'accesso (ad. es. sex.com);
  • postupload - blocco o limite delle operazioni di upload (da impostare nel file /etc/dansguardian/dansguardian.conf);
  • bannedmimetypelist - contiene la lista dei tipi MIME che saranno bloccati (è un modo eccellente per bloccare certi tipi di filmati);
  • bannedextensionlist - contiene la lista delle estensioni di file da bloccare, può essere utilizzato per impedire lo scaricamento di certi "screen saver" e "hacking tools";
  • exceptionphraselist - se in una pagina compare una frase indicata in questo file l'accesso è consentito (prudenza nell'utilizzare questa opzione);
  • bannedphraselist - contiene la lista delle frasi negate, se in una pagina è presente una di queste frasi l'accesso è negato;
  • weightedphraselist - a ogni frase è assegnato un valore positivo o negativo, nell'analisi di una pagina i valori sono sommati. Frasi che hanno a che vedere con "buoni argomenti" avranno valori negativi, con "cattivi argomenti" valori positivi. Se la somma raggiunge il naughtynesslimit (da impostare nel file di configurazione /etc/dansguardian/dansguardian.conf) l'accesso alla pagina è negato. In generale 50 è per i bambini, 100 i primi anni dell'adolescenza, 160 per i giovani adulti; i valori indicati possono servire da punto di riferimento, la sperimentazione fornirà quelli più indicati allo specifico caso.

Per mezzo del file bannedextensionlist è possibile bloccare lo scaricamento di file eseguibili (ad es. exe, mentre con il file bannedmimetypelist è possibile bloccare filmati indesiderati ad esempio video/mpeg).
Per rendere attive eventuali modifiche è necessario riavviare il servizio:

/etc/init.d/dansguardian restart

Amministrazione per via grafica delle blacklist

Una via alternativa alla modifica manuale dei file di definizione delle blacklist può essere quella di utilizzare un modulo apposito di Webmin.
Installiamo innanzitutto Webmin, ad esempio seguendo questa guida: Webmin: amministrare Debian via web Quindi installiamo il modulo DG Webmin dal sito ufficiale.
Una volta scaricato, andiamo in Webmin - Webmin configuration e installiamo il modulo; quindi configuriamo il modulo installato, cambiando il path dell'eseguibile DansGuardian da /sbin/dansguardian a /usr/sbin/dansguardian.

Calamaris, il generatore di report per Squid

Analizzare i file di log di un proxy risulta essere un'operazione piuttosto tediosa; è molto più conveniente utilizzare dei software in grado di generare i report degli accessi in modo automatico, come Calamaris. L'installazione e la configurazione di tale applicativo è piuttosto semplice:

# apt-get install calamaris

Ad installazione completata possiamo passare alla configurazione. Per prima cosa creiamo la directory calamaris in /var/www e le sottodirectory daily, weekly e monthly, in cui andranno salvati rispettivamente i report giornalieri, settimanali e mensili:

# mkdir -p /var/www/calamaris
# mkdir -p /var/www/calamaris/daily
# mkdir -p /var/www/calamaris/weekly
# mkdir -p /var/www/calamaris/monthly

Assegniamo i giusti permessi alle directory appena create:

# cd /var/www
# chown www-data:www-data -R calamaris

A questo punto possiamo creare il primo report, digitando:

# calamaris -a -F html /var/log/squid3/access.log > /var/www/calamaris/index.html

Il report sarà visualizzabile mediante browser alla seguente URL:

http://192.168.10.254/calamaris

Per ricevere i report direttamente via email (oltre ad ottenere il loro salvataggio nelle dir precedentemente create), possiamo modificare come segue il file cron.conf posizionato in /etc/calamaris:

daily:vostro.indirizzo@email.it:/var/www/calamaris/daily/index.html:both:'Squid giornaliero'
weekly:vostro.indirizzo@email.it:/var/www/calamaris/weekly/index.html:both:'Squid settimanale'
monthly:vostro.indirizzo@email.it:/var/www/calamaris/monthly/index.html:both:'Squid mensile'

Conclusioni

Abbiamo visto in questo articolo un sistema abbastanza completo per implementare un proxy server che funzioni anche come filtro dei contenuti web da veicolare agli utenti di una LAN.
Senza addentrarci in dettagli legali, vi ricordo che è necessario che una struttura che intenda installare un sistema di controllo della navigazione si doti anche di un regolamento per la navigazione internet, affisso nella bacheca degli annunci aziendali, allegato ad ogni contratto di assunzione e preventivamente discusso con gli organi sindacali della struttura stessa.
A tale scopo può essere utile considerare le linee guida del Garante per lutilizzo di posta elettronica e internet, che possiamo così riasssumere:

  • I datori di lavoro pubblici e privati non possono controllare la posta elettronica e la navigazione in Internet dei dipendenti, se non in casi eccezionali. Spetta al datore di lavoro definire le modalità d'uso di tali strumenti, tenendo conto dei diritti dei lavoratori e della disciplina in tema di relazioni sindacali.
  • Il Garante privacy, con un provvedimento generale che sarà pubblicato sulla "Gazzetta Ufficiale", fornisce concrete indicazioni in ordine all'uso dei computer sul luogo di lavoro. "La questione è particolarmente delicata - afferma il relatore Mauro Paissan - perché dall'analisi dei siti web visitati si possono trarre informazioni anche sensibili sui dipendenti e i messaggi di posta elettronica possono avere contenuti a carattere privato. Occorre prevenire usi arbitrari degli strumenti informatici aziendali e la lesione della riservatezza dei lavoratori".
  • L'Autorità prescrive innanzitutto ai datori di lavoro di informare con chiarezza e in modo dettagliato i lavoratori sulle modalità di utilizzo di Internet e della posta elettronica e sulla possibilità che vengano effettuati controlli. Il Garante vieta poi la lettura e la registrazione sistematica delle e-mail così come il monitoraggio sistematico delle pagine web visualizzate dal lavoratore, perché ciò realizzerebbe un controllo a distanza dell'attività lavorativa vietato dallo Statuto dei lavoratori. Viene inoltre indicata tutta una serie di misure tecnologiche e organizzative per prevenire la possibilità, prevista solo in casi limitatissimi, dell'analisi del contenuto della navigazione in Internet e dell'apertura di alcuni messaggi di posta elettronica contenenti dati necessari all'azienda.
  • Il provvedimento raccomanda l'adozione da parte delle aziende di un disciplinare interno, definito coinvolgendo anche le rappresentanze sindacali, nel quale siano chiaramente indicate le regole per l'uso di Internet e della posta elettronica.
  • Il datore di lavoro è inoltre chiamato ad adottare ogni misura in grado di prevenire il rischio di utilizzi impropri, così da ridurre controlli successivi sui lavoratori. Per quanto riguarda Internet è opportuno ad esempio:
    • individuare preventivamente i siti considerati correlati o meno con la prestazione lavorativa;
    • utilizzare filtri che prevengano determinate operazioni, quali l'accesso a siti inseriti in una sorta di black list o il download di file musicali o multimediali.




Guida scritta da: Ferdybassi 11:22, 2 set 2012 (CEST) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized