nftables les commandes principales du nouveau firewall Linux

nftables est la nouvelle commande qui est censée remplacer iptables dans le but de gérer le firewall du noyau Linux : Netfilter. Voici mes notes personnelles testées sous Debian.

Configuration

  • OS : Debian 10
  • nftables : 0.9.0 (Fearless Fosdick)

Informations générales

  • Activer le service nftables au démarrage avec la commande systemctl :
root@host:~# systemctl enable nftables.service
  • Fichier de configuration nftables :
root@host:~# /etc/nftables.conf
  • Charger le fichier nftables :
root@host:~# nft -f /etc/nftables.conf
  • inet inclus les adresses ipv4 et ipv6. On peut utiliser les mots clés ip pour les adresses ipv4 ou ipv6 pour les adresses ipv6.

Les Tables

  • Création de la table filter :
root@host:~# nft add table inet filter
  • Afficher les tables :
root@host:~# nft list tables
  • Supprimer la table filter :
root@host:~# nft delete table inet filter
  • Réinitialiser de la table filter :
root@host:~# nft flush table inet filter

Les Chaines

  • Créer une Chaine :
root@host:~# nft add chain inet <table name> <chain name>
  • Afficher les Chaines :
root@host:~# nft list chains
  • Supprimer une Chaine :
root@host:~# nft delete chain <table name> <chain name>
  • Créer la chaine input pour le trafic entrant :
root@host:~# nft add chain inet filter INPUT { type filter hook input priority 0\; }
  • Créer la chaine forward pour le trafic traversant :
root@host:~# nft add chain inet filter FORWARD { type filter hook forward priority 0\; }
  • Créer la chaine outbound pour le trafic sortant :
root@host:~# nft add chain inet filter OUTPUT { type filter hook output priority 0\; }
  • Créer la chaine my_masquerade pour le masquerading :
root@host:~# nft add chain inet filter my_masquerade '{ type nat hook postrouting priority 100; }'
  • Créer la chaine my_prerouting pour la redirection de ports :
root@host:~# nft add chain inet filter my_prerouting '{ type nat hook prerouting priority -100; }'

Les Règles

Création

  • Création d'une règle qui autorise le trafic entrant, et active le compteur de paquets :
root@host:~# nft add rule inet filter INPUT counter accept
  • Création d'une règle qui autorise le trafic ssh, et active le compteur de paquets :
root@host:~# nft add rule inet filter INPUT tcp dport 22 counter
  • Création d'une règle qui autorise le trafic web, et active le compteur de paquets :
root@host:~# nft add rule inet filter INPUT tcp dport {80, 443} ct state new,established counter accept

Suppression

  • Supprimer une règle avec son numéro handle :
    • Lister les régles avec leurs numéros handle correspondant :
root@host:~# nft -n -a list ruleset
    • Supprimer la règle :
root@host:~# nft delete rule ip filter INPUT handle 38

Remplacer

  • On peut remplacer une règle via son numéro handle
    • Lister les régles avec leurs numéros handle correspondant :
root@host:~# nft -n -a list ruleset
    • Remplacer la règle :
root@host:~# nft replace rule ip filter INPUT handle 38 iifname "eth0" ip saddr 192.168.1.12 counter drop

Insert

  • On peut insérer une règle avec le numéro handle :
    • Lister les régles avec leurs numéros handle correspondant :
root@host:~# nft -n -a list ruleset
    • Insérer la règle :
root@host:~# nft insert rule ip filter INPUT position 17 iifname "eth0" ip saddr { 192.168.1.11, 192.168.1.68, 192.168.1.118 } counter drop

NAT

Création de la table

  • Création de la table NAT :
root@host:~# nft add table ip NAT

Création des Chaines

  • Création de la chaine masquerading :
root@host:~# nft add chain ip NAT my_masquerade '{ type nat hook postrouting priority 100; }'
  • Création de la chaine prerouting pour la redirection de ports :
root@host:~# nft add chain ip NAT my_prerouting '{ type nat hook prerouting priority -100; }'

Règle Masquerading

  • La règle ne sera pas appliquée entre les réseaux 192.168.0.0/16 :
root@host:~# nft add rule NAT my_masquerade ip daddr != { 192.168.0.0/16 } oifname <interface> masquerade

Prerouting Rule

root@host:~# nft add rule NAT my_prerouting iifname <interface> tcp dport { https } dnat to 192.168.1.10 comment \"Web Server\"
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :