Les tables, chaînes et cibles
Définition : Table
Il existe trois tables qui vont servir à contenir des règles de filtrage
¤ Filter : Cette table permet de filtrer les paquets. Typiquement ce sera pour les accepter ou non.
¤ NAT : Avec cette table, on réalise des translations d'adresse (ou de ports). Ceci sera notamment utile pour partager une connexion.
¤ Mangle : Elle sert pour modifier les en-têtes des paquets. On la rencontrera parfois pour marquer des paquets afin que d'autres applications puissent les reconnaître.
Définition : Chaîne
A l'intérieur d'une table, on peut trouver plusieurs chaînes. Ce sont elles qui contiendront les règles à appliquer aux paquets. Ces règles seront évaluées séquentiellement. On trouve 5 types de chaînes.
¤ PREROUTING (nat, mangle) Par cette chaîne passeront les paquets entrant dans la machine avant routage.
¤ INPUT (filter) Cette chaîne traitera les paquets entrants avant qu'ils ne soient passées aux couches supérieures (les applications).
¤ FORWARD (filter) Ce sont les paquets uniquement transmis par la machine sans que les applications n'en aient connaissance.
¤ OUTPUT (filter, nat, mangle) Cette chaîne sera appelée pour des paquets envoyés par des programmes présents sur la machine.
¤ POSTROUTING (nat) Les paquets prêts à être envoyés (soit transmis, soit générés) seront pris en charge par cette chaîne.
Définition : Cible
Il s'agit du traitement que l'on décide d'appliquer au paquet. C'est la cible qui se chargera de faire les opérations nécessaires. En plus de celles prédéfinies, il est possible d'indiquer comme cible une chaîne utilisateur. Cela permet d'imbriquer différents tests et traitements.
ACCEPT : Les paquets envoyés vers cette cible seront tout simplement acceptés et pourront poursuivre leur cheminement au travers des couches réseaux.
DROP : Cette cible permet de jeter des paquets qui seront donc ignorés.
REJECT : Permet d'envoyer une réponse à l'émetteur pour lui signaler que son paquet a été refusé.
LOG : Demande au noyau d'enregistrer des informations sur le paquet courant. Cela se fera généralement dans le fichier /var/log/messages.
MASQUERADE : Cible valable uniquement dans la chaîne POSTROUTING de la table nat. Elle change l'adresse IP de l'émetteur par celle courante de la machine pour l'interface spécifiée. Cela permet de masquer des machines et de faire par exemple du partage de connexion.
SNAT : Également valable pour la chaîne POSTROUTING de la table nat seulement. Elle modifie aussi la valeur de l'adresse IP de l'émetteur en la remplaçant par la valeur fixe spécifiée.
DNAT : Valable uniquement pour les chaînes PREROUTING et OUTPUT de la table nat. Elle modifie la valeur de l'adresse IP du destinataire en la remplaçant par la valeur fixe spécifiée.
RETURN : Utile dans les chaînes utilisateurs. Cette cible permet de revenir à la chaîne appelante. Si RETURN est utilisé dans une des chaînes de base précédente, cela est équivalent à l'utilisation de sa cible par défaut.
Synthèse
La table Filter
Cette table va contenir toutes les règles qui permettront de filtrer les paquets. Cette table contient trois chaînes :
*la chaîne INPUT.
Cette chaîne décidera du sort des paquets entrant localement sur l'hôte ;
*la chaîne OUTPUT.
Ici, ce ne sont que les paquets émis par l'hôte local qui seront filtrés ;
*la chaîne FORWARD.
Enfin, les paquets qui traversent l'hôte, suivant les routes implantées, seront filtrés ici.
La table NAT
Cette table permet d'effectuer toutes les translations d'adresses nécessaires.
*La chaîne PREROUTING.
Permet de faire de la translation d'adresse de destination. Cette méthode est intéressante si l'on veut faire croire au monde extérieur, par exemple, qu'il y a un serveur WEB sur le port 80 de la passerelle, alors que celui-ci est hébergé par un hôte du réseau privé, sur le port 8080.
*La chaîne POSTROUTING.
Elle permet de faire de la translation d'adresse de la source, comme du masquage d'adresse, la méthode classique pour connecter un réseau privé comme client de l'Internet, avec une seule adresse IP publique.
*La chaîne OUTPUT.
Celle-ci va permettre de modifier la destination de paquets générés localement (par la passerelle elle-même).
La table MANGLE
Cette table permet le marquage des paquets entrants (PREROUTING) et générés localement (OUTPUT). Le marquage de paquets va permettre un traitement spécifique des paquets marqués dans les tables de routage avec IPROUTE 2.