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.
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.
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.
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.
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.