Points importants :
- Nftables est prévu pour fonctionner avec l'option "-f" avec laquelle les données sont contenues dans un fichier. Ce fichier peut être généré par la commande "list" et utilisé ensuite en entrée de la commande "nftables -f ".
- A l'origine, rien n'est créé, les différentes tables et chaines existant par défaut avec "iptables" n'existent pas ici par défaut. Il faut donc créer toutes les "tables" et y attacher toutes les "chaines" nécessaires.
Quelques exemples :
- Création d'une table "ENTREE" (Ipv4 par défaut le parametre "ip" étant omis) :
nft add table ENTREE
Liste des tables :
nft list tables
--> table ENTREE
- Ajout d'une table "SORTIE"
nft add table SORTIE
nft list tables
-->
table ENTREE
table SORTIE
- Destruction de la table "SORTIE" :
nft delete table SORTIE
nft list tables
-->
table ENTREE
Ajout d'une chaine nommée "INTERNE" dans la table ENTREE (type filter et Ipv4 par défaut) :
nft add chain ENTREE INTERNE
Destruction de la chaine "INTERNE" de la table ENTREE
nft delete chain ENTREE INTERNE
Addition d'une règle dans notre table ENTREE (à la fin) :
nft add table ENTREE
nft add chain ENTREE INTERNE
nft add rule ENTREE INTERNE ip saddr 127.0.0.1 accept
nft list table ENTREE
-->
table ip ENTREE {
chain INTERNE {
ip saddr 127.0.0.1 accept
}
}
Remarque : On aurait pu ici utiliser aussi "nft list ruleset" pour lister l'ensemble des tables.
- On accepte le port 22
nft add rule ENTREE INTERNE tcp dport 22 accept
nft list table ENTREE
-->
table ip ENTREE {
chain INTERNE {
ip saddr 127.0.0.1 accept
tcp dport ssh accept
}
}
- Insérer une règle en début de chaîne
nft insert rule ENTREE INTERNE ct state established, related accept
On fait une liste avec les numeros de "handle" (option "-a") :
nft -a list table ENTREE
-->
table ip ENTREE {
chain INTERNE {
ct state established,related accept # handle 5
ip saddr 127.0.0.1 accept # handle 2
tcp dport ssh accept # handle 4
}
}
- On ne peut détruire une règle que par son numéro (handle), Ici on détruit la règle 4
nft delete rule ENTREE INTERNE handle 4
nft -a list table ENTREE
-->
table ip ENTREE {
chain INTERNE {
ct state established,related accept # handle 5
ip saddr 127.0.0.1 accept # handle 2
}
}
- On sauvegarde notre table :
nft list table ENTREE >SAUVE
- On efface tout
nft delete table ENTREE
nft list tables
--> ne retourne rien
- On restaure notre jeu de test
nft -f sauve
nft list table ENTREE
-->
table ip ENTREE {
chain INTERNE {
ct state established,related accept
ip saddr 127.0.0.1 accept
}
}
On retrouve notre table telle qu'avant destruction, la sauvegarde d'un jeu de règles et sa restauration sont d'une belle simplicité.
- On rajoute une autorisation pour SSH et on logue la connexion :
nft add rule ENTREE INTERNE tcp dport ssh log prefix \"MSG=Connect SSH \"
nft -a list ruleset
-->
table ip ENTREE {
chain INTERNE {
ct state established,related accept # handle 2
ip saddr 127.0.0.1 accept # handle 3
tcp dport ssh log prefix "Connect SSH" # handle 4
}
}