Avanti Indietro Indice

4. Netfilter

4.1 Descrizione

Netfilter è un'infrastruttura presente nel kernel, realizzata nel 1998 da Rusty Russell e Michael Neuling, che consente di scrivere dei moduli appositi per gestire il filtraggio, il manipolamento dei pacchetti, il NAT (Network Address Translation) e di caricarli quando necessario con il comando insmod o modprobe.

E' possibile compilarli e integrarli nel kernel, creare nuovi moduli, aggiungere nuove funzionalità a quelle esistenti e perfino utilizzare i tool ipfwadm e ipchains, utilizzati rispettivamente con le versioni 2.0 e 2.2 del kernel, presenti anch'essi come moduli per garantire compatibilità con il passato. Naturalmente ipfwadm e ipchains non saranno supportati ancora a lungo, a partire dal 2004 il tool ufficiale sarà iptables, già disponibile, ma ancora in fase di sviluppo.

4.2 Differenze rispetto alle versioni 2.0 e 2.2 del kernel

Le prime novità riguardano la gestione del passaggio dei pacchetti attraverso il sistema di filtraggio. Nei kernel 2.0 e 2.2 il pacchetto in arrivo è sottoposto innanzi tutto alle regole della catena INPUT (prima del routing) quindi successivamente, se destinato alla rete locale, alla catena forward e poi output, se destinato invece al firewall è inviato ai processi locali. I pacchetti in uscita dal firewall invece sono sottoposti alla sola catena output.

  __      +-------+      +-------+      +---------+      +---------+        __
 |__| --->| input | ---> |Routing| ---> | forward | ---> |  output | --->  |__|
          +-------+      +-------+      +---------+      +---------+^
                             |                             ^
                             |                             |
                             V                             |
                             +------ processi locali ------+

L'impostazione classica del firewall prevede quindi di inserire le regole di filtraggio nella catena input e di usare eventualmente la catena forward per il mascheramento.

Nel prossimo kernel 2.4, a differenza della versione 2.2, quando un pacchetto arriva dalla rete viene innanzi tutto sottoposto al codice di routing e quindi se destinato o proveniente dalla rete locale e diretto all'esterno, è sottoposto esclusivamente alle regole della catena FORWARD. Alla catena INPUT sono destinati tutti i pacchetti diretti esclusivamente al firewall. Mentre i pacchetti che sono sottoposti alle regole della catena OUTPUT sono solo quelli generati esclusivamente dal firewall e in uscita.


  __        +-------+      +---------+             __
 |__| --->  |Routing| ---> | FORWARD | -->.-----> |__|
            +-------+      +---------+    ^
                |                         |
                |                         |
                V                         |
            +-------+                +--------+
            | INPUT |                | OUTPUT |
            +-------+                +--------+
                |                         ^
                V                         |
                +---- processi locali ----+

Questa modifica permette di avere maggior efficienza, ogni pacchetto è sottoposto alle regole di una SOLA catena (INPUT o FORWARD o OUTPUT), e semplicità di utilizzo. E' possibile utilizzare la catena INPUT per filtrare i pacchetti diretti al firewall, la catena OUTPUT per filtrare i pacchetti creati dal firewall e in uscita, la catena FORWARD per filtrare i pacchetti che transitano attraverso il firewall diretti o provenienti dalla rete locale.

4.3 Kernel

Per poter utilizzare correttamente Netfilter e iptables è necessario compilare il kernel selezionando le seguenti voci:

 Networking options --->
         ...
         [*] Network packet filtering (replaces ipchains)        [CONFIG_NETFILTER]
         [ ] Network packet filtering debugging                  [CONFIG_NETFILTER_DEBUG]
         ...

 IP: Netfilter Configuration --->

         <M> Connection tracking (required for masq/NAT)         [CONFIG_IP_NF_CONNTRACK]
         <M> FTP protocol support                                [CONFIG_IP_NF_FTP]
         <M> Userspace queueing via NETLINK (EXPERIMENTAL) (NEW) [CONFIG_IP_NF_QUEUE]            
         <M> Iptables support (required for filtering/masq/NAT)  [CONFIG_IP_NF_IPTABLES]
         <M> limit match support                                 [CONFIG_IP_NF_MATCH_LIMIT]
         <M> MAC address match support                           [CONFIG_IP_NF_MATCH_MAC]   
         <M> netfilter MARK match support                        [CONFIG_IP_NF_MATCH_MARK]
         <M> Multiple port match support                         [CONFIG_IP_NF_MATCH_MULTIPORT]
         <M> TOS match support                                   [CONFIG_IP_NF_MATCH_TOS]
         <M> Connection state match support                      [CONFIG_IP_NF_MATCH_STATE]
         <M> Packet filtering                                    [CONFIG_IP_NF_FILTER]
         <M>   REJECT target support                             [CONFIG_IP_NF_TARGET_REJECT]
         <M>   MIRROR target support (EXPERIMENTAL)              [CONFIG_IP_NF_TARGET_MIRROR]            
         <M> Full NAT                                            [CONFIG_IP_NF_NAT]
         <M>   MASQUERADE target support                         [CONFIG_IP_NF_TARGET_MASQUERADE]
         <M>   REDIRECT   target support                         [CONFIG_IP_NF_TARGET_REDIRECT]       
         <M> Packet mangling                                     [CONFIG_IP_NF_MANGLE]
         <M>   TOS target support                                [CONFIG_IP_NF_TARGET_TOS]   
         <M>   MARK target support                               [CONFIG_IP_NF_TARGET_MARK]  
         <M> LOG target support                                  [CONFIG_IP_NF_TARGET_LOG]

Le voci relative a "IP: Netfilter Configuration" sono state tutte impostate come moduli (M), ma possono essere selezionate anche in modo da essere incluse direttamente nel kernel (*), o non essere proprio selezionate (sconsigliato). E' inoltre possibile includere solo una parte nel kernel e il resto compilarli come moduli, appena necessari potranno essere caricati con i comandi modprobe o insmod.

4.4 Descrizione

Networking options ---> [*] Network packet filtering (replaces ipchains)

Selezionare questa voce se si desidera che la Linux box possa operare come firewall, e quindi filtrare, mascherare, manipolare i pacchetti usando l'infrastruttura netfilter e il nuovo programma iptables, sostituto di ipchains nel kernel 2.4.

Networking options ---> [ ] Network packet filtering debugging

Selezionare questa voce nel caso si debba effettuare il debug del codice di netfilter e si vogliano maggiori informazioni.

IP: Netfilter Configuration --->

Menu principale per la selezione dei moduli.

Connection tracking (required for masq/NAT)

Il connection tracking tiene traccia delle connessioni stabilite in modo da riconoscere quali pacchetti ne fanno parte e quali no. Richiesto per il mascheramento (masquerading) e altre forme di NAT (Network Address Translation). Può essere utilizzato anche per supportare il filtraggio dei pacchetti.

FTP protocol support

Selezionare questa voce se la macchina effettua il masquerading o altra forma di NAT, e se si intende usare FTP. FTP causa alcuni problemi con il connection tracking quindi è necessario includere questo modulo per risolverli.

Userspace queueing via NETLINK (EXPERIMENTAL) (NEW)

Netfilter è in grado di accodare e passare i pacchetti allo userspace. Il dispositivo netlink può poi essere utilizzato per accedere a questi dati.

Iptables support (required for filtering/masq/NAT)

Selezionare questa voce per filtrare i pacchetti e/o per effettuare il NAT, utilizzando il nuovo tool iptables.

limit match support

Selezionare questa voce per poter limitare il numero di confronti. Utile se usato in combinazione con il modulo LOG per limitare la registrazione dei messaggi e per aggirare alcuni attacchi DoS (Denial of Service).

MAC address match support

Selezionare questa voce se si vogliono confrontare i pacchetti in base all'indirizzo ethernet associato.

netfilter MARK match support

Selezionare questa voce se si vogliono confrontare i pacchetti in base al valore 'nfmark'. Questo valore può essere impostato attraverso il target MARK (vedere iptables).

Multiple port match support

Selezionare questa voce se si vogliono confrontare i pacchetti TCP o UDP in base ad una serie di porte sorgenti o destinazione. Nota che normalmente una regola può confrontare solo un singolo intervallo di porte.

TOS match support

Selezionare questa voce se si vogliono confrontare i pacchetti in base ai campi TOS (Type Of Service) dei pacchetti IP.

Connection state match support

Selezionare questa voce se si vogliono confrontare i pacchetti in base all'appartenenza o meno ad una connessione tracciata (pacchetti precedenti). Se si decide di includere questo modulo nel kernel tutte le connessioni saranno automaticamente tracciate.

Unclean match support (EXPERIMENTAL)

Selezionare questa voce se si vogliono confrontare i pacchetti in base ad una serie di campi delle intestazioni IP, TCP, UDP, ICMP, utile per verificare la validità dei pacchetti.

Owner match support (EXPERIMENTAL)

Selezionare questa voce se si vogliono confrontare i pacchetti generati localmente in base a chi li ha creati: utente, gruppo, processo, sessione.

Packet filtering

Definisce una tabella 'filter', in cui è possibile inserire le regole per il filtraggio dei pacchetti.

REJECT target support

Selezionare questa voce se si vuole utilizzare il target REJECT, che permette di inviare un pacchetto ICMP error in risposta.

MIRROR target support (EXPERIMENTAL)

Selezionare questa voce se si vuole permettere ad una regola di rispedire indietro un pacchetto ricevuto.

Full NAT

Selezionare questa voce se si vuole implementare il masquerading, il port forwarding o altre forme di NAT (Network Address Translation). Queste forme di NAT si possono impostare utilizzando iptables e l'opzione '-t nat'.

MASQUERADE target support

Selezionare questa voce se si desidera utilizzare questa forma specializzata di mascheramento, implementata specificatamente per supportare i collegamenti PPP dialup.

REDIRECT target support

Selezionare questa voce se si desidera utilizzare il proxy trasparente, un'altra forma di NAT.

Packet mangling

Selezionare questa voce se si vogliono manipolare i pacchetti, ossia modificare i campi delle intestazioni.

TOS target support

Selezionare questa voce se si vogliono creare delle regole nella tabella 'mangle' che possano alterare i bit TOS (Type Of Service) dei pacchetti.

MARK target support

Selezionare questa voce per aggiungere un target 'MARK' che permetta di creare nella tabella 'mangle' delle regole che siano in grado di alterare il campo nfmark associato ai pacchetti. Utile per cambiare l'instradamento (routing) dei pacchetti. Utilizzato in particolare per lo shaping, controllo del traffico.

LOG target support

Selezionare questa voce per aggiungere un target 'LOG' che permetta di creare delle regole che registrino le intestazioni dei pacchetti.

Se si decide di includere queste voci come moduli, e quindi di non includerle direttamente nel kernel, allora nella directory /lib/modules/2.x.xx/ipv4/ dovrebbero essere presenti tutti i seguenti moduli o quasi dato che alcuni sono ancora sperimentali:


ip_conntrack.o           ip_conntrack_ftp.o         ip_nat_ftp.o
ip_queue.o               ip_tables.o                ipt_LOG.o
ipt_MARK.o               ipt_MASQUERADE.o           ipt_MIRROR.o
ipt_REDIRECT.o           ipt_REJECT.o               ipt_TOS.o
ipt_limit.o              ipt_mac.o                  ipt_mark.o
ipt_multiport.o          ipt_owner.o                ipt_state.o
ipt_tos.o                ipt_unclean.o

iptable_filter.o         iptable_mangle.o           iptable_nat.o

Avanti Indietro Indice