Code & Systèmes Libres
netfilter

Introduction

netfilter est un sous-ensemble du noyau de GNU/Linux qui permet d'interagir sur le traffic réseau (IP, TCP, UDP et ICMP). Ces interactions peuvent être :

  • du filtrage
  • de la translation d'adresse, de port
  • de l'alteration de paquets

Pour mettre en oeuvre ces mécanismes, netfilter définit plusieurs concepts :

  • QUAND?
    • Les tables
    • Les chaines
  • QUI?
    • Les règles
  • QUOI?
    • Les actions

En substance, on peut distinguer trois ensembles, les tables et les chaines, les règles, et enfin, les actions.

Les tables et les chaines

Les tables

Elles correspondent à des classes de traitements que l'on peut effectuer sur les paquets IP. Lorsqu'on parametre netfilter, le choix de la table permet de déterminer le type d'action qu'on désire effectuer. Et c'est le choix de la chaine qui va déterminer le moment ou cela doit se passer. Il existe trois tables.

filter

Accepter ou rejeter un paquet.

nat

Modifier l'adresse/port source/destination d'un paquet.

mangle

Modifier des flags d'un paquet, ou le marquer.

Les chaines

Lorsqu'un paquet IP est pris en charge par le noyau, il effectue un voyage dans les pilotes de cartes réseaux, dans la pile IP, voir, dans les applications qui le traitent. netfilter définit pour chaque table un certain nombre de points de passage pertinents où il est possible d'examiner un paquet, afin de le filtrer/modifier.

Ces points de passage, ce sont les chaines. Pour chaque table, il existe un certain nombre de chaines de base qui representent autant de points de passage :

ChaineDescriptionUsage typique
PREROUTINGLe paquet est pris en charge par l'interface réseau. Il s'apprete à être routé. 
INPUTLe paquet est destiné à l'hôte sur lequel nous définissons les règles. Il nous est destiné. 
FORWARDLe paquet ne nous est pas destiné, et nous sommes une passerelle. 
OUTPUTLe paquet est émis par nous. 
POSTROUTINGLe paquet s'apprete à sortir par l'interface réseau. 

Pour des raisons plutôt pertinentes (qui ont la facheuse tendance à s'imposer à l'utilisateur avec le temps), toutes ces chaines ne sont pas disponibles dans toutes les tables. Par exemple, en pratique, il est peu utile de faire de la translation d'adresse (avec la table nat) dans la chaine FORWARD, PREROUTING et POSTROUTING semblent plus pertinentes. Aussi, la chaine FORWARD est indisponible dans la table nat. Ce n'est pas une limitation, mais... une fonctionnalité!

Voici la correspondance entre tables et chaines :

  • filter
    INPUT FORWARD OUTPUT
  • nat
    PREROUTING OUTPUT POSTROUTING
  • mangle
    PREROUTING INPUT FORWARD OUTPUT POSTROUTING

Petite pause

netfilter fonctionne à l'aide de tables et de chaines. Ce sont deux concepts qui permettent de déterminer le moment où l'on souhaite intervenir sur un paquet. Parler d'une table en particulier (comme nat) donne des informations sur le type de traitement qu'on peut être amené à effectuer sur ce paquet. Parler en plus de la chaine POSTROUTING donne encore plus d'informations sur ce type de traitement. Mais ce ne sont que des indications, qu'avec l'experience on peut imaginer.

Les règles

iptables

iptables est un utilitaire qui permet de parametrer netfilter.

iptables [-t table] commande chaine [discriminant] [action]

Références

Valid HTML 4.01!Valid CSS!