Provided by: manpages-it_0.3.4-5_all bug

NOME

       ipfw - firewall e accounting 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 accounting del kernel Linux offrono  il
       meccanismo  per  il  conteggio  dei  pacchetti  IP,  per  costruire dei
       firewall  basati  sul  filtraggio  dei  pacchetti,  per  costruire  dei
       firewall  basati  sul "proxy" trasparerente (ridirigendo i pacchetti ad
       un socket locale), e  per  effettuare  la  mascheratura  dei  pacchetti
       diretti  all’esterno.   La  gestione di queste funzionalità è basata su
       quattro liste 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 usati, numeri di porta  e
       altre  caratteristiche dei pacchetti. Un pacchetto corrisponderà ad una
       regola ("match") qyando le caratteristiche del pacchetto  corrispondono
       a quelle della regola. Le quattro categorie di regole sono:

       Accounting
              Le  regole di accounting 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  entranti.
              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 ("policy") da  tenere  e  provoca  un
              aggiornamento  dei  contatori  di  pacchetti  e  di  byte per la
              regola. Quando non vengono trovate corrispondenze tra le  regole
              ed  il  pacchetto,  viene  usata  la  policy  di  default per il
              firewall di ingresso.

       Firewall di uscita
              Queste regole definiscono i  permessi  per  la  trasmissione  di
              pacchetti IP.  Tutti i pacchetti che stanno 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  tra  le  regole  ed il pacchetto, viene usata la
              policy di default per il firewall di uscita.

       Firewall passante
              Queste regole definiscono i permessi per  la  ritrasmissione  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 passante.  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  tra  le  regole   ed   il
              pacchetto,  viene  usata  la  policy  di default per il firewall
              passante.

       Tutte le regole di firewall (non quelle di  conteggio)  contengono  una
       policy  che  specifica  quale  azione  deve essere intrapresa quando un
       pacchetto  corrisponde  a  tale   regola.    Ci   sono   3   differenti
       comportamenti  possibili:  accept (lascia passare il pacchetto), reject
       (non accetta il pacchetto e manda un messaggio "ICMP host  unreachable"
       al  mittente  del pacchetto), e deny (ignora il pacchetto senza mandare
       notifiche al mittente).  Per tutti e tre  i  tipi  di  firewall  esiste
       anche  un  comportamento di default, 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 calcolatore e/o un altro
       numero di  porta.   Questa  funzionalità  può  essere  usata  solo  con
       pacchetti TCP o UDP.

       Le  regole  passanti  ("forwarding")  definiscono  anche se i pacchetti
       devono essere mascherati ("maquerading")  quando  vengono  ritrasmessi.
       In  questo  caso,  l’indirizzo  del  mittente  del  pacchetto  IP viene
       rimpiazzato con l’indirizzo del  calcolatore  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  ritrasmettere
       il  pacchetto.   Siccome  questo  tipo di gestione viene effettuato dal
       kernel, i pacchetti di risposta (mandati al numero di porta  temporanea
       del calcolatore 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ò solo essere usata con i pacchetti TCP o UDP.

       Questo  paragrafo  descrive  il  modo in cui un pacchetto attraversa il
       firewall e le regole di accounting.  Un pacchetto ricevuto da una delle
       interfacce  di  rete  locali  passerà  attraverso  i seguenti gruppi di
       regole:
              accounting (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  sara  opzionalmente
       ridiretto  ad  un  socket  locale.  Quando  il  pacchetto  deve  essere
       ritrasmesso ad un calcolatore remoto, passerà anche  attraverso  questo
       insieme di regole:
              firewall di uscita (dispositivo di uscita)
              accounting (dispositivo di uscita)
       Si  noti  che  i  pacchetti mascherati passano attraverso le regole del
       firewall di uscita e di accounting dopo l’assegnazione dei nuovi header
       (mentre  il  firewall  di  ingresso  e quello di ritrasmissione vengono
       attraversati con  gli  header  originali).   Inoltre,  le  risposte  ai
       pacchetti   mascherati   avranno   header  differenti  quando  passanto
       attraverso le regole dei firewall di ingresso e uscita.

       La  gestione  del  firewall  e  dell’accounting  può  essere   cambiata
       attraverso chiamate a setsockopt(2).  Le regole attualemente attive nel
       sistema possono essere osservate  guardando  i  seguenti  quattro  file
       nella  directory /proc/net: ip_acct, ip_input, ip_output, e ip_forward.
       Lo  stato  attuale  delle  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
       ip_forward).

COMANDI

       I  comandi per cambiare le liste di regole o i comportamenti di default
       devono  essere  passati  come  opzione   alla   chiamata   di   sistema
       setsockopt(2),  che  opera su un socket IP "raw".  La maggior parte dei
       comandi richiede il passaggio  di  dati  aggiuntivi.   Un  puntatore  a
       questi  data  e  la  loro  lunghezza  vengono passati a 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  una  delle  liste di accounting o di
              firewall.  In base al comando, la  regola  viene  aggiunta  alla
              lista  di  accounting,  al  firewall di ingresso, di uscita, o a
              quello passante, nell’ordine.  La nuova regola viene aggiunta in
              coda  alla  lista.   Il  dato  passato  con questi comandi è una
              struttura 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
              regola è inserita all’inizio della lista.

       IP_ACCT_DELETE
       IP_FW_DELETE_IN
       IP_FW_DELETE_OUT
       IP_FW_DELETE_FWD
              Rimuovono  una  regola  dalle liste di accounting o di firewall.
              In base al comando, la regola  viene  rimossa  dalla  lista  per
              l’accounting,  dal  firewall di ingresso, di uscita, o da quello
              passante, nell’ordine.  Il dato passato con questi comandi è una
              struttura  ip_fw,  che  definisce  i  contenuti  della regola da
              rimuovere.  Viene  rimossa  dalla  lista  la  prima  regola  che
              corrisponda 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 accounting, del firewall di ingresso, di  uscita,
              o  di quello passante, nell’ordine.  Si noti che occorre passare
              alla funzione setsockopt un numero intero come dato  relativo  a
              questi  comandi, anche se non viene utilizzato.  Vedere anche la
              descrizione dei file /proc/net per sapere un modo per 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  accounting,  del
              firewall  di  ingresso,  di  uscita,  o  di   quello   passante,
              nell’ordine.   Si noti che occorre passare un numero intero come
              dato di questi comandi, anche se non viene utilizzato.

       IP_FW_POLICY_IN
       IP_FW_POLICY_OUT
       IP_FW_POLICY_FWD
              Cambiano la risposta di default per  il  firewall  di  ingresso,
              quello  di  uscita  e  quello  passante.  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 alcuna notifica al  mittente).   Il  comportamento
              specificato  viene usato quando nessuna delle regole disponibili
              nella lista appropriata si applica al  pacchetto  in  questione.
              Per  il  firewall  passante,  il  comportamento può anche essere
              specificato come  IP_FW_F_ACCEPT  |  IP_FW_F_MASQ  ®(accetta  un
              pacchetto  da ritrasmettere, ma effettuando il mascheramento nel
              caso di pacchetti TCP o UDP).

       IP_FW_MASQ_TIMEOUTS
              Assegna i valori di timeout usati per la mascheratura.  Il  dato
              passato  insieme  a questo comando è una strutturea che contiene
              tre  campi  di  tipo  int,  rapprsentanti  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  accetato,  ignorato  o
              rifiutato dal firewall di ingresso (IP_FW_CHECK_IN),  da  quello
              di    uscita    (IP_FW_CHECK_OUT),    o   da   quello   passante
              (IP_FW_CHECK_FWD).  Il dato passato con  questi  comandi  è  una
              struttura  ip_fwpkt,  che  definisce gli header del pacchetto da
              controllare e l’indirizzo dell’interfaccia usata.

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 del mittente ("source") e del destinatario.

       struct in_addr fw_smsk, fw_dmsk
              Maschere  (di  tipo  "netmask") per gli indirizzi del mittente e
              del destinatario.  Si noti che una  maschera  posta  a   0.0.0.0
              risulta in una corrispondenza con 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: viene usato per
              indicare una qualsiasi interfaccia.

       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:  viene  usata  per  indicare  una
              qualsiasi interfaccia.

       unsigned short fw_flg
              "Flag"  per  questa  regola.   I  bit  per le differenti opzioni
              possono venire associati tramite un’operazione  di  OR.  I  flag
              includono le seguenti informazioni.

              Il   protocollo   (obbligatorio).    I   valori  possibili  sono
              IP_FW_F_TCP (TCP), IP_FW_F_UDP  (UDP),  IP_FW_F_ICMP  (ICMP),  e
              IP_FW_F_ALL  (tutti  i protocolli, usato per definire una regola
              universale di firewall o di conteggio).

              Il comportamento da tenere quando un pacchetto corrisponde  alle
              condizioni  poste  da 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 al mittente.  Si noti che la specifica di comportamento
              non viene usata dalle regole di accounting.

              Redirezione  e  mascheramento sono specificati anch’essi tramite
              due flag: IP_FW_F_REDIR  redirige  un  pacchetto  ad  un  socket
              locale  dopo  averlo  accettato  (il  socket è specificato da un
              numero diporta, 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 dopo averlo accettato.  Questo bit è valido solo nelle
              regole  del  firewall passante 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 ad entrambe le direzioni), IP_FW_F_TCPACK (seleziona
              solo  i  pacchetti  TCP  con  il bit ACK attivo nell’header TCP,
              opzione   ignorata   con   altri   protocolli),   IP_FW_F_TCPSYN
              (seleziona  solo  i pacchetti TCP con il bit SYN attivo 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  entranti  o  uscenti;  queste  opzioni  hanno  solo
              effetto   nelle   regole   di   accounting),   IP_FW_F_SRNG,   e
              IP_FW_F_DRNG (vedere sotto per una descriszione di questi flag).
              L’opzione  IP_FW_F_PRN  può  essere  usata per stampare  tramite
              printk() alcune informazioni riguardo ai pacchetti selezioanati.
              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 poi
              questa porta di redirezione è 0, allora la porta di destinazione
              originale  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  un
              intervallo  di  porte, ma solo uno. In questo caso, le prime due
              porte della lista 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  del  destinatario
              sono  ignorate.  Siccome il secondo frammento e i seguenti di un
              pacchetto TCP o UDP  non  contengono  numeri  di  porte,  questi
              pacchetti  ai  fini  dell’accounting  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’accounting 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  fw_tosxor.
              Qeusti campi sono ignorati  nelle  regole  di  accounting  e  in
              quelle del firewall che rifiutano o ignorano i pacchetti.

       La  struttura  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 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 i una unione chiamata
              fwp_protoh.     Vedere    <linux/tcp.h>,    <linux/udp.h>,     e
              <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   assegnato   correttametne.    Vedere
       setsockopt(2)  per  una  lista  dei possibili codici di errore.  Quando
       viene usato uno dei due comandi che  controllano  un  pacchetto,  viene
       ritornato  zero quando il pacchetto verrebbe accetato senza redirezione
       o mascheratura. Altrimenti, viene ritornato -1 e errno viene  assegnato
       a  ECONNABORTED  (il  pacchetto  sarebbe  accettato  con  redirezione),
       ECONNRESET (il pacchetto sarebbe accettato con mascheratura), ETIMEDOUT
       (il  pacchetto  sarebbe ignorato), o ECONNREFUSED (il pacchetto sarebbe
       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 trgole di
       accounting 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 passante).  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 di default corrispondente
       (uno tra IP_FW_F_ACCEPT, IP_FW_F_ICMPRPL, e zero; il comportamento  del
       firewall passante può anche valere IP_FW_F_ACCEPT | IP_FW_F_MASQ).

       Ogni  riga  di testo seguente elenca nel seguente ordine i contenuti di
       una regola: indirizzo e netmask del mittente, indirizzo e  netmask  del
       destinatario, 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 di rete vengono stampati come
       otto cifre esadecimali, le maschere TOS vengono stampate com due  cifre
       esadecimali  precedute  dalla  lettera  A  o  X,  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 corrente.

       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 "UDP"), indirizzo e numero di porta del
       mittente, indirizzo e numero  di  porta  del  destinatario,  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

VEDERE ANCHE

       setsockopt(2), socket(2), ipfwadm(8)

                                17 giugno 1996                         IPFW(4)