Rechercher

2.2. Rédaction et exécution de scripts nftables

download PDF

Le principal avantage de l'utilisation du cadre nftables` est que l'exécution des scripts est atomique. Cela signifie que le système applique l'intégralité du script ou empêche l'exécution en cas d'erreur. Cela garantit que le pare-feu est toujours dans un état cohérent.

En outre, avec l'environnement de script nftables, vous pouvez :

  • Ajouter des commentaires
  • Définir les variables
  • Inclure d'autres fichiers de jeux de règles

Lorsque vous installez le paquetage nftables, Red Hat Enterprise Linux crée automatiquement les scripts *.nft dans le répertoire /etc/nftables/. Ces scripts contiennent des commandes qui créent des tables et des chaînes vides à différentes fins.

2.2.1. Formats de scripts nftables pris en charge

Dans l'environnement de script nftables, vous pouvez écrire des scripts dans les formats suivants :

  • Le même format que la commande nft list ruleset affiche le jeu de règles :

    #!/usr/sbin/nft -f
    
    # Flush the rule set
    flush ruleset
    
    table inet example_table {
      chain example_chain {
        # Chain for incoming packets that drops all packets that
        # are not explicitly allowed by any rule in this chain
        type filter hook input priority 0; policy drop;
    
        # Accept connections to port 22 (ssh)
        tcp dport ssh accept
      }
    }
  • La syntaxe est la même que pour les commandes nft:

    #!/usr/sbin/nft -f
    
    # Flush the rule set
    flush ruleset
    
    # Create a table
    add table inet example_table
    
    # Create a chain for incoming packets that drops all packets
    # that are not explicitly allowed by any rule in this chain
    add chain inet example_table example_chain { type filter hook input priority 0 ; policy drop ; }
    
    # Add a rule that accepts connections to port 22 (ssh)
    add rule inet example_table example_chain tcp dport ssh accept

2.2.2. Exécution de scripts nftables

Vous pouvez exécuter un script nftables en le passant à l'utilitaire nft ou en l'exécutant directement.

Procédure

  • Pour exécuter un script nftables en le passant à l'utilitaire nft, entrez :

    # nft -f /etc/nftables/<example_firewall_script>.nft
  • Pour exécuter directement un script nftables:

    1. Pour chaque fois que vous effectuez cette opération :

      1. Veillez à ce que le script commence par la séquence shebang suivante :

        #!/usr/sbin/nft -f
        Important

        Si vous omettez le paramètre -f, l'utilitaire nft ne lit pas le script et affiche : Error: syntax error, unexpected newline, expecting string.

      2. Optionnel : Définissez le propriétaire du script sur root:

        # chown root /etc/nftables/<example_firewall_script>.nft
      3. Rendre le script exécutable pour le propriétaire :

        # chmod u x /etc/nftables/<example_firewall_script>.nft
    2. Exécutez le script :

      # /etc/nftables/<example_firewall_script>.nft

      Si aucune sortie n'est affichée, le système a exécuté le script avec succès.

Important

Même si nft exécute le script avec succès, des règles mal placées, des paramètres manquants ou d'autres problèmes dans le script peuvent faire en sorte que le pare-feu ne se comporte pas comme prévu.

Ressources supplémentaires

2.2.3. Utilisation de commentaires dans les scripts nftables

L'environnement de script nftables interprète comme un commentaire tout ce qui se trouve à droite d'un caractère # jusqu'à la fin d'une ligne.

Les commentaires peuvent commencer au début d'une ligne ou à côté d'une commande :

...
# Flush the rule set
flush ruleset

add table inet example_table  # Create a table
...

2.2.4. Utilisation de variables dans un script nftables

Pour définir une variable dans un script nftables, utilisez le mot-clé define. Vous pouvez stocker des valeurs individuelles et des ensembles anonymes dans une variable. Pour des scénarios plus complexes, utilisez des ensembles ou des cartes de verdict.

Variables à valeur unique

L'exemple suivant définit une variable nommée INET_DEV avec la valeur enp1s0:

define INET_DEV = enp1s0

Vous pouvez utiliser la variable dans le script en saisissant le signe $ suivi du nom de la variable :

...
add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept
...
Variables contenant un ensemble anonyme

L'exemple suivant définit une variable qui contient un ensemble anonyme :

define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }

Vous pouvez utiliser la variable dans le script en écrivant le signe $ suivi du nom de la variable :

add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
Note

Les accolades ont une sémantique particulière lorsque vous les utilisez dans une règle, car elles indiquent que la variable représente un ensemble.

2.2.5. Inclusion de fichiers dans les scripts nftables

Dans l'environnement de script nftables, vous pouvez inclure d'autres scripts en utilisant l'instruction include.

Si vous ne spécifiez qu'un nom de fichier sans chemin absolu ou relatif, nftables inclut les fichiers du chemin de recherche par défaut, qui est défini sur /etc sur Red Hat Enterprise Linux.

Exemple 2.1. Inclure des fichiers du répertoire de recherche par défaut

Pour inclure un fichier du répertoire de recherche par défaut :

include "example.nft"

Exemple 2.2. Inclure tous les fichiers *.nft d'un répertoire

Pour inclure tous les fichiers se terminant par *.nft qui sont stockés dans le répertoire /etc/nftables/rulesets/:

include "/etc/nftables/rulesets/*.nft"

Notez que l'instruction include ne correspond pas aux fichiers commençant par un point.

Ressources supplémentaires

  • La section Include files dans la page de manuel nft(8)

2.2.6. Chargement automatique des règles nftables au démarrage du système

Le service systemd nftables charge les scripts de pare-feu inclus dans le fichier /etc/sysconfig/nftables.conf.

Conditions préalables

  • Les scripts nftables sont stockés dans le répertoire /etc/nftables/.

Procédure

  1. Modifiez le fichier /etc/sysconfig/nftables.conf.

    • Si vous avez modifié les scripts *.nft créés dans /etc/nftables/ lors de l'installation du paquet nftables, décommentez la déclaration include pour ces scripts.
    • Si vous avez écrit de nouveaux scripts, ajoutez les instructions include pour inclure ces scripts. Par exemple, pour charger le script /etc/nftables/example.nft au démarrage du service nftables, ajoutez :

      include "/etc/nftables/_example_.nft"
  2. Facultatif : Démarrez le service nftables pour charger les règles du pare-feu sans redémarrer le système :

    # systemctl start nftables
  3. Activer le service nftables.

    # systemctl enable nftables

Ressources supplémentaires

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.