, , , , , , ,

nft : gestion des ensembles (sets)

nft intègre les ensembles (set) en natif. On distingue les ensembles anonymes intégrés directement dans les règles et ne pouvant pas être modifiés des ensembles nommés dont le contenu pourra être mis à jour.

# nft en mode interactif

# L'ensemble utilisé dans cet règle est anonyme et ne pourra pas être modifié
nft> add rule 

Dans l'exemple ci-dessous on crée un ensemble “resolveurs” dans la table “filter” puis on y ajoute des éléments:

nft> add set filter resolveurs { type ipv4_addr; comment "Resolveurs DNS de confiance";}

# Ajout des éléments à l'ensemble
nft> add element filter resolveurs { 192.9.200.8,192.9.200.231}
nft> add element ip filter resolveurs {208.67.220.220,208.67.222.222}

On peut à présent utiliser l'ensemble dans une règle. Pour l'exemple on autorise les communications sortantes en direction des résolveurs de confiance:

nft> add rule filter output ct state new ip daddr @resolveurs tcp dport 53 counter accept comment "Autorise DNS vers resolveurs de confiance"

Pour lister les ensembles :

nft list sets

Afficher les attributs détaillés (les éléments) d'un ensemble déterminé:

# nft list set [family] aTable setName

nft list set filter resolveurs

Peupler l'ensemble avec des FQDN

Il est possible de peupler un ensemble en indiquant un FQDN plutôt qu'une adresse IP

nft> add set aTable aSet { type ipv4_addr ; timeout 24h ;}
nft> add element aTable aSet { "server.domain.tld" }

Sources :