PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

PF pour les nuls | UNIX Garden

lundi 3 mars 2014 à 08:47
CAFAI, le 03/03/2014 à 08:47
Maman, j'ai peur d'internet, y'a que des pirates pédophiles nazis et des blogueurs du web 3.2alpha, ou "comment jouer au videur de boîte de nuit avec les paquets réseau ?". Miam, ça c'est de l'intro !
1. Kessessé ?
1.1 Une petite page d'histoire
PF est né d'une histoire classique dans le monde du Logiciel libre, un problème de licence. A l'origine, OpenBSD utilisait depuis la création du monde (événement connu sous le nom de la-grande-décision-de-théo) un système de firewalling/filtrage nommé "IP Filter" (aka IPF), écrit par Darren Reed [1]. Cependant, un changement [2] [3] [4] dans la licence d'IPF, ainsi que plusieurs désaccords sur son architecture, aboutissent à l'éviction [5] de celui-ci d'OpenBSD peu après la sortie de la version 2.9 de l'OS. Cet événement donna par ailleurs aussi lieu au grand-audit-des-licences-terreuses. OpenBSD se retrouva alors sans système de filtrage de paquets. C'est à ce moment qu'un semi-dieu, nommé Daniel-le-bienveillant (aussi connu sous le surnom de "l'homme aux longs cheveux qui venait du pays des horloges", ou plus communément dhartmei@) entreprit [6] [7] [8], à partir d'un burin, un marteau et un bloc de granit, la création de ce qui allait devenir PacketFilter, un puissant système de filtrage de paquets avec suivi d'états (stateful packet filter) à la syntaxe claire comme de l'eau de roche. PF fut intégré avec la bénédiction de Théo-le-magnifique dans OpenBSD dès la version 3.0, et depuis a été porté dans la douleur [9] sur NetBSD 2.0, et a aussi remplacé [10] IPF dans FreeBSD à partir de la version 5.3 et dans DragonFlyBSD à partir de la version 1.2. PF roulaize over da world et oune IPF. Oups, désolé, je m'emporte, refermons la page historique ici.
1.2 Alors donc, ça fait quoi cet engin ?
PF est donc un filtre de paquets réseau fonctionnant en espace noyau, c'est-à-dire qu'il se place au niveau de la pile réseau et inspecte tous les paquets entrants et sortants de la machine, et en fonction de règles de filtrage va prendre la décision de :

   bloquer silencieusement le paquet (dans l'espace, personne n'entend les air-lutins crier) ;
   rejeter le paquet en envoyant un TCP RST à l'expéditeur (j'ai dit : "PAS DE BASKETS @#!") ;
   laisser passer le paquet, en le marquant éventuellement au fer rouge pour post-traitement (Alors ça j'y mets là, ça j'y colle ici..).

PF utilise en plus de ce filtrage une table d'états des connexions établies, permettant de laisser passer les paquets d'une connexion existante sans qu'aucun traitement ne leur soit appliqué. Cette table permet aussi de faire des vérifications sur les numéros de séquence TCP, de vérifier qu'un ICMP echo reply correspond à un ICMP echo request... Enfin, PF permet aussi (oui, madame Michu, ce n'est pas tout) de faire de la NAT (-ation *dzim-boum* calembour "- -" Mat`). Vous en aviez rêvé, vous allez pouvoir partager votre connexion internet avec tout votre réseau local en faisant de la traduction d'adresses (oui, je sais, ça vient de mon réseau local en adresse privée, mais il faut que ça aille fissa vers le grand nain Ternet et que ça revienne aussi vite à son maî-maître), faire de la redirection de ports, séduire votre voisine (hep, chérie, t'as vu tous les poils que j'ai mis dans cette règle de filtrage ? HaoOOon whoaaaa, prends-moi toute !!) et bien d'autres choses encore... Pour faire tout cela, PF utilise un simple fichier texte pour sa configuration, par défaut /etc/pf.conf. Ce fichier contient une liste de règles. Nous reviendrons sur sa syntaxe après un intermède trollifère.
(Permalink)