« Nftables » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(5 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes | |||
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains | |||
* iptables legacy : iptables-legacy* ip6tables-legacy* | * 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. | * 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 | * 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)) : | 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)) ou nat : | ||
<pre> | <pre> | ||
nft list table ip filter | nft list table ip filter | ||
nft list table ip6 filter | nft list table ip6 filter | ||
nft list table ip nat | |||
nft list table ip6 nat | |||
</pre> | </pre> | ||
Ligne 24 : | Ligne 29 : | ||
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 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 | nft add rule ip ipsec INPUT iifname "ens192" ip protocol udp ip saddr 90.115.19.124 udp dport { 500,4500 } accept | ||
</pre> | |||
Flush et suppression d'une table : | |||
<pre> | |||
nft flush table <type> <name> | |||
nft delete table <type> <name> | |||
</pre> | |||
=Note sur l'ordre de processing= | |||
* Lorsque vous créez une chaîne, vous pouvez la brancher sur un hook. Par exemple, <code>type filter hook input priority 0; policy accept;</code> 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). | |||
* Sur une règle, 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. Si il y a plusieurs hook input, un paquet accepté dans un premier hook input sera également évalué dans les hooks input ultérieurs. | |||
* 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 (ou une policy) dans une chaîne lié à un hook input de priority 0, mais qu'une autre règle (ou policy) 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 : | |||
<pre> | |||
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 | |||
} | |||
} | |||
</pre> | </pre> |
Dernière version du 1 janvier 2020 à 16:52
https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains
- 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)) ou nat :
nft list table ip filter nft list table ip6 filter nft list table ip nat nft list table ip6 nat
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).
- Sur une règle, 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. Si il y a plusieurs hook input, un paquet accepté dans un premier hook input sera également évalué dans les hooks input ultérieurs.
- 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 (ou une policy) dans une chaîne lié à un hook input de priority 0, mais qu'une autre règle (ou policy) 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 } }