Avanti Indietro Indice

6. Filtraggio

Il filtraggio sotto Linux 2.4 si basa come nelle versioni precedenti sui concetti di catene (chain), obiettivi (target), tattiche (policy).

Inizialmente sono disponibili tre catene predefinite: INPUT, FORWARD, OUTPUT (tabella filter).

INPUT

Tutti i pacchetti destinati esclusivamente alla macchina firewall saranno sottoposti alle regole contenute nella catena INPUT.

       +--+
       |PC|--+ ==> +---+ <=====
       +--+  |_____|   |_______  INTERNET
       +--+  |     +---+
       |PC|--+
       +--+

       LAN       FIREWALL

FORWARD

Tutti i pacchetti destinati non alla macchina firewall ma ad una delle macchine della rete locale o provenienti dalla rete locale e diretti verso l'esterno (non al firewall) saranno sottoposti alle regole della catena FORWARD.

       +--+
       |PC|--+ <== +---+ <=====
       +--+  |_____|   |_______  INTERNET
       +--+  |     +---+
       |PC|--+ ==>       =====>
       +--+
  
       LAN        FIREWALL

OUTPUT

Tutti i pacchetti generati dalla macchina firewall e in uscita saranno sottoposti alle regole della catena OUTPUT.

       +--+
       |PC|--+ <== +---+ ===>
       +--+  |_____|   |_______  INTERNET
       +--+  |     +---+
       |PC|--+
       +--+

       LAN        FIREWALL

Ciascuna catena consiste di una tattica (policy), e di una o più regole che stabiliscono quali pacchetti sono accettati e quali no.

Una regola si compone in genere di una serie di caratteristiche che servono ad individuare un pacchetto e da un obiettivo (target) che indica cosa fare del pacchetto se la regola è soddisfatta. L'obiettivo può corrispondere ad ACCEPT (pacchetto accettato), DROP (pacchetto scartato), REJECT (pacchetto rifiutato).

Una catena si può rappresentare in questo modo (qui prendiamo ad esempio la catena INPUT):

            INPUT
            +--------------+
       |    |  Regola 1    |
       |    ----------------
       |    |  Regola 2    |
       |    ----------------
       V    |  Regola 3    |
            ----------------
            Tattica  

Tutti i pacchetti che arrivano dalla rete e destinati al firewall saranno sottoposti, in questo caso, a ciascuna regola contenuta nella catena INPUT in ordine. Se la Regola 1 non è soddisfatta si prosegue con la successiva, se una regola (es. Regola 2) è soddisfatta allora il pacchetto è accettato, scartato o rifiutato (questa informazione è contenuta nella regola). Se nessuna regola è soddisfatta allora si applica la tattica (policy), che non dice altro a sua volta se accettare, scartare o rifiutare.

I pacchetti che viaggiano nella rete contengono un insieme di informazione molto utili come ad esempio indirizzo sorgente (indirizzo di chi ha inviato il pacchetto), indirizzo destinazione (indirizzo a cui il pacchetto è destinato), tipo di pacchetto (TCP, UDP, ICMP), porta sorgente e porta destinazione (FTP, TELNET, WWW, ...), ...

Queste informazioni sono usate nelle regole per stabilire quali pacchetti sono da accettare e quali da scartare. Ad esempio se non si desidera che qualcuno dall'esterno possa effettuare un telnet su una macchina della LAN è necessario creare una regola nella tabella filter, catena FORWARD, che filtri, rifiuti i pacchetti destinati alla rete locale, aventi come porta destinazione la porta telnet.

iptables  -A FORWARD  -p tcp  -i eth0 -o eth1  --dport telnet  -j DROP
          ^^^^^^^^^^  ^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^
             |           |       |                    |           |
             |           |       |                    |           +- se la regola è soddisfatta
             |           |       |                    |              scarta (DROP) il pacchetto
             |           |       |                    +- porta dest. del pacchetto (telnet)
             |           |       +---- interfacce ingresso e uscita del pacchetto
             |           + protocollo tcp
             + aggiungi regola alla catena FORWARD

Con questa nuova versione come abbiamo visto il tool incaricato di impostare le regole di filtraggio nel kernel è iptables, anche se è ancora possibile usare ipfwadm e ipchains.

Questo modulo si occupa di fornire le operazioni di base per la creazione, gestione delle catene e delle regole.

6.1 Operazioni sulle catene

Segue un elenco delle operazioni che permettono di creare, modificare, cancellare le catene:

NOTA 1: se non si specifica una catena con le opzioni '-L','-X','-F','-Z' si intenderanno tutte le catene. Esempio:

# Rimuovi tutte le regole della catena INPUT
iptables -F INPUT

# Rimuovi tutte le regole presenti in TUTTE le catene
iptables -F

NOTA 2: l'opzione -L può essere utilizzata inoltre per visualizzare tutte le catene o una sola (se si desiderano anche i numeri di linea utilizzare l'opzione '--line-numbers'):

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             anywhere           tcp dpt:telnet

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination 
DROP       tcp  --  anywhere             anywhere           tcp dpt:telnet

# iptables --line-numbers -L INPUT
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    DROP       tcp  --  anywhere             anywhere      tcp dpt:telnet 

E' inoltre possibile visualizzare informazioni sul numero dei pacchetti sottoposti alle regole con l'opzione '-v' (o '--verbose') oppure ottenere contemporaneamente un elenco delle regole e l'azzeramento dei contatori:


# iptables -v -L
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
    2   120 DROP       tcp  --  any    any     anywhere             anywhere     tcp dpt:telnet 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination  

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 


# iptables -v -L -Z
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   120 DROP       tcp  --  any    any     anywhere             anywhere     tcp dpt:telnet 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 2 packets, 120 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Zeroing chain `INPUT'
Zeroing chain `FORWARD'
Zeroing chain `OUTPUT'

6.2 Operazioni sulle regole

Segue un elenco delle operazioni che permettono di inserire, cancellare, modificare le regole delle catene:

6.3 Operazioni di selezione

Segue una lista delle opzioni che consentono di realizzare delle regole per filtrare i pacchetti:

6.4 Estensioni

Oltre alle opzioni appena viste ci sono altre opzioni molto utili, disponibili come estensioni:

Vedere i capitoli corrispondenti per una completa descrizione.


Avanti Indietro Indice