0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ----------------------------------------------------------------- |Version| IHL |Type of Service| Total Length | ----------------------------------------------------------------- | Identification |Flags| Fragment Offset | ----------------------------------------------------------------- | Time to Live | Protocol | Header Checksum | ----------------------------------------------------------------- | Source Address | ----------------------------------------------------------------- | Destination Address | ----------------------------------------------------------------- | Options | Padding | -----------------------------------------------------------------
Versione del protocollo utilizzata. Attualmente è utilizzato l'IPv4 è comunque già disponibile anche la versione più recente dell'internet protocol (IPv6).
Lunghezza dell'intestazione espressa in parole di 32 bit.
Consente di specificare il tipo di servizio desiderato (ritardo minimo, massimo throughput, massima affidabilità, costo minimo). In particolare contiene 3 bit per indicare la precedenza (Precedence), 3 flag (D, T ed R), e 2 bit inutilizzati.
Lunghezza totale del pacchetto (intestazioni e dati). La lunghezza massima prevista è di 65535 byte.
Questo campo permette di stabilire a quale pacchetto appartiene il frammento arrivato. In caso di frammentazione solo il primo frammento ha sia l'intestazione IP sia l'intestazione UDP o TCP, il secondo e i successivi hanno solo l'intestazione IP.
Il campo flags è composto da 3 bit, il primo è inutilizzato, il secondo detto DF (Don't Fragment) se impostato serve a segnalare di non frammentare i pacchetti. Il terzo bit MF (More Fragments) serve ad indicare che il "pacchetto" è in realtà un frammento, a parte l'ultimo tutti i frammenti hanno questo bit impostato.
Serve per specificare in quale posizione del pacchetto corrente si trova questo frammento.
Questo campo è impostato con un valore che stabilisce quanto può vivere un pacchetto. In genere ad ogni salto da un host all'altro è decrementato. Quando un host riceve un pacchetto con campo TTL pari a zero provvede ad eliminarlo. Questa operazione è necessaria per impedire che i pacchetti continuino a viaggiare nella rete a tempo indeterminato.
Un pacchetto IP incapsula in genere un pacchetto TCP o ICMP o UDP. Questo campo è utilizzato per specificare il tipo di pacchetto.
Questo campo è utilizzato per controllare se il pacchetto è corretto o se è stato danneggiato durante il passaggio da un host all'altro.
Indirizzo IP sorgente dell'host che ha inviato il pacchetto
Indirizzo IP destinazione ossia indirizzo IP dell'host a cui è destinato il pacchetto.
Questo campo è stato aggiunto per supportare le nuove caratteristiche, informazioni richieste da nuove versioni del protocollo.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ----------------------------------------------------------------- | Source Port | Destination Port | ----------------------------------------------------------------- | Sequence Number | ----------------------------------------------------------------- | Acknowledgment Number | ----------------------------------------------------------------- | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | ----------------------------------------------------------------- | Checksum | Urgent Pointer | -----------------------------------------------------------------
Il campo Source Port (porta sorgente) è indispensabile per specificare a quale porta devono essere indirizzati i pacchetti tcp di risposta.
Destination Port (porta destinazione) serve per specificare a quale porta (telnet, www, ...) è destinato il pacchetto tcp.
Numeri di sequenza utilizzati per riordinare i pacchetti ed effettuare controlli.
Questo campo è utilizzato per specificare la lunghezza in parole di 32 bit dell'intestazione TCP.
Campo riservato per uso futuro.
Flag (1 bit ciascuno) con ciascuno con diversa funzione. URG è impostato per segnalare dati urgenti. ACK è utilizzato per indicare che il pacchetto è di conferma. PSH (PUSH) da impostare se si desidera che il pacchetto giunga a destinazione e direttamente all'applicazione senza essere memorizzato temporaneamente in un buffer. RST (RESET) è impostato quando si desidera reinializzare una connessione a causa di problemi. SYN è utilizzato per indicare che il pacchetto è di richiesta connessione. La "three way handshake" utilizzata per stabilire una connessione richiede l'invio di pacchetti SYN e ACK. FIN quando si desidera chiudere una connessione stabilita è richiesto l'invio di un pacchetto con il flag FIN impostato.
Questo campo è utilizzato per specificare quanti byte possono essere spediti a partire dal byte confermato.
Come nel caso dell'intestazione IP, anche TCP prevede un campo dedicato alla verifica della correttezza dell'intestazione.
E' utilizzato per specificare lo scostamento in byte a partire dal numero di sequenza attuale dove possono essere trovati i dati urgenti.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ----------------------------------------------------------------- | Source Port | Destination Port | ----------------------------------------------------------------- | Lenght | Checksum | -----------------------------------------------------------------
Porta sorgente.
Porta destinazione.
Dimensione del pacchetto (intestazione + dati).
Utilizzato per garantire l'affidabilità e la correttezza delle informazioni contenute.
Anche i pacchetti UDP sono incapsulati in pacchetti IP.
I pacchetti ICMP possono avere intestazioni con campi diversi, tutti comunque hanno i campi Type, Code e Checksum. Seguono le intestazioni dei pacchetti ICMP "destination unreachable" (tipo 3) e "echo-request/reply" (tipo 8 e 0):
Destination unreachable 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ----------------------------------------------------------------- | Type | Code | Checksum | ----------------------------------------------------------------- | Unused | ----------------------------------------------------------------- echo-request/echo-reply 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ----------------------------------------------------------------- | Type | Code | Checksum | ----------------------------------------------------------------- | Identifier | Sequence number | -----------------------------------------------------------------
Tipo di pacchetto icmp. I tipi disponibili sono: Echo Reply (0), Destination Unreachable (3), Source Quench (4), Redirect (5), Echo (8), Time Exceeded (11), Parameter Problem (12), Timestamp (13), Timestamp Reply (14), Information Request (15) e Information Reply (16).
Codice associato. Ad esempio al tipo "Destination Unreachable" può essere associato: net unreachable (code=0), host unreachable (1), protocol unreachable (2), port unreachable (3), fragmentation needed and DF set (4), source route failed (5).
Utilizzati per identificare i pacchetti icmp.
I seguenti servizi presentano dei problemi per quanto riguarda la sicurezza se si permette di accedervi dall'esterno.
Se non servono allora è il caso di filtrarli.
NOME SERVIZIO PORTA PROTOCOLLO ------------- ----- ---------- echo 7 TCP/UDP systat 11 TCP netstat 15 TCP bootp 67 UDP tftp 69 UDP link 87 TCP supdup 95 TCP sunrpc 111 TCP/UDP NeWS 144 TCP snmp 161 UDP xdmcp 177 UDP exec 512 TCP login 513 TCP shell 514 TCP printer 515 TCP biff 512 UDP who 513 UDP syslog 514 UDP uucp 540 TCP route 520 UDP openwin 2000 TCP NFS 2049 UDP/TCP X11 6000 6000+n TCP n = numero max. di server X.
Fonte: www.linux-firewall-tools.com/linux/papers/AUSCERT_checklist1.1