Tables, chaines, règles, ça devient compliqué !
Avec nftables, la notion de table ne diffère que très légèrement par rapport à IPtables. Mais il est utile pour le cours de revoir ces notions de tables, de chaines et de règles dans nftables.
I. Les tables
Une table est un objet qui va contenir des chaines. Il ne s'agit dans nftables que d'un simple conteneur que l'on peut dire "organisationnel" qui est défini par l'utilisateur.
Il n'y a pas de table prédéfinie dans nftables a contrario d'IPtables dans lequel nous pouvions trouver les tables filter, raw, NAT, etc.
Il existe en revanche des familles de table, qui correspondent chacune à un outil différent dans la suite IPtables. Pour rappel, nftables ne remplace en effet pas qu'IPtables, mais également d'autres outils. On trouvera ainsi :
- Les tables de la famille IP qui remplace IPtables ;
- Les tables de la famille ARP qui remplace arptables ;
- Les tables de la famille IP6 qui remplace ip6tables ;
- Les tables de la famille INET qui remplace IPtables et ip6btables qui permettra de faciliter l'administration des routeurs dual-stack (les routeurs qui sont présents sur la pile IPv4 et également sur la pile IPv6, le tout en même temps) ;
- Les tables de la famille bridge.
II. Les chaines
Une chaine va contenir et stocker des règles. A nouveau, il n'existe pas de chaine prédéfinie, mais celles-ci doivent se rattacher à des hooks (ceux vus dans le chapitre précédent). Une chaine va au final permettre de fixer et de regrouper les règles entre elles.
Comme nous l'avons vu plus haut, une chaine correspond donc à un crochet (hook) vu précédemment (Input, Output, etc.). Nous verrons techniquement comment lier une chaine à un hook un peu plus tard.
III. Les règles
Ce dernier point est assez simple à comprendre. Une règle n'est qu'au final une action à appliquer. Elle se compose :
- d'un filtre qui permet de cibler certains paquets;
- d'une action qui permet d'accepter, de supprimer ou de modifier un paquet.
Voyons un exemple de règle :
ip saddr 192.168.1.1 ip daddr 192.168.19.5 drop
Il s'agit ici d'une règle qui va bloquer tous les paquets venant de l'IP 192.168.1.1 et allant vers 192.168.19.5. On remarque donc les deux parties de notre règle :
- ip saddr 192.168.1.1 ip daddr 192.168.19.5 : c'est notre filtre qui permet d'appliquer et de cibler notre action
- drop : c'est notre action, ici le fait de supprimer le paquet, donc de le bloquer
Pour schématiser l'ensemble :
Nous avons différentes tables, qui peuvent ou non être de familles différentes (ici une pour IPv4, une pour IPv6) et qui contiennent des chaines (qui se réfèrent à des hooks NetFilter), qui elles-mêmes contiennent des règles d'acceptation, de suppression ou de modification des paquets.
C'est la fin de ce second module plutôt théorique. Dans le prochain module, vous pourrez faire vos premiers pas dans la configuration de nftables.