Strutture


La struttura ip_fw contiene i seguenti campi:

  • 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 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 la regola corrente. I bit per le differenti opzioni possono venire associati tramite un'operazione di OR. I flag includono le seguenti informazioni:
Protocollo (*) 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).
Comportamento

azione da svolgere 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 ridirige un pacchetto ad un socket locale dopo averlo accettato (il socket è specificato da un numero di porta). Questo bit è valido solo nelle regole della lista 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

Altre opzioni

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 descrizione di questi flag).

L'opzione IP_FW_F_PRN può essere usata per stampare tramite printk() alcune informazioni riguardo ai pacchetti selezionati. Questa opzione ha effetto solo se il kernel è stato compilato con l'opzione CONFIG_IP_FIREWALL_VERBOSE attiva

Il flag contrassegnato con l'asterisco è obbligatorio.

  • 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 al più un intervallo di porte. 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 sottoposto ad un'operazione XOR con fw_tosxor. Questi 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

struct tcphdr fwp_protoh.fwp_tcph
struct udphdr fwp_protoh.fwp_udph
struct icmphdr fwp_protoh.fwp_icmph

Questi ultimi 3 campi rappresentano gli header TCP, UDP, e ICMP, combinati i una unione chiamata fwp_protoh.

pacchetto ICMP : messaggio di errore
pacchetto ICMP : richiesta

 

Header TCP
Header UDP

struct in_addr fwp_via : è l'indirizzo dell'interfaccia attraverso la quale il pacchetto viene ricevuto o trasmesso.