Outils pour utilisateurs

Outils du site


netadmin:nftables:000_start

Ceci est une ancienne révision du document !


:TODO_DOCUPDATE:

nftables

nftables est le successeur d'iptables. Il est intégré aux noyaux >= 3.13 depuis 2014. Les distributions récentes fournissent par défaut nftables et sauf spécificité il est recommandé de migrer vers nftable.

Principales différences:

  • iptables certaines tables sont présentes par défaut, ce n'est pas le cas pour nftables;
  • iptables ne permet de définir qu'une cible par règle. Avec nftables plusieurs actions peuvent être associées à une règle;
  • nftables inclus la gestion des ensembles (sets).
  • le framework iptables proposait des outils dédiés par familles de protocoles (iptables,ip6tables, arptables,ebtables). ntables permet de gérer les différentes famille au sein d'un même CLI.

Généralités à propos de la syntaxe

nft est la CLI permettant de définir les règles. Elle interprète les caractères spéciaux tels que l'accolade ou le point virgule également utilisés par le shell. Si nft est appelé depuis le bash il faudra donc échapper les caractères spéciaux.

On peut également invoquer nft en mode interactif via l'option -i. En fonctionnant dans ce mode il devient inutile d'échapper les caractère spéciaux.

nft --handle --interactive
 
# équivalents
nft -a -i
 
nft -ai

Dans l'exemple ci-dessus on introduit également l'option --handle ou -a. Un handle (contrôleur) est un identifiant numérique associé à chaque élément de configuration. il peut être affiché grâce à cette option puis réutilisés par différentes commandes pour désigné de facon sure et concise l'élément a manipuler.

# nft depuis le bash :  les caractères spéciaux doivent être échappés
nft 'add chain ip my_iptable input_chain { type filter hook input priority 0 ; policy drop ; comment "text comment" ;}'

Les modifications apportées depuis nft s'appliquent immédiatement mais ne seront pas sauvegardées après redémarrage. Comme beaucoup d'autre outils réseau il fonctionne en système transitoire (ou transiant).

Le ruleset

Le ruleset désigne l'ensemble des éléments existants

Les tables

Les tables sont des conteneurs. On y trouve les chaînes, les ensembles et les objets à état (compteurs). L'état désactivé (flag 'dormant') peut être positionné sur une table: dans ce cas les chaînes de base sont déchargées et ne sont plus évaluées.

Pour lister les tables existantes:

# nft list tables
 
# On peut choisir de lister les tables d'une famille en particulier
nft list tables bridge
nft list tables inet
nft list tables ip

Pour lister le contenu d'une table

nft list table aTableName
 
# La famille peut être précisée en préfixe
nft list ip aTableName
nft list ip6 aTableName
nft list inet aTableName
nft list arp aTableName
nft list bridge aTableName
nft list netdev aTableName

Activer/Désactiver la table

On positionne le drapeau dormant pour désactiver la table via la commande add:

add table aTableName { flags dormant; }
 
# La famille peut être précisée
add table ip6 aTableName { flags dormant; }

Les chaînes

Les chaînes contiennent les séquences de règles. On distingue les chaînes de base et les chaines normales (regular):

  • Un chaîne de base est un point d'entrée pour les paquets en provenance de la pile réseau. L'association au point d'entrée se fait via un système de hook);
  • Une chaîne normale peut être utilisée comme cible par un saut (jump) elle permet notamment de regrouper et d'organiser un sous ensemble de règles.

Création/modification d'une chaîne

La chaîne est contenue dans une table. Lors de la création d'une chaîne de base les attributs type, hook et priority sont obligatoirement définis:

# Création d'une chaîne de base anInputBaseChain dans la table aTable
# commande saisie en mode interactif
create chain ip aTable anInputBaseChain { type filter hook input priority 0; policy drop; comment "a useful remark"; }

Références

netadmin/nftables/000_start.1682791583.txt.gz · Dernière modification : 2023/04/29 18:06 de yoann