Provided by:
manpages-it_2.80-3_all 
NOME
ipfw - firewall e autenticazione per IP
SINTASSI
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <linux/icmp.h>
#include <linux/if.h>
#include <linux/ip_fw.h>
int setsockopt (int socket, IPPROTO_IP, int command, void *data, int
length)
DESCRIZIONE
Il firewall IP e le capacità di autenticazione del kernel Linux offrono
un meccanismo per l’autenticazione dei pacchetti IP, per costruire
firewall basati sul filtraggio dei pacchetti, per costruire firewall
basati sul proxy trasparerente (ridirigendo i pacchetti ad un socket
locale), e per mascherare i pacchetti inoltrati. La gestione di queste
funzionalità è basata su quattro liste separate mantenute nel kernel,
ciascuna delle quali contiene zero o più regole. Ogni regola specifica
le informazioni sugli indirizzi del mittente e del destinatario, i
protocolli, i numeri di porta e altre caratteristiche. Un pacchetto
corrisponderà ad una regola quando le caratteristiche della regola
corrispondono a quelle del pacchetto IP. Le quattro categorie di
regole sono:
Accounting
Le regole di autenticazione sono usate per tutti i pacchetti IP
che vengono trasmessi o ricevuti tramite una delle interfacce di
rete locali. Ogni pacchetto viene confrontato con tutte le
regole di questa lista, e ogni corrispondenza causerà un
incremento nei contatori di pacchetti e di byte associati con
quella regola.
Firewall di ingresso
Queste regole gestiscono l’accettazione di pacchetti in entrata.
Tutti i pacchetti che entrano attraverso una delle interfacce di
rete locali sono confrontati con le regole del firewall di
ingresso. La prima regola che corrisponde ad un pacchetto
determina il comportamento da tenere e provoca un aggiornamento
dei contatori di pacchetti e di byte per la regola. Quando non
vengono trovate corrispondenze, viene usata la politica
predefinita per il firewall di ingresso.
Firewall di uscita
Queste regole definiscono i permessi per la trasmissione di
pacchetti IP. Tutti i pacchetti pronti per essere trasmessi
attraverso una delle interfacce di rete locali vengono
confrontati con le regole del firewall di uscita. La prima
regola che corrisponde ad un pacchetto determina il
comportamento da tenere e provoca un aggioranamento dei
contatori di pacchetti e di byte. Quando non vengono trovate
corrispondenze, viene usata la politica predefinita per il
firewall di uscita.
Firewall di inoltro
Queste regole definiscono i permessi per l’inoltro di pacchetti
IP. Tutti i pacchetti spediti da un host remoto e destinati ad
un altro host remoto vengono confrontati con le regole del
firewall di inoltro. La prima regola che corrisponde ad un
pacchetto determina il comportamento da tenere e provoca un
aggioranamento dei contatori di pacchetti e di byte. Quando non
vengono trovate corrispondenze, viene usata la politica
predefinita per il firewall di inoltro.
Tutte le regole di firewall (non quelle di autenticazione) contengono
una politica che specifica l’azione da intraprendere quando un
pacchetto corrisponde a tale regola. Ci sono 3 differenti politiche
possibili: accept (lascia passare il pacchetto), reject (non accetta il
pacchetto e manda un messaggio "ICMP host unreachable" al mittente del
pacchetto come notifica), e deny (ignora il pacchetto senza mandare
notifiche). Per tutti e tre i tipi di firewall esiste anche un
comportamento predefinito, che si applica a tutti i pacchetti che non
corrispondono ad alcuna regola.
Le regole di ingresso determinano anche se i pacchetti devono essere
rediretti ad un socket locale dopo essere stati accettati dal firewall
di ingresso. In questo caso, il pacchetto verrà ricevuto da un processo
locale, anche se era stato mandato ad un altro host e/o un altro numero
di porta. Questa funzionalità può essere usata solo con pacchetti TCP
o UDP.
Le regole di inoltro definiscono anche se i pacchetti devono essere
mascherati oppure no quando vengono ritrasmessi. In questo caso,
l’indirizzo del mittente del pacchetto IP viene sostituito
dall’indirizzo dell’host locale, e la porta che appare come mittente
nell’header TCP o UDP viene rimpiazzata da un numero di porta
temporaneo generato localmente prima di inoltrare il pacchetto.
Siccome questo tipo di gestione viene effettuato dal kernel, i
pacchetti di risposta (mandati al numero di porta temporanea dell’host
locale) sono riconosciuti automaticamente. L’indirizzo di destinazione
e il numero di porta di questi pacchetti verranno quindi rimpiazzati
con l’indirizzo e il numero di porta originali, che sono stati salvati
al momento della mascheratura del primo pacchetto. Questa funzionalità
può essere usata solo con i pacchetti TCP o UDP.
Questo paragrafo descrive il modo in cui un pacchetto attraversa il
firewall e le regole di autenticazione. Un pacchetto ricevuto da una
delle interfacce di rete locali passerà attraverso i seguenti gruppi di
regole:
autenticazione (dispositivo di ingresso)
firewall di ingresso (dispositivo di ingresso)
Tra parentesi è indicato il dispositivo (interfaccia di rete) che viene
usato quando si cerca di trovare una regola che corrisponda al
pacchetto IP. Dopo questo passo, il pacchetto sarà opzionalmente
rediretto ad un socket locale. Quando il pacchetto deve essere
inoltrato ad un host remoto, passerà anche attraverso questo insieme di
regole:
firewall di inoltro (dispositivo di uscita)
Dopo questo passaggio un pacchetto potrà opzionalmente essere
mascherato. Risposte ai pacchetti mascherati non passeranno mai dal
firewall di inoltro (ma passeranno sia dal firewall di ingresso che da
quello di uscita). Tutti i pacchetti inviati da una delle interfacce
di rete locali, sia generati localmente che inoltrati, passeranno dal
seguente insieme di regole:
firewall di uscita (dispositivo di uscita)
autenticazione (dispositivo di uscita)
Si noti che i pacchetti mascherati passeranno dal firewall di uscita e
dalle regole di autenticazione con i nuovi header (dopo aver
attraversato i firewall di ingresso e di inoltro con gli header
originali). Inoltre, risposte a pacchetti mascherati avranno header
diversi quando attraverseranno le regole dei firewall di ingresso e di
uscita.
La gestione del firewall e dell’autenticazione può essere cambiata
attraverso chiamate a R setsockopt (2). Le regole esistenti possono
essere osservate guardando i seguenti quattro file nella directory
/proc/net : R ip_acct , R ip_input , R ip_output , e R ip_forward . La
gestione attuale relativa alle sessioni mascherate si trova nel file
ip_masquerade nella stessa directory (si noti che le regole che
specificano quali sessioni vengono mascherate si trovano in R
ip_forward ).
COMANDI
I comandi per cambiare le liste di regole o i comportamenti predefiniti
devono essere passati come opzioni alla chiamata di sistema R
setsockopt (2), che opera su un socket IP raw. La maggior parte dei
comandi richiede il passaggio di dati aggiuntivi. Un puntatore a
questi dati e la loro lunghezza vengono passati a R setsockopt come
valore della opzione e lunghezza della opzione stessa. Si possono
usare i seguenti comandi:
IP_ACCT_APPEND
IP_FW_APPEND_IN
IP_FW_APPEND_OUT
IP_FW_APPEND_FWD
Aggiungono una regola a uno degli elenchi di autenticazione o di
firewall. In base al comando, la regola viene aggiunta
all’elenco di autenticazione, al firewall di ingresso, di
uscita, o a quello di inoltro, nell’ordine. La nuova regola
viene aggiunta in coda all’elenco. Il dato passato con questi
comandi è una struttura R ip_fw , che definisce i contenuti
della nuova regola.
IP_ACCT_INSERT
IP_FW_INSERT_IN
IP_FW_INSERT_OUT
IP_FW_INSERT_FWD
Questi comandi sono uguali ai comandi di aggiunta, tranne che la
nuova regola è inserita all’inizio dell’elenco.
IP_ACCT_DELETE
IP_FW_DELETE_IN
IP_FW_DELETE_OUT
IP_FW_DELETE_FWD
Rimuovono una regola dall’elenco di autenticazione o di
firewall. In base al comando, la regola viene rimossa
dall’elenco per l’autenticazione, dal firewall di ingresso, di
uscita, o da quello di inoltro, nell’ordine. Il dato passato
con questi comandi è una struttura R ip_fw , che definisce i
contenuti della regola da rimuovere. Viene rimossa dall’elenco
la prima regola che corrisponde alla descrizione.
IP_ACCT_ZERO
IP_FW_ZERO_IN
IP_FW_ZERO_OUT
IP_FW_ZERO_FWD
Azzerano i contatori di pacchetti e di byte in tutte le regole
della lista di autenticazione, del firewall di ingresso, di
uscita, o di quello di inoltro, nell’ordine. Si noti che
occorre passare con questo comando un numero intero (inutile)
come dato. Vedere anche la descrizione dei file /proc/net per
sapere come stampare i contatori e azzerarli atomicamente.
IP_ACCT_FLUSH
IP_FW_FLUSH_IN
IP_FW_FLUSH_OUT
IP_FW_FLUSH_FWD
Rimuovono tutte le regole dalla lista di autenticazione, dal
firewall di ingresso, di uscita, o di quello di inoltro,
nell’ordine. Si noti che occorre passare un numero intero
(inutile) come dato con questo comando.
IP_FW_POLICY_IN
IP_FW_POLICY_OUT
IP_FW_POLICY_FWD
Cambiano la risposta predefinita per il firewall di ingresso,
quello di uscita e quello di inoltro. Il nuovo comportamento
viene passato sotto forma di numero intero con questi possibili
valori: IP_FW_F_ACCEPT (accetta il pacchetto), IP_FW_F_ICMPRPL
(rifiuta il pacchetto mandando al mittente un messaggio di
destinazione irraggiungibile), oppure 0 (ignora il pacchetto
senza mandare ulteriori notifiche). Il comportamento viene
usato quando nessuna delle regole disponibili nella lista
appropriata si applica al pacchetto in questione. Per il
firewall di inoltro, il comportamento può anche essere
IP_FW_F_ACCEPT | IP_FW_F_MASQ ®(accetta un pacchetto da
inoltrare, ma effettuando il mascheramento per i pacchetti TCP o
UDP).
IP_FW_MASQ_TIMEOUTS
Imposta i valori di timeout usati per la mascheratura. Il dato
passato con questo comando è una struttura che contiene tre
campi di tipo R int , rappresentanti i tempi massimi in
"jiffies" (1/HZ di secondo) per le sessioni TCP, le sessioni TCP
che hanno già ricevuto un pacchetto FIN e i pacchetti UDP,
nell’ordine. Un valore di timeout pari a 0 significa che il
valore attuale del campo corrispondente non deve essere
modificato.
IP_FW_CHECK_IN
IP_FW_CHECK_OUT
IP_FW_CHECK_FWD
Controllano se un pacchetto verrebbe accettato, ignorato o
rifiutato dal firewall di ingresso (IP_FW_CHECK_IN), da quello
di uscita (IP_FW_CHECK_OUT), o da quello di inoltro
(IP_FW_CHECK_FWD). Il dato passato con questi comandi è una
struttura R ip_fwpkt , che definisce gli header del pacchetto da
controllare e l’indirizzo dell’interfaccia.
STRUTTURE
La struttura ip_fw contiene i seguenti campi che devono essere riempiti
al fine di aggiungere o cancellare una regola:
struct in_addr fw_src, fw_dst
Indirizzi IP del mittente e del destinatario.
struct in_addr fw_smsk, fw_dmsk
Maschere per gli indirizzi IP del mittente e del destinatario.
Si noti che una maschera 0.0.0.0 corrisponderà a qualsiasi
indirizzo.
struct in_addr fw_via
Indirizzo IP dell’interfaccia attraverso la quale il pacchetto è
stato ricevuto dal sistema o sta per essere spedito.
L’indirizzo 0.0.0.0 ha un significato speciale: corrisponderà a
tutte le interfacce.
char fw_vianame[IFNAMSIZ]
Nome dell’interfaccia attraverso la quale il pacchetto è stato
ricevuto dal sistema o sta per essere spedito. La stringa vuota
ha un significato speciale: corrisponderà a tutti i dispositivi.
unsigned short fw_flg
Flag per questa regola. I bit per le differenti opzioni possono
venire associati tramite un’operazione di OR.
Il protocollo (obbligatorio). I valori possibili sono
IP_FW_F_TCP (TCP), IP_FW_F_UDP (UDP), IP_FW_F_ICMP (ICMP), o
IP_FW_F_ALL (tutti i protocolli, definisce una regola universale
di firewall o di autenticazione).
Il comportamento da tenere quando un pacchetto corrisponde a
questa regola. Il comportamento può essere IP_FW_F_ACCEPT
(accetta il pacchetto), IP_FW_F_ICMPRPL (rifiuta il pacchetto
mandando al mittente un messaggio ICMP di destinazione
irraggiungibile). Se nessuno di questi flag è specificato, il
pacchetto è scartato senza mandare alcuna notifica. Si noti che
questa politica non viene usata dalle regole di autenticazione.
Redirezione e mascheramento sono specificati anch’essi tramite
due flag: IP_FW_F_REDIR redirige un pacchetto accettato ad un
socket locale (specificato da un numero di porta, come descritto
più avanti). Questo bit è valido solo nelle regole per il
firewall di ingresso e può essere usato solo se il kernel è
stato compilato con l’opzione CONFIG_IP_TRANSPARENT_PROXY
attiva. IP_FW_F_MASQ maschera un pacchetto accettato. Questo
bit è valido solo nelle regole del firewall di inoltro e può
essere usato solo quando il kernel è stato compilato con
l’opzione CONFIG_IP_MASQUERADE attiva.
Le altre opzioni sono: IP_FW_F_BIDIR (regola bidirezionale, che
corrisponde sia in entrata che in uscita), IP_FW_F_TCPACK
(seleziona solo i pacchetti TCP con il bit ACK impostato
nell’header TCP, opzione ignorata con altri protocolli),
IP_FW_F_TCPSYN (seleziona solo i pacchetti TCP con il bit SYN
impostato e il bit ACK inattivo nell’header TCP, opzione
ignorata con altri protocolli), IP_FW_F_ACCTIN e IP_FW_F_ACCTOUT
(selezionano solo i pacchetti in entrata o in uscita; queste
opzioni hanno effetto solo nelle regole di autenticazione),
IP_FW_F_SRNG, e IP_FW_F_DRNG (vedere sotto per una descrizione
di questi flag). L’opzione IP_FW_F_PRN può essere usata per
elencare informazioni sui pacchetti selezionati tramite R printk
(). Questa opzione ha effetto solo se il kernel è stato
compilato con l’opzione CONFIG_IP_FIREWALL_VERBOSE attiva.
unsigned short fw_nsp, fw_ndp, fw_pts[IP_FW_MAX_PORTS]
Questi campi specificano il numero di porte del mittente, il
numero di porte del destinatario e il vettore in cui queste
porte sono immagazzinate, in questo ordine. Il vettore inizia
con le porte del mittente, seguite senza interruzione dalle
porte del destinatario. Se l’opzione IP_FW_F_REDIR viene usata,
queste porte sono seguite dalla porta di redirezione. Se questa
porta di redirezione è 0, la porta di destinazione del pacchetto
viene usata come porta di redirezione. Il numero totale di
porte è limitato a IP_FW_MAX_PORTS (attualmente 10). Entrambe
le liste di porte, sia quella del mittente che quella del
destinatario, possono contenere non più un intervallo di porte.
In questo caso, le prime due porte dell’elenco sono usate come
il minimo e il massimo valore di tale intervallo. Per i
pacchetti ICMP, le porte del mittente sono interpretate come
tipi ICMP e le porte di destinazione sono ignorate. Siccome il
secondo frammento e i seguenti di un pacchetto TCP o UDP non
contengono numeri di porte, questi pacchetti IP ai fini
dell’autenticazione saranno trattati come se entrambe le porte
fossero 65535. Per la stessa ragione, il secondo e gli
ulteriori frammenti di un pacchetto ICMP ai fini
dell’autenticazione sono trattati come se il tipo di messaggio
ICMP fosse 255. Inoltre, il secondo ed ulteriori frammenti di
pacchetti TCP, UDP, ICMP vengono accettati da tutti e tre i
firewall. I flag IP_FW_F_SRNG e IP_FW_F_DRNG nel campo fw_flg
riferiscono se sono state specificate le porte del mittente e/o
destinatario.
unsigned char fw_tosand, fw_tosxor
Queste maschere a 8 bit definiscono come bisogna cambiare il
campo TOS nell’header IP quando un pacchetto viene accettato
dalla regola di firewall. Il campo TOS viene prima sottoposto
ad un’operazione AND bit-a-bit con fw_tosand e il risultato di
questo viene sopposto ad un’operazione XOR con R fw_tosxor .
Qeusti campi sono ignorati nelle regole di autenticazione e in
quelle del firewall che rifiutano o ignorano i pacchetti.
La struttura R ip_fwpkt , usata nel controllo dei pacchetti, contiene i
seguenti campi:
struct iphdr fwp_iph
L’header IP. Vedere <linux/ip.h> per una descrizione dettagliata
della struttura R iphdr .
struct tcphdr fwp_protoh.fwp_tcph
struct udphdr fwp_protoh.fwp_udph
struct icmphdr fwp_protoh.fwp_icmph
Gli header TCP, UDP, e ICMP, combinati in una unione chiamata R
fwp_protoh . Vedere R <linux/tcp.h> , R <linux/udp.h> , o
<linux/icmp.h> per una descrizione dettagliata delle rispettive
strutture.
struct in_addr fwp_via
L’indirizzo dell’interfaccia attraverso la quale il pacchetto
viene ricevuto o trasmesso.
VALORE RESTITUITO
In caso di successo viene ritornato zero. In caso di errore viene
ritornato -1 e errno viene impostato di conseguenza. Vedere R
setsockopt (2) per un elenco dei possibili valori di errore. Quando
viene usato uno dei due comandi che controllano un pacchetto, viene
restituito zero quando il pacchetto verrebbe accettato senza
redirezione o mascheratura. Altrimenti, viene restituito -1 e errno
viene impostato a ECONNABORTED (il pacchetto verrebbe accettato con
redirezione), ECONNRESET (il pacchetto verrebbe accettato con
mascheratura), ETIMEDOUT (il pacchetto verrebbe ignorato), o
ECONNREFUSED (il pacchetto verrebbe rifiutato).
REGOLE DI STAMPA
Nella directory /proc/net ci sono quattro file per elencare le regole
attualmente in vigore per ciascuna categoria: ip_acct (per le regole di
autenticazione IP), ip_input (per le regole del firewall di ingresso),
ip_output (per le regole de firewall di uscita), e ip_forward (per le
regole del firewall di inoltro). La lettura di questi file restituisce
una riga di intestazione e una riga per ciascuna regola. Per tutti e
tre i tipi di firewall, la riga di intestazione include alla fine una
rappresentazione decimale del comportamento predefinito corrispondente
(uno tra IP_FW_F_ACCEPT, IP_FW_F_ICMPRPL, e zero; il comportamento del
firewall di inoltro può anche valere IP_FW_F_ACCEPT | IP_FW_F_MASQ).
Ogni riga seguente elenca nel seguente ordine i contenuti di una
regola: indirizzo e maschera del mittente, indirizzo e maschera del
destinatario, indirizzo dell’interfaccia, flag, porte del mittente e
del destinatario, contatori di pacchetti e byte, lista di porte,
maschera AND per TOS e maschera XOR per TOS. Gli indirizzi IP e le
maschere vengono stampati come otto cifre esadecimali, le maschere TOS
vengono stampate con due cifre esadecimali precedute dalla lettera A o
X, rispettivamente, e gli altri valori sono rappresentati in formato
decimale. Ciascun campo è separato da uno spazio bianco, da un ’/’
(tra l’indirizzo e la corrispondente maschera) o da "->" (tra le coppie
di indirizzo/maschera per il mittente ed il destinatario).
I file possono anche essere aperti in lettura/scrittura (ma solo root
può farlo). In tal caso, i contatori dei pacchetti e dei byte per
tutte le regole di quella categoria saranno ripristinati a zero dopo
aver restituito il loro valore attuale.
Il file /proc/net/ip_masquerade contiene la situazione corrente del
masquerading nel kernel. Dopo una riga di intestazione, ogni sessione
mascherata è descritta da una differente riga con i seguenti valori,
separati da uno spazio o da un ’:’ (nelle coppie indirizzo/porta): nome
del protocollo ("TCP" o "UDP"), indirizzo e numero di porta del
mittente, indirizzo e numero di porta del destinatario, il nuovo numero
di porta, il numero iniziale di sequenza cui viene aggiunta la
differenza, la differenza, il valore precedente della differenza, e
l’istante di timeout in jiffies (1/HZ di secondo). Tutti gli indirizzi
e i valori numerici sono in formato esadecimate, eccetto gli ultimi
tre, che sono rappresentati in decimale.
FILE
/proc/net/ip_acct
/proc/net/ip_input
/proc/net/ip_output
/proc/net/ip_forward
/proc/net/ip_masquerade
ERRORI
VEDERE ANCHE
setsockopt(2), socket(2), ipfwadm(8)
AUTORE
17 giugno 1996 IPFW(4)