Nftables

De Linux Server Wiki
Aller à la navigation Aller à la recherche
  • iptables legacy : iptables-legacy* ip6tables-legacy*
  • iptables nftables : iptables-nft* ip6tables-nft*. Parse la syntaxe iptables, créé les commande nftables correspondantes. Utilises libnftnl (comme nft), ce n'est donc pas un "simple" convertisseur de syntaxe textuelle.
  • nftables : nft

Les règles crées avec iptables-nft ou ip6tables-nft peuvent se retrouver avec nft. Par exemple, pour les règles filter (iptables-nft -t filter, qui est le fonctionnement "par défaut" de iptables-nft (et iptables-legacy)) :

nft list table ip filter
nft list table ip6 filter

Lister les tables, une table spécifique, et la totalité du ruleset nftables :

nft list tables
nft list table <type> <name>
nft list ruleset

Exemple d'ajout de règles dans une table 'ipsec' qui se branche sur l'input et :

  • autorise le protocol ESP depuis l'ip source 90.115.19.124
  • autorise le protocol UDP, ports 500 et 4500, depuis l'ip source 90.115.19.124
nft add table ip ipsec
nft add chain ip ipsec INPUT '{ type filter hook input priority 0; policy accept; }'
nft add rule ip ipsec INPUT iifname "ens192" ip protocol esp ip saddr 90.115.19.124 accept
nft add rule ip ipsec INPUT iifname "ens192" ip protocol udp ip saddr 90.115.19.124 udp dport { 500,4500 } accept

Flush et suppression d'une table :

nft flush table <type> <name>
nft delete table <type> <name>

Note sur l'ordre de processing

  • Lorsque vous créez une chaîne, vous pouvez la brancher sur un hook. Par exemple, type filter hook input priority 0; policy accept; connecte la chaîne au hook input (paquets entrant sur le serveur), avec une priorité 0, et une policy (action par défaut) d'acceptation
    • La priorité permet d'ordonner plusieurs hooks entre elles. (-10 en premier, 0 en second, 10 en dernier, par exemple).
  • Un verdict accept provoque l'acceptation du paquet et l'arrêt du processing des règles, mais uniquement à l'intérieur d'une même chaîne lié à un hook.
  • Un verdict drop provoque le drop instantané du paquet et l'arrêt de processing de toutes les règles y compris des hooks de priorité ultérieurs.
  • Exemple: si un paquet entrant (hook input) est accepté par une règle dans une chaine lié à un hook input de priority 0, mais qu'une autre règle existe dans une autre chaîne lié à un hook input de priorité ultérieure (priority 1 par exemple), le paquet sera évalué une seconde fois par cette deuxième chaîne. Si ce même paquet était matché dans le premier hook input de priority 0 par une règle drop, il serait droppé et non évalué par le deuxième hook de priority 1 (car il est droppé immédiatement).

Exemple :

table inet filter {
        # Cette chaîne est évaluée en premier suite à sa priorité de 0
        chain ssh {
                type filter hook input priority 0; policy accept;
                # paquet SSH accepté par cette règle
                tcp dport ssh accept
        }

        # Cette chaîne est évaluée en dernier suite à sa priorité de 1
        chain input {
                type filter hook input priority 1; policy drop;
                # Le même paquet SSH est droppé du fait de la policy par défaut de drop
        }
}