Configurare un gateway con proxy server e filtro dei contenuti web
Versioni Compatibili Tutte le versioni supportate di Debian |
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
Per trasformare un PC Debian in un gateway abbiamo bisogno innanzitutto di due schede di rete:
- eth0 sarà la scheda di rete connessa al modem/router del nostro ISP e andrà configurata in base ai parametri di rete forniti al momento della stipula del contratto ADSL;
- eth1 sarà la scheda di rete connessa alla nostra LAN e in questo articolo avrà indirizzo IP 192.168.0.1;.
Le schede di rete andranno configurate nella classica maniera Debian, agendo cioè sul file di configurazione /etc/network/interfaces
, seguendo ad esempio questa guida: Come impostare indirizzi IP fissi su Debian.
A titolo di esempio supponiamo che il nostro file sia configurato in questa maniera:
# Interfaccia esterna verso internet (eth0) allow-hotplug eth0 iface eth0 inet dhcp # Interfaccia LAN (eth1) allow-hotplug eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
Affinchè la nostra Debian possa servire correttamente tutti i client della rete LAN, è consigliabile installare e configurare un server DNS e un servizio DHCP, ad esempio seguendo questa guida:
Un server DNS e DHCP su Debian
Sul server DNS andranno configurate:
- una zona diretta per la rete LAN (scheda eth1)
- una zona inversa per la rete LAN (scheda eth1)
Il server DHCP andrà impostato per fornire ai client:
- un indirizzo nella stessa classe con cui abbiamo configurato la scheda interna eth1
- la corretta subnet mask
- l'indirizzo della scheda interna eth1 come gateway predefinito
Debian come gateway
Configurare la nostra Debian box come gateway per la rete LAN interna è il primo passo per raggiungere l'obiettivo di un firewall che filtri i contenuti indesiderati. Questo renderà inoltre la nostra rete molto più flessibile di quanto non sarebbe con l'utilizzo di un firewall hardware dedicato e ci permetterà, qualora ne avessimo la necessità, di aggiungere in futuro ulteriori servizi senza bisogno di nuovo hardware.
Per trasformare un PC Debian in un gateway abbiamo bisogno innanzitutto di due schede di rete:
- eth0 sarà la scheda di rete connessa al modem/router del nostro ISP e andrà configurata in base ai parametri di rete forniti al momento della stipula del contratto ADSL;
- eth1 sarà la scheda di rete connessa alla nostra LAN e in questo articolo avrà indirizzo IP 192.168.0.1;.
Le schede di rete andranno configurate nella classica maniera Debian, agendo cioè sul file di configurazione /etc/network/interfaces
.
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 eth0;
- permettere l'instradamento dei pacchetti in uscita dalla LAN (scheda eth1) 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 a questo:
#! /bin/sh ############################### # Regole Firewall. ############################### # eth0: connessa a internet # eth1: connessa alla LAN ############################ # Imposto alcune variabili ############################ ETH1IP="192.168.0.1" LOCALNET="192.168.0.10/24" # Il path di iptables IPT="/sbin/iptables" # Interfaccia di rete esterna IFACE=eth0 ######################## # Un messaggio di avvio ######################## echo -n " Loading iptables rules..." ##################################### # Pulisco la configurazione corrente ##################################### # Cancellazione delle regole presenti nelle chains $IPT -F $IPT -F -t nat # Eliminazione delle chains non standard vuote $IPT -X # Inizializzazione dei contatori (utile per il debugging) $IPT -Z ################## # Imposto il NAT. ################## iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ######################### # Abilito IP forwarding ######################### # Abilita il forwarding di pacchetti non locali echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/conf/all/forwarding # Ignora finti messaggi di errore ICMP echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Non risponde ai ping inviati al broadcast della subnet echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Non accetta pacchetti ICMP di route redirection echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
Salviamo lo script nel file:
# nano /etc/iptables-firewall
rendiamolo eseguibile:
# chmod 700 /etc/iptables-firewall
e facciamo in modo che venga caricato all'attivazione della scheda di rete esterna eth0 della nostra Debian:
# nano /etc/network/interfaces
aggiungendo le righe:
# Interfaccia esterna verso internet (eth0) allow-hotplug eth0 iface eth0 inet dhcp mtu 1412 pre-up /etc/iptables-firewall
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, il PC è diventato un router: tutti i client collegati allo stesso switch della scheda di rete eth1 dovrebbero essere in grado di:
- ricevere un indirizzo IP dal server DHCP installato su Debian
- risolvere gli indirizzi IP e i FQDN tramite il server DNS installato
- navigare su internet attraverso il NAT impostato su Debian
Effettuate alcune prove prima di procedere.
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.
Guida scritta da: Ferdybassi | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |