Home > computers > linux > netfilter | About

Netfilter c'est le nom du module du noyau linux qui s'occupe des fonctions de filtrage, routage et QoS réseau.

Iptables est une interface en ligne de commande à netfilter.

Netfilter

Les logiciels parefeu communiquent avec netfilter à l'aide de points d'ancrage (hooks) définis par celui-ci. Il y en a 5 :

  1. NF_IP_PRE_ROUTING
  2. NF_IP_FORWARDING
  3. NF_IP_LOCAL_IN
  4. NF_IP_LOCAL_OUT
  5. NF_IP_POST_ROUTING

Chacun de ces points d'ancrage représente un stade de la traversée du packet dans netfilter, depuis sa récupération depuis l'interface réseau jusqu'à sa livraison à l'application concernée, ou depuis l'application émitrice du paquet jusqu'à l'interface réseau.

Les noms utilisés dans le diagram se rapprochent beaucoup de ceux définit par netfilter. Ce sont en réalité les chaines built-in de iptables qui correspondent aux points d'ancrages listés plus haut.

iptables

iptables permet de définir des règles à appliquer aux paquets (basically accepter, rejeter ou rediriger) pour ces différents stades. Pour cela, il regroupe les règles en chaines : des chaines PREROUTING, des chaines FORWARDING, des chaines INPUT etc. Chaque chaine sera appelée au moment opportun. Elles regroupent les règles par stade.

Les chaînes sont à leur tour stockées dans des tables : la table filter, la table nat, la table mangle etc. Les tables regroupent les chaînes par fonction (nat = routage, fiter = filtrage, mangle = qualité de service etc.)

A n'importe quel stade donné, il peut donc y avoir plusieurs chaines de règles qui seront appelées, selon leurs fonctions. Si c'est le cas, elles seront appelées par ordre de priorité. Cet ordre est défini par le firewall au moment où il enregistre ses fonctions aux 5 points d'ancrages définis par netfilter que nous avons vu plus haut (NF_IP_*) .

Par exemple, la table nat et la table filter possèdent toutes deux des chaines OUTPUT pour le point d'ancrage NF_IP_LOCAL_OUT. On pourra donc appliquer des transformation d'addresse ou de port sur le paquet (chaine OUTPUT de la table nat) puis décider si le paquet doit sortir ou pas (chaines OUTPUT de la table filter).

Rôle de chaque table

  • filter : comme son nom l'indique, va regrouper les chaines de règles qui concernent le filtrage des paquets (j'accepte, je refuse)
  • nat : elle porte bien son nom puisqu'il s'agit de regrouper ici les chaines effectuant des opérations de NAT (changer le port, changer l'IP)
  • mangle : contiendra les chaines qui changeront le TTL ou d'autres aspects jouant sur le QoS d'une connexion
  • raw : contiendra les chaines qui permetteront de marquer les paquets que l'on ne souhaite pas surveiller (les paquets sont surveillés par le framework conntrack de netfilter, et il n'y a aucun moyen, à part cette table, pour changer quoi que ce soit à conntrack). Ils seront alors vus comme de simples paquets, éparses, solitaires, au lieu de paquets faisant partie d'une connexion en cours, bien identifiée.
  • security : contiendra des chaines spécifiques à SELinux et permettent de faire de l'ACL avancé (Mandatory Access Control ou MAC, Discretionary Access Control ou DAC).

Traversée d'un paquet dans netfilter

Quand un paquet traverse netfilter, celui-ci va appeler à chaque stade les fonctions enregsitrées via les hooks. Quand iptables reçoit un appel de netfiler pour un stade donné, par exemple NF_IP_LOCAL_IN, il va consulter toutes les tables concernées par ce stade (mangle, nat, filter et security) et executer les règles contenues dans la chaine INPUT de chacune de ces tables, et ainsi de suite pour chaque stade de traversée du paquet dans netfilter.

Etats d'une connexion

Quand un paquet sort, la connexion dont il fera partie est marquée comme NEW au moment du OUTPUT. Quand on reçoit une réponse à ce paquet, la connexion est marquée comme ESTABLISHED au moment du PREROUTING. Le framework conntrack est donc concerné uniquement par ces deux chaines, sauf s'il y a également des règles dans la table raw, consultée juste avant, qui indiquent qu'on ne veut pas suivre le packet. Dans ce cas conntrack n'agit pas sur le paquet.

Les paquets peuvent également être marqués comme INVALID lorsqu'ils n'appartiennent à aucune connexion connue et qu'ils ne sont pas des paquets destinés à commencer une nouvelle connexion, ou RELATED lorsque ce sont des paquets qui ouvrent une nouvelle connexion (comme NEW) mais qui sont liés à une connexion antérieur, comme c'est le cas pour FTP qui utilise deux ports : l'un pour le transfert des commandes, et l'autre pour le transfert des données. Quand j'envoi un SEND, la machine distante va ouvrir une nouvelle connexion sur le port de transmission de données qui sera donc marquée RELATED. conntrack sait reconnaître les connexion RELATED pour les protocoles suivants :

  1. FTP / TFTP
  2. Amanda backup
  3. H.323
  4. IRC
  5. NetBIOS Name Service
  6. PPtP
  7. SANE
  8. SIP

—-

contact : @ychaouche yacinechaouche at yahoocom


QR Code
QR Code Netfilter (generated for current page)