Gestion des chaines dans NFtables

Chapitre Progression:

Bien ! Nous avons vu comment créer notre première table, qui va contenir des chaines. Nous avons donc une table IPv4 prête à l'emploi.

Nous allons maintenant passer à la création des chaines. Mais si rappelez-vous ! C'est ce qui permet de mettre en relation les règles que nous configurerons avec les Hooks NetFilter à différents endroits dans le chemin qu'empruntent les paquets lorsqu'ils traversent le système.

I.  Créer une chaine dans NFtables

Nous avons donc vu qu'il fallait créer une chaine INPUT pour traiter les paquets qui arrivaient sur l'interface et une chaine OUPUT pour traiter ceux qui sortaient de l'interface réseau. Pour rappel, nous ne travaillerons ici qu'en IPv4 sur notre table mon_filtreIPv4 :

nft add chain ip mon_filtreIPv4 input { type filter hook input priority 0 \; }
nft add chain ip mon_filtreIPv4 output { type filter hook output priority 0 \; }

Ici, quelques explications s'imposent, on a donc dans une première partie une syntaxe assez claire. On va utiliser "nft" pour ajouter ("add") une chaine dans la famille "ip" et dans la table "mon_filtreIPv4". Ce qui suit permet de former une base chain.

Chain ? base chain ? Quelle différence ?

Une base chain est une chaine qui va directement se rattacher à un hook alors qu'une "simple" chain n'est pas rattaché à un Hook. c'est pour cela que l'on précise ensuite "type filter hook input". Notre chaine INPUT va donc se rattacher au hook "INPUT". Il s'agit là juste d'une précision quant à la nomenclature à utiliser. Dans la réalité, on parle toujours de chaine.

Note : Dans la suite de ce tutoriel, je rappellerais souvent comment créer une chaine. Soyez attentifs car il ne sert à rien de recréer une chaine à chaque fois que je donne la commande. Il s'agira juste de rappels 😉

On retrouve également une notion de priorité. La priorité est ici importante, car elle permet de gérer les cas où plusieurs chaines sont positionnées sur le Hook INPUT par exemple. Nous avons en effet vu qu'une table pouvait avoir plusieurs chaines, et chaque chaine peut être positionnée sur un Hook souhaité, on peut très bien avoir une chaine "INPUT_1" et une chaine "INPUT_2" pour des besoins organisationnels. La priorité la plus basse prend ainsi le pas sur les autres priorités.

Note : il est possible d'avoir des priorités négatives (Exemple : -100) qui sont alors prioritaires sur une priorité 0.

II. Lister nos chaines dans NFtables

Une fois que nous avons nos chaines, nous pouvons facilement les lister pour voir où nous en sommes avec la ligne de commande suivante :

nft list table ip mon_filtreIPV4

Voici le résultat que l'on pourra voir :

nftables-lister-chaine
Lister les chaines d'une table NFtables

Une note intéressante, on pourrait également à avoir deux tables sur la famille IPv4 ("ip") qui se rapporte au même hook dans une table. On peut par exemple imaginer que cette seconde table possède également une chaine sur le hook "INPUT" qui ai une priorité moindre que la première :

nft add table ip filtre2
nft add chain ip mon_filtreIPv4 input { type filter hook input priority 10 \; }

Voilà ce que l'on pourra avoir si on liste nos tables et leur chaine :

nftables-lister-chaine-02
Lister les chaines d'une table NFtables

Ici, le chaine "INPUT" de la table "mon_filtreIPV4" sera prioritaire sur la chaine "INPUT" de la table "filtre2", car sa priorité est inférieure (numériquement)

III. Supprimer une chaine dans NFtables

Pour supprimer une chaine dans NFtables, on retrouve une syntaxe assez simple. Par exemple, pour supprimer la chaine nommée "INPUT" de la table IP "filtre2" :

nft delete chain ip filtre2 input

Note : Ne vous fiez pas forcément aux noms de chaines que j'ai donné ici, la chaine "INPUT" aurait très bien pu se nommer "ENTREE" et la chaine "OUTPUT" se nommer "SORTIE". L'important étant qu'elles se réfèrent aux bons Hooks 😉

Nous avons vu comment ajouter, lister et supprimer des chaines dans les tables NFtables, passons maintenant à la gestion des règles dans NFtables, pour cela, rendez vous au prochain chapitre !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

    Mickael Dorigny

    Co-fondateur d'IT-Connect.fr. Auditeur en sécurité des systèmes d'information chez Amossys

      mickael has 502 posts and counting.See all posts by mickael