Les paquets ICMP
sont loin
d'être un flux véritable, car ils sont seulement utilisés pour le
contrôle et n'établissent jamais aucun type de connexion. Il existe
quatre types ICMP
qui généreront
cependant des paquets en retour, et qui possèdent deux états
différents. Ces messages ICMP
peuvent prendre les états NEW et ESTABLISHED. Les types
ICMP
dont nous parlons sont les
requêtes et réponse Echo
, les
requêtes et réponses Timestamp
, les
requêtes et réponses Information
,
et enfin les requêtes et réponses de Masque d'Adresse. En dehors de
ça, les requêtes d'horodatage et d'information sont obsolètes et
seront probablement supprimées. Cependant, les messages Echo sont
utilisés dans plusieurs cas comme le ping sur des hôtes. Les
requêtes de masque d'adresse ne sont pas utilisées souvent, mais
peuvent être utiles quelques fois. Pour en avoir une idée, voyons
l'image suivante.
Comme vous pouvez le voir dans l'image ci-dessus, l'hôte envoie
une requête écho vers la cible, laquelle est considérée comme
NEW par le pare-feu.
La cible répond alors avec un écho que le pare-feu considère dans
l'état ESTABLISHED.
Quand la première requête écho a été vue, les entrées état
suivantes se dirigent vers le ip_conntrack
.
icmp 1 25 src=192.168.1.6 dst=192.168.1.10 type=8 code=0 \ xml:id=33029 [UNREPLIED] src=192.168.1.10 dst=192.168.1.6 \ type=0 code=0 xml:id=33029 use=1
Ces entrées semblent un peu différentes des états standards pour
TCP et UDP. Le protocole est présent, et la temporisation, de même
que les adresses source et destination. Le problème survient après.
Nous avons maintenant trois nouveaux champs appelés type
, code
et id
. Il n'y a rien de spécial, le champ
type
contient le type ICMP et
le champ code
contient le code
ICMP
. Toutes les variables sont
présentées dans l'annexe Annexe C, Types
ICMP. Le dernier champ id
, contient l'ID ICMP. Chaque paquet ICMP
obtient une ID quand il est envoyé, et lorsque le destinataire
reçoit le message ICMP, il place la même ID dans le nouveau message
ICMP, que l'expéditeur reconnaîtra dans la réponse et il pourra
alors se connecter avec la requête ICMP correcte.
Dans le champ suivant, nous avons reconnu le fanion [UNREPLIED]
. Ce fanion nous indique que
nous observons une entrée de traçage de connexion, dont le trafic
est dans une direction. Enfin, nous voyons la probabilité de
réponse à un paquet ICMP, qui est l'inversion des adresses IP
source et destination. Comme pour le type et le code, ils ont été
modifiés en valeurs correctes pour le paquet de retour, ainsi une
requête écho est changée en réponse écho et ainsi de suite. L'ID
ICMP est préservée depuis le paquet requête.
Le paquet réponse est considéré comme ESTABLISHED, ainsi que nous l'avons déjà expliqué. Cependant, nous pouvons savoir avec certitude qu'après la réponse ICMP, il n'y aura plus de trafic régulier dans la même connexion. Pour cette raison, l'entrée de traçage de connexion est détruite une fois que la réponse ait traversé la structure de Netfilter.
Dans chacun des cas ci-dessus, la requête est considérée comme NEW, tandis que la réponse est considérée comme ESTABLISHED. Voyons cela de plus près. Quand le pare-feu voit un paquet requête, il le considère comme NEW. Quand l'hôte envoie un paquet en réponse à la requête il est considéré comme ESTABLISHED.
Note | |
---|---|
Notez que cela indique que le paquet réponse doit apparier le critère donné par l'entrée de traçage de connexion pour être considéré comme établi, de la même façon que tous les autres types de trafic. |
Les requêtes ICMP ont un délai par défaut de 30 secondes, que
vous pouvez modifier dans l'entrée /proc/sys/net/ipv4/netfilter/ip_ct_icmp_timeout
.
C'est, en général, une bonne valeur de temps d'attente, car elle
permet de capturer la plupart des paquets en transit.
Une autre partie très importante de ICMP est le fait qu'il est
utilisé pour indiquer aux hôtes les événements au niveau des
connexions spécifiques UDP et TCP ou des tentatives de connexion.
Pour cette raison, les réponses ICMP seront très souvent reconnues
comme RELATED. Un
exemple simple est le ICMP Host
unreachable
ou ICMP Network
unreachable
. Ceci est toujours généré en retour vers notre
hôte s'il tente une connexion vers quelque autre hôte, mais que le
réseau ou l'hôte en question ne soit pas connecté, ainsi le dernier
routeur essayant de joindre le site répondra par un message ICMP
nous l'indiquant. Dans ce cas, la réponse ICMP est considérée comme
un paquet RELATED.
L'image suivante explique ceci.
Dans l'exemple ci-dessus, nous envoyons un paquet SYN vers une adresse spécifique. Ceci est considéré comme une connexion NEW par le pare-feu. Cependant, le réseau que le paquet essaie de joindre est injoignable, donc un routeur va nous renvoyer une erreur ICMP indiquant que le réseau est injoignable. Le code de traçage de connexion peut reconnaître ce paquet comme RELATED, ainsi la réponse ICMP est correctement envoyée au client. En attendant, le pare-feu a détruit l'entrée de traçage de connexion depuis qu'il a eu connaissance du message d'erreur.
Le même comportement que ci-dessus est observé pour les connexions UDP avec les problèmes identiques que précédemment. Tous les messages ICMP envoyés en réponse aux connexions UDP sont considérés comme RELATED. Voyons l'image suivante.
Un paquet UDP est envoyé à un hôte. Cette connexion UDP est considérée comme NEW. Cependant, le réseau est interdit d'accès administrativement par un pare-feu quelconque ou un routeur. Donc, notre pare-feu reçoit un "ICMP Network Prohibited" en retour. Le pare-feu sait que ce message d'erreur ICMP est en relation avec la connexion UDP déjà ouverte et envoie un paquet RELATED au client. À ce niveau, le pare-feu supprime les entrées de traçage de connexion, et le client reçoit le message ICMP.