Provided by: manpages-it_3.73-2_all bug

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)