logo rss

Commandes Essentielles de nftables pour Gérer les Pare-feux Linux

nftables est le remplaçant moderne de l’outil iptables utilisé pour gérer le framework de pare-feu Netfilter sous Linux. Voici les commandes clés et quelques notes pour comprendre son fonctionnement sur un système Linux typique (exemple basé sur Debia).

Configuration

  • OS : Debian 12
  • nftables : v1.0.6 (Lester Gooch #5)

Informations générales

  • Activer nftables au démarrage avec systemctl :
root@host:~# systemctl enable nftables.service
  • Emplacement du fichier de configuration par défaut :
root@host:~# /etc/nftables.conf
  • Charger manuellement le fichier de configuration nftables :
root@host:~# nft -f /etc/nftables.conf
  • Afficher l’ensemble des règles actives :
root@host:~# nft list ruleset

Remarque : La famille inet inclut à la fois ip (IPv4) et ip6 (IPv6). Utilisez ip ou ip6 explicitement si nécessaire.

Tables

  • Créer une nouvelle table :
root@host:~# nft add table inet <nom_de_table>
  • Lister les tables existantes :
root@host:~# nft list tables
  • Supprimer une table :
root@host:~# nft delete table inet <nom_de_table>
  • Vider une table (supprimer toutes les règles sans supprimer la table elle-même) :
root@host:~# nft flush table inet <nom_de_table>

Les Chaines

  • Créer une nouvelle chaîne :
root@host:~# nft add chain inet <nom_table> <nom_chaine>
  • Lister toutes les chaînes :
root@host:~# nft list chains
  • Supprimer une chaîne :
root@host:~# nft delete chain inet <nom_table> <nom_chaine>
  • Créer une chaîne INPUT pour le trafic entrant :
root@host:~# nft add chain inet filter INPUT { type filter hook input priority 0\; }
  • Créer une chaîne FORWARD pour le trafic routé :
root@host:~# nft add chain inet filter FORWARD { type filter hook forward priority 0\; }
  • Créer une chaîne OUTPUT pour le trafic sortant :
root@host:~# nft add chain inet filter OUTPUT { type filter hook output priority 0\; }
  • Créer une chaîne NAT pour le masquage (postrouting) :
root@host:~# nft add chain inet filter my_masquerade '{ type nat hook postrouting priority 100; }'
  • Créer une chaîne NAT pour le pré-routage et la redirection de ports :
root@host:~# nft add chain inet filter my_prerouting '{ type nat hook prerouting priority -100; }'

Les Règles

Créer des règles

  • Autoriser le trafic entrant avec comptage de paquets et un commentaire :
root@host:~# nft add rule inet <nom_table> <nom_chaine> counter accept comment "ALLOW INPUT"
  • Autoriser le trafic SSH sur le port 22 avec comptage des paquets :
root@host:~# nft add rule inet filter INPUT tcp dport 22 counter
  • Autoriser le trafic HTTP et HTTPS dans les états new ou established, avec comptage :
root@host:~# nft add rule inet filter INPUT tcp dport {80, 443} ct state new,established counter accept

Supprimer des règles

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

Remplacer une règle

  • Lister les règles actuelles avec les numéros de handle :
root@host:~# nft -n -a list ruleset
  • Remplacer une règle en utilisant son handle :
root@host:~# nft replace rule ip filter INPUT handle 38 iifname "eth0" ip saddr 192.168.1.12 counter drop

Insérer une règle

  • Insérer une règle à une position spécifique dans la chaîne :
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éer une table

  • Créer une table dédiée au NAT :
root@host:~# nft add table ip NAT

Créer des chaînes

  • Créer une chaîne postrouting pour le masquage du trafic :
root@host:~# nft add chain ip NAT my_masquerade '{ type nat hook postrouting priority 100; }'
  • Créer une chaîne prerouting pour la redirection de ports :
root@host:~# nft add chain ip NAT my_prerouting '{ type nat hook prerouting priority -100; }'

Règle de masquage

  • Masquer tout le trafic sortant, sauf les adresses de destination dans 192.168.0.0/16 :
root@host:~# nft add rule NAT my_masquerade ip daddr != { 192.168.0.0/16 } oifname <interface> masquerade

Règle de pré-routage

  • Rediriger le trafic HTTPS vers un serveur interne (192.168.1.10) avec DNAT :
root@host:~# nft add rule NAT my_prerouting iifname <interface> tcp dport { https } dnat to 192.168.1.10 comment "Web Server"