
Par Xavier GRUSELLE et Grégory ALLAIN (Site optimisé pour Firefox 1.5)
Liens conseillés
3- Comment fonctionne Netfilter ...
Netfilter fait appel à plusieurs entités dans son fonctionnement : les tables, les chaines (chains), cibles (targets) et les les règles (rules).
3.1- Les règles
Une règle est tout simplement une ligne que le noyau lit pour savoir ce qu'il doit faire d'un paquet. Si le paquet remplis toutes les conditions de cette règle, il est envoyé à la cible (on dit aussi le jump). La syntaxe générale pour créer une règle est la suivante :
iptables [-t table] commande nom\_chaine [match (condition)] [cible/jump]
L'ordre n'a pas trop d'importance mais ici, il suit la logique de fonctionnement de netfilter. On voit que l'option table est facultative. Si on ne précise pas de table, la table filter est prise par defaut. Nous allons expliquer plus en détail ce qu'est une table. La commande doit etre placée en premier ou imédiatement après la table.
3.2- Les chaines
La chaine c'est une liste ou on stoque les règles. A chaque paquet qui est envoyé à une chaine, on va appliquer les règles qu'elle contient jusqu'a ce qu'une de ces règles corresponde au paquet qui la traverse. La condition (match) est l'expression qui va permettre de verifier si un paquet est conforme à la règle. Une condition pourrait etre que le paquet vienne d'une certaine interface réseau, ou d'une adresse IP précise. En fait, il y a une multitude de conditions à tester comme on a pu le voir en compilant iptables.
3.3- Les cibles
La cible est une décision qu'on va prendre sur la direction (dans netfilter) que va prendre le paquet. Ce peut etre une des décisions prédéfinies (accepter,refuser,ignorer,logger ...) ou une autre chaine dans laquelle le paquet va passer. Au final, un paquet doit toujours finir par tomber sur une décision prédéfinie. Dans le cas contraire, on lui applique la décision par défaut qu'on aura préalablement choisit parmis les décisions prédéfinies.
3.4- Les tables
Il n'existe que trois tables (quatres si on applique le patch drop_table) qui ont chacune leur role. Si aucune table n'est précisée, la table par défaut est filter.
3.4.1) Table nat
La table nat sert, comme sont nom l'indique, à effectuer des opérations de NAT (Network Adress Translation).
Rappel :
Le NAT est un technique qui permet de router les paquets d'un réseau privé sur Internet et inversement en utilisant une seule IP routable sur Internet. Sans NAT, on serait obligés d'utiliser une IP internet pour chaque machine devant etre connectée à Internet. Le NAT est très utilisé car, non seulement les réseaux Ip routables sur Internet coutent très cher, mais en plus, Ipv4 ne permet pas de fournir assez d'addresses pour tout le monde. Un autre avantage du NAT est qu'il permet de faire passer tout le trafic par une seule machine. Cette machine est donc idéale pour filtrer celui-ci.
Il existe deux types de NAT: le NAT source et le NAT de destination.
Le NAT de source permet de régler un premier type de problème. Si une machine d'un réseau privé souhaite envoyer des paquets à une machine sur Internet (un serveur web par exemple), sans NAT source, la machine du réseau peut envoyer son packet mais la machine distante ne pourra pas lui répondre car les paquets qui lui parviendront auront une adresse source non routable sur Internet (puisque qu'elle appartient à une plage de réseau privé). Le NAT de source remplace l'adresse source des paquets provenant d'un réseau local et à destination d'Internet par l'adresse de la passerelle (connectée à Internet et dont l'ip est routable sur Internet) tout en gardant une table de correspondance aui lui permet de redirriger les packets de réponse de la machine distante vers le réel emétteur (la machine du réseau privé). Ceci est en réalité un type évolué de NAT source, le MASQUERADING. La différence avec le NAT source standard pour lequel on doit spécifie la translation ip par ip, c'est qu'ici on effectue cette opération automatiquement pour chaque machine du réseau privé.
Le NAT de destination permet à une machine d'un réseau privé d'accepter sur certains ports des connexions d'autres machines situées sur Internet. Le principe est simple; on définit un port sur la passerelle qui, au lieu d'accepter les connexions, va les transmettre à un port d'une machine sur le réseau privé. Cela permet d'avoir plusieurs serveurs sur internet avec une seule IP routable sur Internet. Tout ceci est transparent pour la machine distante; elle enverra à chaque fois ses paquets sur la patte internet de la passerelle NAT qui elle, remplacera l'adresse de destination du paquet (son ip) par l'ip privé de la machine sur le réseau. On appele cette technique Port Forwarding car elle fonctionne en fonction du port de destination.
Revenons à la table NAT de Netfilter ... s'occupe donc de mettre en place ces méthodes. Si le premier packet d'une connexion remplie la condition d'une règle qui concerne cette table, tous les autres paquets de cette connexion seront automatiquement NATés sans passer par cette table. Pour cette raison, vous ne devez pas faire de regles de filtrage dans cette table.
3.4.2) La Table Mangle
Elle sert à modifier certains champs des en-têtes des paquets (TOS, TTL, etc.)
3.4.3) La Table Filter
Elle permet de filtrer les paquets en les acceptant, en les rejetant, en les ignorant. Elle permet aussi de les journaliser. Trois chaines sont prédéfinies dans cette table. INPUT pour les paquets à destination de notre firewall OUTPUT pour les paquets générés par notre firewall FORWARD pour les paquets à destination des autres machines du réseau local ou originaires de celui-ci.