nftables les commandes principales du nouveau firewall Linux

nftables est le nouveau firewall du noyau Linux qui va remplacer iptables/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 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\; policy drop\; }
  • Créer la chaine outbound pour le trafic sortant
root@host:~# nft add chain inet filter OUTPUT { type filter hook output priority 0\; policy drop\; }
  • 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 :