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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Riga 98: Riga 98:


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

Versione delle 09:26, 1 set 2012

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