diff --git a/critical/networking/nftables.md b/critical/networking/nftables.md index 76e052c..644b216 100644 --- a/critical/networking/nftables.md +++ b/critical/networking/nftables.md @@ -3,11 +3,11 @@ ## Introduction `NFTables` est un outil permettant de de gérer une partie de la gestion des -paquets dans une machine Linux. Cet outil supplante ses prédécesseurs xtables -(iptables, ip6tables, arptables, ...) et son support ets inclus dans les noyaux -Linux modernes. Lorsqu'un paquet traverse, sort de ou entre sur votre machine, -il parcourt un certain chemin de prises de décisions afin de décider de son -sort (jeté, accepté (= intouché), modifié, ...). +paquets réseaux dans une machine Linux. Cet outil supplante ses prédécesseurs +xtables (iptables, ip6tables, arptables, ...) et son support ets inclus dans les +noyaux Linux modernes. Lorsqu'un paquet traverse, sort de ou entre sur votre +machine, il parcourt un certain chemin de prises de décisions afin de décider de +son sort (jeté, accepté (= intouché), modifié, ...). ## Structure de NFTables @@ -23,7 +23,8 @@ de décision du noyau. Là encore, on peut souhaiter avoir des chaînes différentes pour les paquets IP, IPv6, arp, ... . Pour cette raison, les chaînes sont regroupées dans des tables, -chacune ne concernant qu'un type de protocole de couche 3. +chacune ne concernant un ou plusieurs type de protocole (généralement de couche +3). La structure des règles NFTables ainsi obtenue devient : @@ -55,7 +56,7 @@ La structure des règles NFTables ainsi obtenue devient : | | +----------------------------------+ | | | | | | | | ... | | -| |----------------------------------------------------+ | +| +----------------------------------------------------+ | | | | +----------------------------------------------------+ | | | Chaîne concernant le crochet du NAT en entrée | | @@ -70,7 +71,7 @@ La structure des règles NFTables ainsi obtenue devient : | | +----------------------------------+ | | | | | | | | ... | | -| |----------------------------------------------------+ | +| +----------------------------------------------------+ | | | +------------------------------------------------------------+ @@ -86,16 +87,16 @@ La structure des règles NFTables ainsi obtenue devient : Comme le décrit le schéma précédent, les tables sont juxtaposées les unes les autres. Lorsqu'un paquet est traité, selon le protocole utilisé, aucune, une ou -plusieurs tables seront utilisées pour charger les règles à appliquer. \`A +plusieurs tables seront utilisées pour charger les règles à appliquer. À chaque étape de traitement du paquet, les chaînes correspondant au paquet seront alors appliquées. Un paquet parcourt les règles d'une chaîne dans l'ordre de leur écriture. Si une action est indiquée dans le corps d'une règle, elle sera exécutée si -toutes les conditions le précédant dans l'écriture de la règle sont vérifiées. +toutes les conditions la précédant dans l'écriture de la règle sont vérifiées. Le parcourt d'une chaîne s'arrête lorsqu'un verdict s'applique au paquet -considéré. Un verdict est une cation particulière parmi peut être : +considéré. Un verdict est une action particulière parmi peut être : * l'abandon du paquet * l'abandon du paquet avec choix du message retourné à l'émetteur @@ -114,7 +115,7 @@ Une table est caractérisée par : * Un nom * Un type de paquet : principalement ip (pour l'IPv4), ip6 (pour l'IPv6) et inet -* (pour l'IPv4 et IPv6). + (pour l'IPv4 et IPv6). @@ -154,7 +155,7 @@ reject [with MSG], ...). Une chaîne peut être créée par la commande `nft add chain '{ type hook priority -; [policy ;] }', ou par le morceau de +; [policy ;] }'`, ou par le morceau de configuration textuelle suivant : ``` @@ -174,19 +175,19 @@ Une règle est caractérisée par : Dans la définition d'une règle, il est possible d'indiquer : -* des conditions écrites ` `, o' \`u le type est un champ du +* des conditions écrites ` `, où le type est un champ du paquet et la valeur est la valeur du champ, comme par exemple `ip protocol udp` (type : `ip protocol` représentant le champ du protocole de couche 4 dans un paquet IPv4, valeur `tcp`). Les types peuvent être décrits par `nft describe `. -* des actions, parmi lesquelles ``compter les paquets'' (`counter`), logger les +* des actions, parmi lesquelles "compter les paquets" (`counter`), logger les paquets (`log prefix ...`). Pour ajouter une règle, il est possible d'utiliser `nft add rule '''`, ou d'ajouter la règle +table> ''`, ou d'ajouter la règle sur une ligne dans la configuration textuelle. @@ -196,9 +197,9 @@ sur une ligne dans la configuration textuelle. * `nft -f ` lit la configuration d'un ficher et l'applique -* `systemctl reload nftables` a le même effet que `nft -f /etc/nftables.conf` di +* `systemctl reload nftables` a le même effet que `nft -f /etc/nftables.conf` si le service existe. - + * Si aucune chaîne / table / règle n'est traversée, le paquet est accepté par défaut (si on ne filtre pas, tout passe)?