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
|
struct in_addr
fwp_via : è l'indirizzo dell'interfaccia
attraverso la quale il pacchetto viene ricevuto o trasmesso.
|