Tutoriel Nftables

Tutoriel Nftables



Ce tutoriel explique comment travailler avec le pare-feu Nftables Linux. Ce contenu est optimisé à la fois pour les utilisateurs Linux expérimentés et les nouveaux utilisateurs.

Nftables est un composant du noyau Linux fournissant des fonctionnalités de pare-feu. C'est le remplacement d'Iptables.







Après avoir lu ce tutoriel, vous comprendrez les règles de Nftables, et vous pourrez créer votre pare-feu. Vous n'avez pas besoin de connaissances préalables sur Iptables.



Tous les exemples de ce didacticiel contiennent des captures d'écran, ce qui permet à tous les utilisateurs Linux, quel que soit leur niveau de connaissances, de les comprendre et de les mettre en œuvre facilement.



Premiers pas avec Nftables

Avant de commencer, créez et ouvrez un fichier à l'aide d'un éditeur de texte comme nano ou vi pour commencer à taper vos premières règles Nftables basées sur l'exemple suivant. Ne pas copier-coller ; tapez tout.





nano pare-feu.nft

L'exemple de ce didacticiel est assez simple et montre un pare-feu restrictif dans lequel tout le trafic IPv4 est supprimé, à l'exception du bouclage et des ports spécifiques.



Dans la capture d'écran précédente, j'ai utilisé la première ligne pour définir mon réseau local (192.168.0.0/16) comme LinuxHintNet.

définir LinuxHintNet = 192.168.0.0 / 16

Dans la deuxième ligne, je définis un groupe de ports (80, 443 et 22). J'appelle ce groupe AllowPorts parce que je prévois d'autoriser le trafic à travers eux. AllowPorts est un nom arbitraire.

définir les ports autorisés   = { 80 , 443 , 53 , 22 }

Ensuite, j'ajoute une table, qui est un conteneur ou un groupe de chaînes et de règles ; les deux sont expliqués ci-dessous. Les tableaux aident à organiser les règles et les chaînes. J'ai appelé la table dans l'exemple 'Restrictive' car elle contient une politique restrictive et son nom est arbitraire.

L'adresse IP avant le nom de la table indique que les règles de table que ne seront appliquées qu'au trafic IPv4. Vous pouvez utiliser inet au lieu d'IP pour appliquer des règles aux protocoles IPv4 et IPv6. Ou vous pouvez remplacer IP par ip6 pour IPv6 uniquement.

Rappelez-vous, Restrictif est un nom que j'ai défini arbitrairement. Vous pouvez nommer la table comme vous le souhaitez.

Dans mon cas, j'applique les règles uniquement à IPv4, comme indiqué ci-dessous.

ajouter un tableau IP Contraignant

Pour les deux protocoles, utilisez ce qui suit :

ajouter une table inet Restrictif

Ensuite, nous ajoutons la première chaîne de base, que je nomme arbitrairement Incoming car elle est liée au trafic entrant. Cependant, vous pouvez le nommer comme vous le souhaitez.

La chaîne de base suivante supprime tout le trafic entrant par défaut :

  • add chain ip Restrictive Incoming : cette section ajoute la chaîne Restrictive Incoming à appliquer à IPv4
  • filtre de type : Ceci définit le type de chaîne comme un filtre puisqu'il filtrera le trafic. Les autres types de chaîne possibles sont route ou NAT
  • hook input : fait référence aux paquets entrants
  • priorité 0 : la priorité de la chaîne de base définit l'ordre des chaînes de base
  • abandon de la politique : la stratégie d'abandon, par défaut, supprime tous les paquets
Ajouter une chaîne IP Entrant restrictif { taper priorité d'entrée de crochet de filtre 0 ; abandon de politique ; }

Comme vous pouvez le voir dans la capture d'écran suivante, j'ai créé deux autres chaînes de base similaires à la précédente, Restrictive Redirect et Restrictive Outgoing. La différence est le crochet défini pour chacun (crochet vers l'avant et crochet vers la sortie). Les expliquer est répétitif.

Après les trois chaînes de base, nous pouvons continuer avec les règles Nftables pour autoriser le trafic en boucle.

J'ajoute les lignes suivantes pour le trafic entrant et sortant sur l'interface de bouclage.

ajouter une règle IP Restrictive Incoming iifname lo counter accept

ajouter une règle IP Restrictive Incoming oifname lo counter accept

Maintenant, j'ajoute quatre règles acceptant le trafic TCP et UDP sortant et entrant via tous les ports inclus dans la variable $AllowPorts définie au début du fichier.

ajouter une règle IP Sport TCP entrant restrictif $AllowPorts compteur accepter

ajouter une règle IP Port TCP sortant restrictif $AllowPorts compteur accepter

ajouter une règle IP Sport UDP entrant restrictif $AllowPorts compteur accepter

ajouter une règle IP Déport udp sortant restrictif $AllowPorts compteur accepter

Vous pouvez voir le script complet ci-dessous.

Une fois que vous avez fini de taper vos tableaux, chaînes et règles, fermez le document et enregistrez les modifications.

# Dans les deux premières lignes, je définis mon réseau local (LinuxHintNet) et un ensemble de ports (80,
#443,22) pour permettre le trafic à travers eux dans les règles ci-dessous.
définir LinuxHintNet = 192.168.0.0 / 16
définir AllowPorts              { 80 , 443 , 53 , 22 }
#Je déclare une nouvelle table qui contiendra des chaînes et des règles. J'appelle ce tableau 'Restrictif'.
#Le 'ip' applique les règles à IPv4 uniquement. Pour IPv6, utilisez uniquement 'ip6' et utilisez 'inet' pour les deux protocoles.
ajouter un tableau IP Contraignant
# Après avoir créé la table, je crée trois chaînes, Incoming, Redirect et Outgoing,
#Leurs noms sont arbitraires. Tous abandonnent le trafic entrant, sortant et de transfert par défaut.
ajouter une chaîne IP Entrant restrictif { taper priorité d'entrée de crochet de filtre 0 ; abandon de politique ; }
ajouter une chaîne IP Redirection restrictive { taper priorité de transfert de crochet de filtre 0 ; abandon de politique ; }
ajouter une chaîne IP Sortant restrictif { taper priorité de sortie de crochet de filtre 0 ; abandon de politique ; }
# J'implémente deux règles pour autoriser le trafic en boucle.
ajouter une règle IP Restrictive Incoming iifname lo counter accept
ajouter une règle IP Restrictive Incoming oifname lo counter accept
# J'implémente des règles pour autoriser le trafic via les ports définis dans la variable AllowPorts.
ajouter une règle IP Sport TCP entrant restrictif $AllowPorts compteur accepter
ajouter une règle IP Port TCP sortant restrictif $AllowPorts compteur accepter
ajouter une règle IP Sport UDP entrant restrictif $AllowPorts compteur accepter

ajouter une règle IP Déport udp sortant restrictif $AllowPorts compteur accepter

Pour activer le pare-feu, exécutez la commande suivante :

sudo nft -F pare-feu.nft

Vous pouvez vérifier vos règles en exécutant la commande suivante :

sudo ensemble de règles de liste nft

C'est un pare-feu restrictif de base.

Conclusion:

Comme vous pouvez le voir, Nftables est beaucoup plus convivial qu'Iptables, et les utilisateurs peuvent apprendre Nftables plus rapidement qu'Iptables. Depuis qu'Iptables est abandonné, de nombreuses distributions utilisent Nftables comme pare-feu par défaut, y compris Debian. Les utilisateurs expérimentés d'Iptables voudront peut-être consulter l'outil Iptables-nftables-compat, qui traduit Iptables en Nftables. Cela peut les aider à comprendre les différences.

Les utilisateurs professionnels comme les administrateurs système ont tendance à continuer à travailler avec Iptables ; évitez d'ignorer Nftables pour gagner du temps tout en améliorant le filtrage. J'espère que cet article était assez simple pour vous convaincre d'essayer Nftables.