Translation(s): English - Italiano

Introduzione

Un firewall di rete è un insieme di regole che consentono o negano il passaggio di traffico di rete, attraverso uno o più dispositivi di rete. Un firewall di rete può anche eseguire compiti più complessi, come tradurre gli indirizzi di rete, regolare la banda, fornire tunnel cifrati e molte altre cose connesse al traffico di rete.

Prima della versione 5 (Lenny), un'installazione standard Debian, non aveva un firewall predefinito abilitato. Forniva però gli strumenti per configurarne uno manualmente.

Software base per firewall

Il traffico di rete ha diverse componenti, livelli e protocolli. Per maggiori informazioni, controllare la sezione con i collegamenti esterni.

I tipi di firewall più conosciuti, ed i primi ad essere implementati, sono insiemi di regole basate sul software netfilter, basati su un insieme di moduli del kernel e alcuni strumenti in spazio utente.

Software di base per la manipolazione del traffico di rete

L'installazione Debian standard viene fornita con il programma iptables(8), configurato per permettere tutto il traffico. Questa sezione spiega brevemente i diversi programmi per gestire il traffico di rete manualmente, oltre a due script d'esempio.

È necessario essere root o usare sudo, per avviare questi programmi.

Potrebbe essere utile il pacchetto iptables-persistent.

Usare iptables per il traffico IPv4

Questo non è un manuale di iptables, solo una breve introduzione sull'uso del programma. Per spiegazioni più dettagliate, vedere iptables(8).

L'invocazione base per definire le regole è:

% iptables [-t tabella] -[AD] catena  definizione-regola [opzioni]

Tabelle e catene

Tutte le regole sono memorizzate in tabelle diverse.

La tabella predefinita è filter, che gestisce le catene INPUT, OUTPUT e FORWARD, usate rispettivamente per il traffico in entrata, uscita e ridiretto.

Altre tabelle presenti sono mangle, nat e raw. Si possono anche creare e cancellare tabelle personalizzate.

Le regole e l'invocazione del programma possono fare riferimento ad una tabella specifica usando l'opzione -t nome_tabella (o --table nome_tabella).

Se non viene specificata alcuna tabella, viene usata quella predefinita (la tabella filter).

Per elencare l'insieme di regole delle tabelle si usa l'opzione -L. Per esempio:

% iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Come si può vedere, la politica (policy) predefinita in un'installazione standard è di accettare (ACCEPT) tutto il traffico. Non c'è nessuna regola in nessuna delle catene (chain).

Ogni tabella predefinita contiene diverse catene per memorizzare le regole per diversi punti del sottosistema di rete del kernel.

Si possono elencare altre tabelle usando -t per vedere, per esempio, la tabella nat (Network Address Translation, traduzione degli indirizzi di rete):

% iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Corrispondenze e ordine

Quando un pacchetto viene ispezionato usando gli insiemi di regole, vengono cercate corrispondenze dall'alto verso il basso di tabelle e catene.

Nelle regole le corrispondenze sono cercate da sinistra a destra della sintassi usata per la regola.

Quando un pacchetto non corrisponde a una regola, la ricerca salta alla regola seguente. Se non corrisponde a nessuna regola, allora al pacchetto viene applicata la politica predefinita.

Se il pacchetto corrisponde ad una qualsiasi definizione di regola, allora viene applicato l'obbiettivo (target) definito nella regola (ACCEPT, REJECT, DROP, LOG, ecc.), e vengono saltate le regole seguenti nella stessa catena.

È molto importante tenere a mente questo comportamento quando si progetta un insieme di regole, per ottenere le funzionalità desiderate e per l'impatto sulle prestazioni in caso di grandi insiemi di regole.

Politiche e obbiettivi

La politica predefinita è ACCEPT, cioè l'accettazione, per tutto il traffico, ma la prassi più comune è di cambiare le politiche in DROP, cioè il rifiuto, per tutto il traffico tranne per quello permesso.

Si deve fare attenzione ed essere sicuri che le proprie regole siano corrette, prima di attuare una politica DROP o si perderà la connettività.

Vedere la sezione sulla risoluzione dei problemi per suggerimenti riguardo a questa problematica.

Opzioni di programma

Le opzioni usate più di frequente sono:

Esistono altre opzioni per gestire catene, tabelle, pulire regole, per contatori ed altri elementi. Vedere la pagina di manuale iptables(8).

Moduli

Il programma iptables ha una vasta raccolta di moduli per usare criteri diversi nella valutazione dei pacchetti.

Ci sono moduli per protocolli, per i log, lo stato delle connessioni, ecc. Tutti i moduli compilati internamente sono chiaramente spiegati nella pagina di manuale.

I moduli possono accettare parametri (-m nome_modulo --nome_parametro argomenti_parametro).

Una regola d'esempio, usando il modulo state (stato), per rigettare il traffico in entrata con stato INVALID (un parametro del modulo state), definito nelle intestazioni del pacchetto, sarebbe così:

% iptables -I INPUT -m state --state INVALID -j DROP

Script d'esempio

Installazione

Si possono posizionare questi script in qualsiasi posizione in cui vengono eseguiti automaticamente all'avvio o al momento dell'inizializzazione della rete.

Posizioni usate di solito sono:

/etc/rc.local

Prima di exit 0. Sarà eseguito all'avvio.

#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

set -e

# Avviare le regole per netfilter
if [ -e '/etc/firewall_example.sh' ]
then
    /bin/sh '/etc/firewall_example.sh'
fi

exit 0

/etc/network/interfaces

Questa è una posizione più sensata e standard per le cose che riguardano la rete.

Per esempio, se eth0 è la propria unica interfaccia, o quella principale, e si usa DHCP:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto  lo
iface lo inet loopback

# WAN modem via cavo
allow-hotplug eth0
iface         eth0 inet dhcp
              pre-up    /bin/sh /etc/firewall/enable.sh
              post-down /bin/sh /etc/firewall/disable.sh

Esempio: firewall di base per una macchina singola

Si può usare questo script su qualsiasi macchina singola (per esempio una macchina desktop privata) che non ha bisogno di nessuna porta aperta in alcun posto. Oppure vedere l'ultima riga commentata per aprire porte specifiche.

Uno script d'esempio come quello sottostante fornisce all'host un livello di sicurezza ragionevole. Fare attenzione che lo script seguente rifiuta tutti i pacchetti che non corrispondono a nessuna regola di accettazione, perciò i normale messaggi di errore di rete non verranno visti. Tutte le regole che accettano pacchetti sono state commentate per proteggere gli inesperti.

#!/bin/sh
# Uno script molto basilare per IPtables / Netfilter

PATH='/sbin'

# Svuotare le tabelle per applicare i cambiamenti
iptables -F

# La politica predefinita è di rifiutare 'tutto' tranne il proprio traffico in uscita verso Internet
iptables -P FORWARD DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  ACCEPT

# Tutte le connessioni stabilite (le risposte al proprio traffico in uscita)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permette tutti i programmi locali che usano l'interfaccia loopback (socket Unix)
iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT

# Decommentare questa riga per permettere connessioni SSH/SCP in entrata su questa
# macchina, per il traffico da 10.20.0.2 (si può anche usare una definizione di rete
# di origine come 10.20.0.0/22).
# iptables -A INPUT -s 10.20.0.2 -p tcp --dport 22 -m state --state NEW -j ACCEPT

Esempio: firewall di base per una macchina gateway

#!/bin/sh
# Questa è una configurazione più complessa, per un firewall casalingo: 
# * Una interfaccia collegata alla connessione con l'ISP (eth0). Usa DHCP.
# * Una interfaccia collegata alla LAN locale (eth1). Usa 192.168.0.0/24.
# * Traffico libero dalla LAN a SSH nel firewall.
# * Traffico libero e tradotto, dalla LAN locale ad Internet.
# * Traffico libero da Internet al server web locale.
# * Registrazione del traffico rifiutato, usando uno specifico ''livello di registrazione''
#   per configurare un file separato in syslog/rsyslog.

PATH='/sbin'

## INIT

# Svuota le regole preesistenti, cancella le catene e azzera i contatori
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

# Politiche predefinite
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

echo -n '1' > /proc/sys/net/ipv4/ip_forward
echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_source_route
echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_redirects
echo -n '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo -n '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Permette il traffico loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Permette con regole basate su stati (fatto ciò, basta solo permettere le connessioni nuove (NEW))
iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Rifiuta i pacchetti con stato non valido
iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP


## INPUT

# ssh in entrata dalla LAN
iptables -A INPUT -i eth1 -s 192.168.0.0/24 \
                  -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT


## OUTPUT

# Permette tutto il traffico in uscita verso Internet
iptables -A OUTPUT -o eth0 -d 0.0.0.0/0      -j ACCEPT 

# Permette traffico che va dal firewall alla rete LAN
iptables -A OUTPUT -o eth1 -d 192.168.0.0/24 -j ACCEPT


## FORWARD

# Si usa un IP dinamico (DHCP), perciò è necessario il mascheramento 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables        -A FORWARD     -o eth0 -i eth1 -s 192.168.0.0/24 \
                               -m conntrack --ctstate NEW -j ACCEPT

# Ridirige HTTP (tcp/80) al server web (192.168.0.2)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
                              -j DNAT --to-destination 192.168.0.2:80

iptables        -A FORWARD    -i eth0 -p tcp --dport 80 \
                              -o eth1 -d 192.168.0.2    \
                              -m conntrack --ctstate NEW -j ACCEPT


## LOG - REGISTRAZIONE

iptables -A INPUT   -j LOG --log-level DEBUG --log-prefix '[FW INPUT]:    '
iptables -A OUTPUT  -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]:   '
iptables -A FORWARD -j LOG --log-level DEBUG --log-prefix '[FW FORWARD ]: '

Usare ip6tables per il traffico IPv6

Poiché in continua crescita, Internet sta lentamente passando a IPv6, che è uno spazio di indirizzi molto più grande di IPv4 e Debian può gestire l'IPv6.

Se si hanno indirizzi, reti e connessioni IPv6 nel proprio firewall, si deve fare attenzione e configurare i propri insiemi di regole per ciascun protocollo.

Per configurare e gestire insiemi di regole IPv6 è necessario usare ip6tables(8), che è fornito con l'installazione Debian standard, nel pacchetto iptables.

L'uso e le funzionalità sono molto simili a quella di iptables, ma orientati al traffico IPv6.

Per maggiori informazioni, vedere: ip6tables(8)

Usare ebtables per il traffico ARP

Ebtables (pacchetto ebtables) viene usato per impostare, mantenere e ispezionare le tabelle delle regole Ethernet nel kernel Linux. È l'analogo di iptables, ma opera a livello MAC (ARP), invece che a quello IP.

Se si deve filtrare o tradurre traffico ARP (a livello di collegamento), se il proprio firewall ha interfacce bridge (per esempio un bridge trasparente tra una VLAN con tunnel OpenVPN e una VLAN locale, oppure interfacce bridge per la virtualizzazione), ebtables(8) è quello che si sta cercando.

Il concetto è molto simile a quello di iptables di netfilter.

Gestisce insiemi di regole in tabelle con catene e obbiettivi, usando strumenti in spazio utente, ma in questo caso non è presente in un'installazione Debian standard ed è necessario aggiungerlo:

% aptitude update
% aptitude install ebtables

Per una spiegazione più dettagliata del suo uso, guardare la onnipresente pagina di manuale e visitare il sito web ufficiale (vedere la sezione sui collegamenti).

Ci sono documenti che spiegano come integrare ebtables e iptables, usando il modulo iptables physdev.

Firewall per applicazioni

Per salire di livello e manipolare il Layer 7 del modello OSI e poter definire regole a livello di applicazioni, sono necessari altri strumenti.

Per esempio... si apre la porta 80 ai propri utenti, ma non si vuole che essi possano scaricare file .exe da Internet. È necessario un firewall per applicazioni o un proxy.

Il kernel predefinito in Debian no ha patch per il Layer 7, ma si possono installare proxy in spazio utente per gestire questo tipo di filtri.

Ci sono opzioni come squid, dans guardian, zorp, ecc.

Vedere anche la sezione dei collegamenti esterni per il progetto l7-filter.

Risoluzione di problemi software e suggerimenti

Alcuni strumenti utili (e quasi indispensabili) sono:

È molto facile perdere connettività quando si configura inizialmente un firewall. Più il firewall è complesso e più è probabile che ciò accada.

Una qualità base necessaria per risolvere i problemi di un firewall è sapere in quali punti il traffico passi, venga girato, indirizzato, rifiutato, ecc. E sapere come monitorare questi punti e cosa accada in essi.

L'approccio più efficace è analizzare il traffico dall'inizio alla fine, a partire dalla richiesta iniziale, il DNS, le interfacce attraverso le quali deve passare, le traduzioni che devono essere fatte, il registro del traffico rifiutato, le regole di instradamento, ecc.

Un trucchetto comune quando si progettano insiemi di regole è di creare un compito di cron che ripulisce tutte le regole ad intervalli di qualche minuto, in caso si faccia un errore (lavorando in remoto).

Applicazioni grafiche e frontend

Esistono alcuni strumenti per configurare firewall usando frontend e procedure guidate.

Alcuni di essi sono:

Cercare firewall in packages.debian.org

Ci sono anche strumenti di "alto livello" a riga di comando per evitare la sintassi di "basso livello" o per semplificare alcuni compiti. Comunque la grande potenza del sistema è nel vasto numero di moduli e opzioni per i programmi base a riga di comando che spesso non vengono gestiti dai frontend.

Articoli correlati

Collegamenti esterni

Informazioni sulla rete :

Ebtables :

Netfilter (iptables/ip6tables) :

Layer 7 :

Nota

Questa pagina è stata completamente modificata da ?PoisonBit 2009-05-10 18:35:50. Ha un contenuto orientato agli utenti. Si potrebbe voler migliorarla e aggiungere riferimenti ad essa in pagine correlate o aggiungere qui riferimenti ad altre pagine. Si potrebbe voler creare un pagina sui firewall orientata agli sviluppatori.


CategoryNetwork