Référence de règles et syntaxe : https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes
Contrairement à Iptables, il n'y a pas de tables prédéfinies. Il existe par contre des familles de tables correspondants aux outils utilisés :
nft list table ip matableIPv4
nft list table ip matableIPv4 -a
nft -f NOM-FICHIER
nft add table ip matableIPv4
nft delete table ip matableIPv4
nft list tables
nft flush table ip matableIPv4
Nous avons donc vu qu'il fallait créer une chaine INPUT pour traiter les paquets qui arrivaient sur l'interface et une chaine OUPUT pour traiter ceux qui sortaient de l'interface réseau. Pour rappel, nous ne travaillerons ici qu'en IPv4 sur notre table mon_filtreIPv4 :
nft add chain ip mon_filtreIPv4 input { type filter hook input priority 0 \; } nft add chain ip mon_filtreIPv4 output { type filter hook output priority 0 \; }
Ici, quelques explications s'imposent, on a donc dans une première partie une syntaxe assez claire. On va utiliser “nft” pour ajouter (“add”) une chaine dans la famille “ip” et dans la table “mon_filtreIPv4”. Ce qui suit permet de former une base chain.
Chain ? base chain ? Quelle différence ?
Une base chain est une chaine qui va directement se rattacher à un hook alors qu'une “simple” chain n'est pas rattaché à un Hook. c'est pour cela que l'on précise ensuite “type filter hook input”. Notre chaine INPUT va donc se rattacher au hook “INPUT”. Il s'agit là juste d'une précision quant à la nomenclature à utiliser. Dans la réalité, on parle toujours de chaine.
On retrouve également une notion de priorité. La priorité est ici importante, car elle permet de gérer les cas où plusieurs chaines sont positionnées sur le Hook INPUT par exemple. Nous avons en effet vu qu'une table pouvait avoir plusieurs chaines, et chaque chaine peut être positionnée sur un Hook souhaité, on peut très bien avoir une chaine “INPUT_1” et une chaine “INPUT_2” pour des besoins organisationnels. La priorité la plus basse prend ainsi le pas sur les autres priorités.
Note : il est possible d'avoir des priorités négatives (Exemple : -100) qui sont alors prioritaires sur une priorité 0.
Extrait de IT-connect.fr - Creative Commons License BY-NC-ND 4.0
#Autorisation du port 80 dans la table pour le trafic entrant (input) nft add rule matablePv4 input tcp dport 80 accept #Ajout d'une règle autorisant le port 22 à la ligne 4 de la chain INPUT nft add rule matablePv4 input position 4 tcp dport 22 accept #Autoriser les connexion relatives et établies en entrant nft add rule mytable input ct state established,related accept #Blocage du reste du trafic entrant dans la table matablePv4 nft add rule matablePv4 input drop #Autorisation du port 80 dans la table pour le trafic sortant (output) nft add rule matablePv4 output tcp sport 80 accept #Blocage du reste du trafic sortant dans la table matablePv4 nft add rule matablePv4 output drop
#Accès en SSH autorisé uniquement pour les membres du réseau 192.168.0.0/24 nft add rule matableIPv4 input tcp dport 22 ip saddr 192.168.0.0/24 accept #Accès SSH autorisé uniquement pour 192.168.0.45 nft add rule matableIPv4 input tcp dport 22 ip saddr 192.168.0.45 accept
nft replace rule matableIPv4 output handle 9 tcp dport 22 accept
nft delete rule matablePv4 output tcp dport 23 accept #Suppression de la règle n°22 nft delete rule matablePv4 output handle 22
nft add rule matablePv4 input position 4 tcp dport 22 accept
nft add rule matablePv4 input position 4 tcp dport 22 accept comment \"Allow SSH\"
# On autorise de echo-request et le echo-reply pour l'ICMP nft add rule filter input icmp type {echo-reply, echo-request} accept
nft list table mon_filtreIPv4 > /etc/nftables.conf
nft -f /etc/nftables.conf
Créer le service Nftables et son lancement au démarrage :
systemctl enable nftables
Sauvegarder la configuration dans le fichier de configuration de Nftables :
nft list table mon_filtreIPv4 > /etc/nftables.conf