Rechercher

2.5. Utilisation des ensembles dans les commandes nftables

download PDF

Le cadre nftables prend en charge les ensembles de manière native. Vous pouvez utiliser des ensembles, par exemple, si une règle doit correspondre à plusieurs adresses IP, numéros de port, interfaces ou tout autre critère de correspondance.

2.5.1. Utilisation d'ensembles anonymes dans nftables

Un ensemble anonyme contient des valeurs séparées par des virgules et placées entre crochets, telles que { 22, 80, 443 }, que vous utilisez directement dans une règle. Vous pouvez également utiliser des ensembles anonymes pour les adresses IP et tout autre critère de correspondance.

L'inconvénient des ensembles anonymes est que si vous souhaitez modifier l'ensemble, vous devez remplacer la règle. Pour une solution dynamique, utilisez des ensembles nommés, comme décrit dans la section Utilisation d'ensembles nommés dans les tables nft.

Conditions préalables

  • La chaîne example_chain et la table example_table de la famille inet existent.

Procédure

  1. Par exemple, pour ajouter une règle à example_chain dans example_table qui autorise le trafic entrant vers les ports 22, 80 et 443:

    # nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept
  2. Optionnel : Afficher toutes les chaînes et leurs règles sur example_table:

    # nft list table inet example_table
    table inet example_table {
      chain example_chain {
        type filter hook input priority filter; policy accept;
        tcp dport { ssh, http, https } accept
      }
    }

2.5.2. Utilisation d'ensembles nommés dans nftables

Le cadre nftables prend en charge les ensembles nommés mutables. Un ensemble nommé est une liste ou une plage d'éléments que vous pouvez utiliser dans plusieurs règles au sein d'une table. Un autre avantage par rapport aux ensembles anonymes est que vous pouvez mettre à jour un ensemble nommé sans remplacer les règles qui l'utilisent.

Lorsque vous créez un ensemble nommé, vous devez spécifier le type d'éléments qu'il contient. Vous pouvez définir les types suivants :

  • ipv4_addr pour un ensemble contenant des adresses ou des plages IPv4, telles que 192.0.2.1 ou 192.0.2.0/24.
  • ipv6_addr pour un ensemble contenant des adresses ou des plages IPv6, telles que 2001:db8:1::1 ou 2001:db8:1::1/64.
  • ether_addr pour un ensemble contenant une liste d'adresses de contrôle d'accès au support (MAC), tel que 52:54:00:6b:66:42.
  • inet_proto pour un ensemble contenant une liste de types de protocoles Internet, tels que tcp.
  • inet_service pour un ensemble contenant une liste de services Internet, tels que ssh.
  • mark pour un ensemble contenant une liste de marques de paquets. Les marques de paquets peuvent être des valeurs entières positives de 32 bits (0 à 2147483647).

Conditions préalables

  • La chaîne example_chain et la table example_table existent.

Procédure

  1. Créez un ensemble vide. Les exemples suivants créent un ensemble pour les adresses IPv4 :

    • Pour créer un ensemble pouvant stocker plusieurs adresses IPv4 individuelles :

      # nft add set inet example_table example_set { type ipv4_addr \; }
    • Pour créer un ensemble capable de stocker des plages d'adresses IPv4 :

      # nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
    Important

    Pour éviter que l'interpréteur de commandes n'interprète les points-virgules comme la fin de la commande, vous devez les faire précéder d'une barre oblique inverse.

  2. Facultatif : Créez des règles qui utilisent l'ensemble. Par exemple, la commande suivante ajoute une règle à l'ensemble example_chain dans l'ensemble example_table qui supprimera tous les paquets provenant des adresses IPv4 de l'ensemble example_set.

    # nft add rule inet example_table example_chain ip saddr @example_set drop

    Comme example_set est toujours vide, la règle n'a actuellement aucun effet.

  3. Ajouter des adresses IPv4 à example_set:

    • Si vous créez un ensemble qui stocke des adresses IPv4 individuelles, entrez :

      # nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }
    • Si vous créez un ensemble qui stocke des plages IPv4, entrez :

      # nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }

      Lorsque vous spécifiez une plage d'adresses IP, vous pouvez également utiliser la notation CIDR (Classless Inter-Domain Routing), comme 192.0.2.0/24 dans l'exemple ci-dessus.

2.5.3. Ressources supplémentaires

  • La section Sets dans la page de manuel nft(8)
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.