Dans ma courte introduction à nftables, la plus récente interface utilisateur pour piloter Netfilter, le pare-feu de Linux, j'indique que, pour supprimer une règle de filtrage, il faut récupérer son numéro interne (handle) puis demander sa suppression avec ce numéro.
Depuis, je me demandais comment vont s'adapter les outils comme fail2ban, qui font aujourd'hui des iptables -A INPUT -s <IP> -j DROP
+ iptables -D INPUT -s <IP> -j DROP
, c'est-à-dire un retrait en citant mot pour mot la règle ajoutée.
J'ai pensé aux ipsets, mais ils semblent être incompatibles avec nftables.
Guerby m'a apporté la réponse sans que je la cherche : il faut utiliser les ensembles nommés (named sets) de nftables
. Ainsi, on n'ajoute pas une règle de filtrage dans le moteur de filtrage, mais une IP (ou un port, une interface réseau, etc.) à un ensemble.
Exemple d'utilisation :
# « flags interval » permet d'ajouter des réseaux / préfixes, voir https://serverfault.com/questions/978113/hello-nftables-named-sets-that-match-network-prefixes-though-filter-or-variables
$ sudo nft add set ip filter testSet { type ipv4_addr\; flags interval\;}
$ sudo nft add element ip filter testSet { 192.0.2.0/24, 198.18.0.14 }
$ sudo nft list set ip filter testSet
$ sudo nft delete element ip filter testSet { 198.18.0.14 }
# Il faut d'abord créer la table, puis la chaîne, puis associer la chaîne à un hook du noyau, etc., ça, ça ne change pas
$ sudo nft insert rule ip filter INPUT ip saddr @testSet counter drop