2.2. Rédaction et exécution de scripts nftables
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'utilitairenft
, entrez :# nft -f /etc/nftables/<example_firewall_script>.nft
Pour exécuter directement un script
nftables
:Pour chaque fois que vous effectuez cette opération :
Veillez à ce que le script commence par la séquence shebang suivante :
#!/usr/sbin/nft -f
ImportantSi vous omettez le paramètre
-f
, l'utilitairenft
ne lit pas le script et affiche :Error: syntax error, unexpected newline, expecting string
.Optionnel : Définissez le propriétaire du script sur
root
:# chown root /etc/nftables/<example_firewall_script>.nft
Rendre le script exécutable pour le propriétaire :
# chmod u x /etc/nftables/<example_firewall_script>.nft
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.
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
-
chown(1)
page de manuel -
chmod(1)
page de manuel - Chargement automatique des règles nftables au démarrage du système
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 valeurenp1s0
: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
NoteLes 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 manuelnft(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
Modifiez le fichier
/etc/sysconfig/nftables.conf
.-
Si vous avez modifié les scripts
*.nft
créés dans/etc/nftables/
lors de l'installation du paquetnftables
, décommentez la déclarationinclude
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 servicenftables
, ajoutez :include "/etc/nftables/_example_.nft"
-
Si vous avez modifié les scripts
Facultatif : Démarrez le service
nftables
pour charger les règles du pare-feu sans redémarrer le système :# systemctl start nftables
Activer le service
nftables
.# systemctl enable nftables
Ressources supplémentaires