next up previous contents
Next: Recherche des ports Up: Noyau Previous: Une fois le principe   Contents

Filtrage des paquets

Avant tout, nous avons dû apprendre ce qu'est exactement un entête d'un paquet. Celui-ci dispose de nombreuses informations qui sont rangées dans un ordre bien précis. Chaque protocole dispose d'un type d'entête.
Ici, nous allons nous occuper des entêtes des sept protocoles suivants: Ethernet, IP, TCP, UDP, ICMP, ARP, IPX. Dès qu'un paquet arrive de l'internet, nous lisons, tout d'abord, l'entête Ethernet. Celui-ci nous indique le type de protocole encapsulé dans Ethernet, notamment ARP ou IP. Aussi, IP une fois extrait, nous pouvons y trouver encapsuler l'entête TCP, UDP, ou ICMP selon le protocole indiqué dans l'entête IP. En effet, notre Firewall devra agir sur ces deux étapes. C'est à ce point précis que nous pourrons filtrer les paquets.
C'est-à-dire que nous allons vérifier si le paquet est bien conforme aux normes (par exemple, le TCP est défini dans la RFC 793). Étant valide, le paquet passera donc à travers le Firewall. Sinon, le Firewall renverra une liste exhaustive de toutes les malformations du paquet. Dans ce cas, le paquet sera donc refusé, puis rejeté.
Connaissant la composition d'un datagramme IP, nous avons classé toutes les informations dans nos structures. De là, nous avons créé un sélecteur qui va déterminer le protocole utilisé et aiguillera vers une analyse TCP, UDP, ou ICMP. Cette analyse sera la même que celle de l'entête IP, c'est-à-dire de mettre chaque information dans une structure appropriée. Une fois toutes ces informations recueillies, nous allons pouvoir passer au filtrage des paquets. Au niveau de l'entête IP, nous allons vérifier les conditions suivantes :


 
Structure d'un datagramme IP
Maintenant, au niveau de l'entête TCP, nous allons vérifier la condition suivante : la position des drapeaux : certaines combinaisons de positions de drapeaux sont autorisées (exemple : SYN + ACK). En effet, dans l'entête TCP il existe 6 champs bits de code qui permettent de spécifier le rôle et le contenu du segment TCP pour pouvoir interpréter correctement certains champs de l'entête. La signification de chaque bit quand il est fixé à 1 est disposé dans l'ordre suivant :
Exemple : 010010 : seule SYN et ACK sont actifs.
port source port destination
numéro de séquence
numéro d'accusé de réception
longueur d'en-tête réservé URG ACK PSH RST SYN FIN
taille de la fenêtre
checksum pointeur d'urgence
Format du segment TCP
Seule les ports sont vérifiés dans l'entête UDP.
port UDP source port UDP destination
longueur checksum
Structure d'un datagramme UDP
Pour l'entête ICMP, on vérifie:
type code checksum
commentaires
Structure d'un datagramme ICMP
Toutes ces conditions vont permettre d'autoriser le passage d'un paquet. Si le paquet ne vérifie pas toutes ces conditions, le paquet sera rejeté et nous retournerons toutes les informations que nous avons recueillis des entêtes, dans une fenêtre. Il s'agit d'un journal d'erreurs affiché dans un arbre (TreeView).
Le filtre est une fonction qui renverra l'action à effectuer pour indiquer si le paquet doit être rejeté ou si il doit passer à travers le Firewall ou même s'arrêter là. Le filtre prend comme argument un pointeur sur une zone mémoire contenant le paquet à l'état brut.
Auparavant, nous avions fait une fonction qui testera si le port utilisé par un paquet est autorisé ou non. Elle prendra comme paramètres le port du paquet et la liste des ports (autorisés ou non selon le mode sélectionné, la liste étant choisie dans la configuration) qui seront alors comparés et elle renverra ainsi un booléen.
Aussi, nous avions conçu une fonction qui indiquera à l'aide d'un booléen si la combinaison des drapeaux de l'entête TCP est correcte. Pour cela, nous avons étudié toutes les combinaisons possibles. Cette fonction utilise exclusivement le masquage de bits, ce qui lui permet une grande efficacité.
Le filtre vérifiera toutes les données d'un entête de paquet susceptibles d'être erronées ou interdites. Si les données de l'entête ne vérifient aucune des conditions imposées par le filtre, la où les erreurs trouvées seront référencées dans un tableau avec lequel la fonction filtre pourra renvoyer un booléen pour dire si le paquet passe ou non.


Subsections
next up previous contents
Next: Recherche des ports Up: Noyau Previous: Une fois le principe   Contents
root 2002-06-23