Sonde NetFlow basée sur NetFPGA
Afin de nous familiariser avec le développement d'applications de surveillance réseau basées sur NetFPGA, il est important d'analyser les projets de ce domaine. Ainsi le projet NetFlow probe est basé sur NetFPGA et possède un fonctionnement proche de celui que nous voudrions réaliser.
Qu'est-ce que NetFlow ?
Avec un volume sans cesse croissant de données qui sont transférées sur Internet, la nécessité d'une surveillance fiable devient plus urgente. Les dispositifs de surveillance devraient être en mesure de fournir des informations actualisées, telles que les modes de circulation, statistiques, et anomalies diverses.
NetFlow est un protocole réseau développé par Cisco Systems pour ses équipement pourvus d'un Cisco IOS afin de collecter les informations trafic IP. C'est un protocole propriétaire mais supporté par d'autres plateformes qu'IOS telles que Linux, FreeBSD ou OpenBSD. Les routeurs Cisco implémentant NetFlow génèrent des enregistrements netflow; ceux-ci sont ensuite exportés depuis le routeur dans des paquets UDP ou SCTP et collectés par un collecteur netflow.
Un flux réseau, tel que le défini Cisco, est une clef 7-tuple, où le flux est représenté par un suite de paquets unidirectionels partageant tous les sept valeurs suivantes:
- Adresse IP source
- Adresse IP de destination
- Port source pour l'UDP et TCP, 0 pour les autres protocoles
- Port de destination pour les ports UDP et TCP, type et code pour l'ICMP ou 0 pour les autres protocoles
- Protocole IP
- Interface entrante
- Valeur du ToS (Type of Service)
Le routeur envoie l'enregistrement du flux quand il estime que le flux est terminé. Ceci est détectable si aucun nouveau trafic n'est aperçu pour le flux existant ou si un paquet TCP de terminaison est envoyé.
Un enregistrement NetFlow contient de nombreuses informations à propos du flux concerné. Ainsi dans la version 5 du protocole (la plus utilisée), un enregistrement contient :
- Numéro de version
- Numéro de séquence
- Interface d'entrée et de sortie
- Le temps en millisecondes depuis le dernier démarrage de début et de fin du flux (timestamp)
- Nombre d'octets et de paquets observés dans le flux
- Les en-têtes niveau 3:
- IP source et destination
- Port source et destination
- Numéro de protocole IP
- Valeur du ToS (Type of Service)
- Dans le cas d'un flux TCP, l'union de tous les drapeaux TCP observés durant la vie du flux
- Les informations de routage niveau 3:
- Adresse IP du "next hop" immédiat dans la route vers la destination.
- Masques IP source et destination (les longueurs de préfixe dans la notation CIDR).
Ce projet décrit l'impémentation d'un système de surveillance de flux réseau utilisant une plateforme matérielle dédiée (le NetFPGA) coopérant avec le PC hôte. Les fonctions critiques sont ainsi implémentées directement dans le matériel et le reste en logiciel. De cette façon on obtient une sonde NetFlow performante à faible coût.
Architecture du système
La sonde NetFlow est contituée d'un ordinateur hôte et d'une carte NetFPGA. La mesure des flux est entièrement implémentée dans le NetFPGA tandis que le contrôle, la configuration et la collection sont implémentés dans un logiciel tournant sur l'ordinateur hôte. Les principaux paramètres de la sonde sont les suivants :
- Mesure en temps réel des flux des quatre interfaces réseau Gigabit
- Mémoire permettant d'accueillir 60000 flux différents
- Indexation des enregistrements de flux à l'aide d'un hash et de 8 recherches parallèles
- Export des enregistrements au format NetFlow v5
Firmware
Le firmware de la sonde NetFPGA est composée de différentes unités chaînées. Chaque unité du pipeline possède une tâche spécifique qui consiste la plupart du temps à traiter les données arrivantes et ajouter le résultat dans les données sortantes. L'interconnexion des unités est réalisée grâce au protocole d'interconnexion du NetFPGA, c'est à dire grâce au bus de données, au bus de contrôle et aux signaux.
Parseur d'en-tête L3L4
Le parseur extrait les en-têtes du paquet ayant une utilité pour la surveillance. Ceci formera un Packet Record (qui sera désigné PR par la suite). Le reste du paquet est ignoré. L'entrée et la sortie de l'unité de parsage sont affichées sur la figure ci-dessous. Le parseur identifie le type de paquet encapsulé dans la frame et extrait les informations afin de créer un packet Record. Les paquets supportés sont
- TCP/IPv4
- UDP/IPv4
- ICMP
Les autres types de paquets sont ignorés et considérés comme inutiles. Cette unité de parsage est consitutée de deux processus indépendants: l'un parse les en-têtes du paquet, l'autre génère le flux de sortie.
L'unité de Timestamp
Cette unité insère la valeur courante du timestamp (obtenu à partir d'un compteur dédié) dans le PR. Le timestamp représente le temps en millisecondes depuis lequel la sonde a commencé à fonctionner. Le compteur timestamp est 32 bits et déborde après 49 jours et 17 heures. La vitesse du compteur est ajustée par incrémentation. La valeur d'incrémentation correspond au nombre de cycles d'horloge en une milliseconde, c'est à dire la durée d'une milliseconde. Cette valeur peut être changée logiciellement afin d'accélérer ou de ralentir le compteur permettant ainsi de synchroniser le temps du firmware avec le temps de l'ordinateur hôte.
L'unité de hash
L'unité de hash génère des valeurs de hash 64bits (CRC-64) et l'insère dans le PR. Le hash est seulement calculé à partir des champs suivants :
- IP source
- IP destination
- Port source
- Port destination
- Interface d'arrivée du paquet
- Protocole
L'unité FlowLookUp
Cette unité divise le hash en deux parties. La première partie est utilisée pour adresser une ligne contenant 8 valeurs de hash de 8 enregistrements de flux différents (8 empreintes). Ces empreintes sont comparées à la seconde partie du hash. S'il y a une correspondance avec l'une des valeurs de hash dans la ligne alors l'enregistrement de flux est déjà dans la mémoire de flux. On peut obtenir son adresse en joignant la première partie du hash et le rang de l'empreinte qui lui correspond. S'il n'y a pas de correspondance et que le nombre d'enregistrements de flux est inférieur à 8 alors l'espace disponible est utilisé pour ajouter la nouvelle empreinte. S'il n'y a ni correspondance ni espace libre alors un enregistrement de flux, arbitrairement choisi, est défini comme expiré et est remplacé par le nouveau.
Quand un enregistrement de flux est sur le point d'être expiré, l'unité FlowLookUp reçoit une commande de la part de l'unité FlowProc pour qu'il supprime l'empreinte associée de la table de hash. Immédiatement après cette commande, il est envoyé à l'unité FlowProc.
L'unité de traitement de flux
L'unité de traitement de flux contrôle la création de nouveaux flux, la mise à jour des flux existants et l'expiration des flux inactifs. Le processus d'expiration tourne en parallèle des processus création/mise à jour. L'exclusion mutuelle n'est pas nécessaire car elle est implicitement assurée par le protocole suivant:
- Quand le processus d'expiration identifie un flux inactif alors il envoie une commande de suppression à l'unité FlowLookUp.
- L'unité FLowLookUp supprime l'index de l'enregistrement du flux et renvoie en retour la commande de suppression à l'unité de traitement de flux.
- L'unité de traitement de flux rapatrie et efface l'enregistrement de flux correspondant et l'envoie à sa sortie.
L'unité Record Wrapper
Les enregistrements de flux libérés sont temporairement stockés dans un module Record Wrapper. Dès que les conditions suivantes sont remplies les enregistrements stockés sont reformatés au format NetFlow v5 et envoyés à la file d'attente de sortie du NetFPGA :
- 15 enregistrements sont présents dans le tampon.
- Le premier enregistrement du tampon est plus vieux que 20 ms.
Le datagramme NetFlow v5 est envoyé à l'interface de sortie spécifiée dans un registre logiciel. Il pourrait y avoir plus qu'une interface de sortie.
L'application logicielle
L'application logicielle de la sonde NetFlow consiste en des interfaces de configuration et de statistiques ainsi qu"un simple collecteur (NetFlow).
Conclusion
L'étude de la sonde NetFPGA NetFlow nous montre le potentiel des cartes réseau FPGA pour collecter des informations sur les flux réseau. Elle nous éclaire aussi sur la façon de diviser les tâches et de programmer pour un NetFPGA. Cette implémentation va donc pouvoir nous servir de brique de base, de modèle aussi bien au niveau du découpage des tâches que des fonctions qui sont implémentées.
[NET08b] CESNET: NetFlowProbe [en ligne]. Disponible sur < http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/NetFlowProbe> (visité le 1er Décembre 2009)
Attachments
-
firmware_pipeline.png
(10.4 KB) -
added by bfontain 2 years ago.
Pipeline du firmware
-
l3l4parser.png
(13.7 KB) -
added by bfontain 2 years ago.
Extraction des informations L3 et L4 des paquets
-
timestamp_unit.png
(13.3 KB) -
added by bfontain 2 years ago.
Unité de timestamp
-
hash.png
(11.8 KB) -
added by bfontain 2 years ago.
Unité de hash
-
flowlookup.png
(19.7 KB) -
added by bfontain 2 years ago.
Unité FlowLookUp?
-
flowproc.png
(15.5 KB) -
added by bfontain 2 years ago.
unité de traitement des flux
-
software.png
(13.0 KB) -
added by bfontain 2 years ago.
Application logicielle







