Table des matières
Manipulations de base
La manière de gérer le filtrage avec l'outil nft
étant tout-à-fait nouvelle, on va commencer par quelques manipulations simples.
Nous partons sur une base telle qu'elle a été définie en page précédente. Elle a été construite en traduisant des règles iptables
mais il faut abandonner cette méthode.
Nous savons déjà qu'il n'existe plus qu'un seul outil nft
pour gérer aussi bien IPv4 qu' IPv6, ARP ou encore ehternet. Voyons ce qu'il est nécessaire de savoir pour commencer.
Identifier les tables existantes
nft list tables table ip nat table ip filterAu passage, notons si c'était passé inaperçu, que les noms des tables peuvent contenir des espaces.
Identifier le contenu d'une table
nft list table ip filter table ip filter { chain INPUT { type filter hook input priority 0; policy accept; iifname "lo" counter packets 0 bytes 0 accept iifname "enp7s0" counter packets 0 bytes 0 accept } chain FORWARD { type filter hook forward priority 0; policy accept; ip daddr { 208.67.220.123, 208.67.222.123 } counter packets 10 bytes 840 drop iifname "enp7s0" oifname "enp1s0" ct state established,related,new counter packets 7 bytes 511 accept iifname "enp1s0" oifname "enp7s0" ct state established,related counter packets 7 bytes 1490 accept } chain OUTPUT { type filter hook output priority 0; policy accept; oifname "lo" counter packets 0 bytes 0 accept oifname "enp7s0" counter packets 0 bytes 0 accept } }En plus de lister les chaînes et les règles dans ces chaînes; nous voyons aussi l'état des compteurs.
Les compteurs...
Contrairement aux compteurs de ipchains
qui existent par défaut, ils deviennent facultatifs dans nftables
mais ici, nos règles étant des traductions de règles iptables
, les compteurs ont été définis.
Modifier une règle dans une chaîne
Il faut d'abord savoir que chaque chaîne, chaque règle dans nftables
dispose d'un “handler” et que ce “handler” nous ne l'avons jamais vu…
Pour le trouver:
nft -a list table ip filter table ip filter { # handle 9 chain INPUT { # handle 1 type filter hook input priority 0; policy accept; iifname "lo" counter packets 0 bytes 0 accept # handle 5 iifname "enp7s0" counter packets 0 bytes 0 accept # handle 6 } chain FORWARD { # handle 2 type filter hook forward priority 0; policy accept; ip daddr { 208.67.220.123, 208.67.222.123 } counter packets 10 bytes 840 drop # handle 7 iifname "enp7s0" oifname "enp1s0" ct state established,related,new counter packets 9 bytes 663 accept # handle 8 iifname "enp1s0" oifname "enp7s0" ct state established,related counter packets 9 bytes 1642 accept # handle 9 } chain OUTPUT { # handle 3 type filter hook output priority 0; policy accept; oifname "lo" counter packets 0 bytes 0 accept # handle 10 oifname "enp7s0" counter packets 0 bytes 0 accept # handle 11 } }le modificateur
-a
(ou plus clairement -
-handle
) permet de le découvrir ces “handles”, autant le savoir…
Pour modifier par exemple le “handle 9” dont nous n'avons pas besoin du compteur:
nft replace rule ip filter FORWARD handle 9 iifname "enp1s0" oifname "enp7s0" ct state established,related acceptSyntaxe assez lourde, mais faudra faire avec. On va faire la même chose avec le
handle 8
et au final, nous obtenons:
nft list table ip filter table ip filter { chain INPUT { # handle 1 type filter hook input priority 0; policy accept; iifname "lo" counter packets 0 bytes 0 accept iifname "enp7s0" counter packets 0 bytes 0 accept } chain FORWARD { type filter hook forward priority 0; policy accept; ip daddr { 208.67.220.123, 208.67.222.123 } counter packets 10 bytes 840 drop iifname "enp7s0" oifname "enp1s0" ct state established,related,new accept iifname "enp1s0" oifname "enp7s0" ct state established,related accept } chain OUTPUT { type filter hook output priority 0; policy accept; oifname "lo" counter packets 0 bytes 0 accept oifname "enp7s0" counter packets 0 bytes 0 accept } }Les compteurs ont disparu sans pour autant modifier les règles de filtrage.