Gestion des tables dans NFtables

Chapitre Progression:

Toute la configuration de Netfiter par NFtables passera maintenant par une seule commande : nft

On pourra donc remplacer les commandes iptables, ip6tables, arptables, etc. par nft. Nous allons maintenant débuter l'utilisation de NFtables, pour que cela soit parlant dans un contexte réel, fixons nous un objectif :

Nous disposons d'un serveur web (HTTP et HTTPS) sur lequel nous intervenons de temps à autre via SSH. Nous ne souhaitons pas que notre serveur communique avec des IP en 192.168.10.0/24, le tout uniquement en IPv4. Cela nous permet de nous fixer quelques règles :

  • Ports 80 et 443 ouverts en entrée (INPUT) et sortie (OUTPUT)
  • Port 22 ouvert en entrée (INPUT) et sortie (OUTPUT)
  • Interdiction des paquets venant de 192.168.10.0/24
  • Refus du reste du trafic

Note : Dans la réalité, nous aurions d'autres ports à ouvrir en entrée comme en sortie (Mail, NTP, etc.), mais nous restons ici dans un contexte d'apprentissage. Nous verrons des contextes réels un peu plus tard.

I. Créer une table dans NFtables

On commence par créer notre table, qui va contenir nos chaines, faisons simple et attaquons-nous à l'IPv4, vous pourrez donner le nom qui vous convient à votre table, je la nommerais pour ma part "mon_filtreIPv4", pour que cela soit parlant dans le cours 🙂 :

nft add table ip mon_filtreIPv4

On retrouvera donc la commande "nft" suivi de "add table" qui décrit l'action que nous voulons faire. On précise ensuite la famille de notre table, ici "ip" qui signifie "ipv4" puis son nom. Comme exemple, on pourra également créer une table IPv6, même si nous ne l'utiliserons pas

nft add table ip6 mon_filtreIPv6

Ici, la seule différence est simplement la famille de la table qui n'est plus "ip", mais "ip6". Bien ! Nous avons une table, notre "conteneur" est prêt à recevoir des chaines.

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

II. Lister nos tables NFtables

On va ensuite directement pouvoir lister nos tables avec la commande suivante :

nft list tables

On voit par défaut que seule la table IPv4 est affichée, cela correspond à la commande suivante :

nft list tables ip

Pour afficher notre table IPv6, nous devons le spécifier également :

nft list tables ip6

Voici ce que l'on pourra avoir en affichage lors de ces différentes commandes :

creer-table-nftables
Création de tables dans NFtables avec la commande nft

Nous pourrons naturellement faire la même chose avec les autres familles de table précédemment.

Note : attention à différencier "tables" avec un "s" et "table" sans "s" qui sont à utiliser dans des contextes différents. "tables" avec un "s" permet de cibler, toutes les tables. Pour "table" nous allons voir son utilité par la suite.

III. Supprimer une table dans NFtables

Si l'envie nous vient, il est également tout à fait possible de supprimer une table. Supposons que l'on veuille supprimer notre table IPv6, on utilisera pour cela la ligne de commande suivante :

nft delete table ip6 mon_filtreIPv6

Cependant, si la table n'est pas vide, c’est-à-dire s'il y a des chaines et des tables de configurées à l'intérieur, vous aurez le message d'erreur suivant :

<cmdline>:1:1-31 : Error: Could not process rule: Device or resource busy

On va donc devoir vider nos chaines en supprimant toutes les règles qui s'y trouvent :

nft flush table ip6 mon_filtreIPv6

Puis on va pouvoir supprimer notre table proprement :

nft delete table ip6 mon_filtreIPv6

Et voilà, notre table est correctement supprimée, vous pourrez le vérifier via la commande qui nous permet de lister les tables précédemment.

Attention : Pensez bien, dans le cas où vous utiliseriez ces commandes une table IPv6 à mettre "IP" à la place "IP6" dans les commandes 😉

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