Avanti Indietro Indice

21. ICMP

21.1 Descrizione

ICMP (Internet Control Message Protocol) è un protocollo designato per effettuare test, controlli e gestire situazioni di errore.

Per essere indirizzati nella rete anch'essi si appoggiano al protocollo IP, che contiene le informazioni di instradamento (indirizzo sorgente, destinazione).

                   +-------+--------+
                   |  IP   |  ICMP  |
                   +-------+--------+

Un programma molto noto che utilizza questo protocollo è ping, il cui scopo principale è di verificare se una macchina nella rete è raggiungibile e in funzione oppure no. Per verificare se la macchina con indirizzo IP 192.168.0.1 è presente nella rete è sufficiente quindi impartire il comando:

ping 192.168.0.1

Ping non fa altro che inviare un pacchetto ICMP di tipo 0 (echo request) alla macchina destinataria e attendere che questa risponda con un pacchetto ICMP di tipo 8 (echo reply).

21.2 Tipi ICMP

Ecco un elenco dei pacchetti ICMP più importanti:

ICMP tipo 0 - Echo reply (pong)

Come visto è il pacchetto inviato dalle macchine in risposta ad un pacchetto ICMP tipo 8 echo request (ping). In genere non sono filtrati.

ICMP tipo 3 - Destination Unreachable

Questo tipo di pacchetti segnalano all'host che ha spedito un pacchetto che non è stato possibile consegnarlo all'host destinatario in quanto non raggiungibile (unreachable) o perchè il servizio (porta) richiesto non era disponibile (Port Unreachable). Il codice associato può essere uno dei seguenti:

Quando in una regola si utilizza l'obiettivo REJECT (-j REJECT) il firewall per ogni pacchetto che soddisfa quella regola provvederà a spedire all'host che l'ha inviato un pacchetto ICMP di tipo 3. Per default il codice associato è 3 (Port Unreachable) ma può essere cambiato.

Può essere utilizzato per attachi DoS, comunque è sconsigliato filtrare questi pacchetti, in quanto si potrebbero ottenere malfunzionamenti e ritardi nelle risposte. In particolare 'Fragmentation Needed but DF set' è molto importante in quanto utilizzato per stabilire la dimensione massima che può avere un pacchetto senza dover essere frammentato. Scartare questi pacchetti potrebbe causare malfunzionamenti e un calo di prestazione.

ICMP tipo 4 - Source Quench

Congestione nella rete. Gli host in genere reagiscono a questo tipo di pacchetti ICMP "rallentando" la comunicazione, potrebbero quindi essere usati per un attacco DoS. Pare che siano utilizzati da alcuni server SMTP. In genere comunque non sono filtrati.

ICMP tipo 5 - Redirect

Questi pacchetti devono essere filtrati, in quanto sono utilizzati per modificare la tabella di routing, ciò può consentire a qualcuno di redirigere il traffico della propria rete. Possono essere utilizzati anche per attacchi DoS.

ICMP tipo 8 - Echo Request (ping)

Questo pacchetto ICMP è utilizzato per verificare se una macchina è presente nella rete o per effettuare dei test. In molti casi si preferisce filtrare e limitare i ping provenienti dall'esterno. Con iptables è possibile comunque accettarli e utilizzare '-m limit' per evitare attacchi DoS.

ICMP tipo 11 - Time Exceeded in Transit

Nell'intestazione IP è presente un campo TTL (Time To Live) utilizzato come un vero e proprio contatore. Questo contatore misura il "tempo da vivere" che ha un pacchetto ed è decrementato in pratica ad ogni salto da un router all'altro. Lo scopo è quello di impedire che un pacchetto possa viaggiare nella rete per un tempo indeterminato. Se un router riceve un pacchetto con il campo TTL uguale a 0 provvederà a scartarlo e ad inviare un pacchetto ICMP TTL Exceeded (codice 0) alla macchina che lo ha inviato. Altro caso si ha quando un host non è in grado di assemblare i frammenti di un pacchetto entro il TTL, anche in questo caso il pacchetto è scartato e un ICMP Fragment reassembly timeout (codice 1) è inviato alla macchina mittente. Un programma noto che utilizza questi pacchetti è 'traceroute'. In genere non è filtrato. Il codice associato può essere quindi uno dei seguenti:

ICMP tipo 12 - Parameter Problem

Se un router o un host dovessero ricevere un pacchetto con qualche problema riguardante i parametri delle intestazioni, ad esempio argomenti non corretti presenti nelle opzioni, potrebbero decidere di scartarlo e di inviare un pacchetto ICMP Parameter Problem all'host che lo ha inviato. In alcuni casi può essere indicatore di un attacco. In genere non è filtrato.

Se si utilizza il connection tracking e il modulo 'state' non è necessario preoccuparsi di questi pacchetti. In caso contrario è necessario filtrarli, a questo scopo è possibile creare una catena apposita che accetti solo i tipi che non rappresentano un pericolo o che sono indispensabili:

iptables -N icmp-accept
iptables -A icmp-accept -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A icmp-accept -p icmp --icmp-type source-quence           -j ACCEPT
iptables -A icmp-accept -p icmp --icmp-type time-exceeded           -j ACCEPT
iptables -A icmp-accept -p icmp --icmp-type parameter-problem       -j ACCEPT

NOTA: deve precede le regole che utilizzano -j DROP/REJECT e anche -j LOG se presente

es.:   ...
       iptables -A INPUT -j icmp-accept
       iptables -A INPUT -j LOG --log-level info 
       iptables -A INPUT -j DROP

Per quanto riguarda ping (echo-request) e pong (echo-reply) si preferisce specificarli separatamente in base alla catena e alle proprie scelte.


Avanti Indietro Indice