Un pare-feu a pour but de faire respecter des politiques de sécurité réseau, à travers un ensemble de règles. Par exemple, les flux de données entre Internet et un réseau de consultation peuvent être contrôlés. La mise en place d’un tel dispositif joue un rôle crucial pour la sécurité d’un réseau. En effet, un pare-feu permet d’interdire les connexions définies comme illégitimes, tout en laissant passer les autres.
Pour cela, un pare-feu analyse les adresses IP et les ports. En fonction des règles de filtrage enregistrées, il autorisera, ignorera ou rejettera les paquets qui transitent. Un pare-feu n’offre cependant pas une sécurité absolue sur les flux en transit. Plusieurs autres éléments sont nécessaires pour couvrir l’ensemble des risques (antivirus, serveur mandataire, détecteurs d’intrusion, bon comportement des utilisateurs, etc.).
Historiquement, on considère le comportement du pare-feu comme statique. Les règles de filtrage sont définies, chargées et évaluées les unes après les autres dans l’ordre défini par l’administrateur. La modification d’une règle ou un changement d’ordre nécessite souvent de décharger toutes les règles enregistrées pour les recharger avec les modifications. Cela implique une charge de traitement très lourde pour le pare-feu.
Dans le cas de la protection d’un réseau de consultation Internet, cette lourdeur de gestion se traduit par le fait que chaque règle s’applique à l’ensemble des équipements connectés (exemple : une règle interdit les protocoles P2P pour l’ensemble du réseau de consultation). Avec un pare-feu dynamique, l’objectif serait d’attribuer des règles de filtrage différentes pour chaque adresse IP d’équipement utilisateur.
Pour mettre au point ce système, j’ai utilisé le projet ALCASAR (www.alcasar.net). ALCASAR (Application Libre pour le Contrôle d’Accès Sécurisé et Authentifié au Réseau) est un contrôleur d’accès au réseau libre, sous licence GPLv3, exploitant la distribution GNU/Linux Mageia. Il s’agit d’un portail permettant de sécuriser l’accès à un réseau, en authentifiant, traçant et imputant les connexions des utilisateurs.
Comment rendre un pare-feu dynamique ?
À partir d’un pare-feu statique, la solution serait d’insérer en début de liste, des règles spécifiques à chaque adresse IP d’équipement utilisateur. En fonction du nombre d’utilisateurs, la surcharge du nombre de règles augmente le temps de traitement du pare-feu jusqu’à le rendre incompatible avec sa fonction.
Fort heureusement, depuis sa version 2.6.39, le noyau Linux intègre les « IP SETS ». Un « IP SET » est une sorte de tableau stocké en mémoire vive dans lequel il est possible d’insérer ou de supprimer très facilement des adresses IP (v4/v6), des numéros de port, des paires d’adresses IP et d’adresses MAC, etc. Ces SETS peuvent être manipulés en espace utilisateur (par scripts, programmes, automates, etc.) et ils sont directement exploitables au sein des règles du pare-feu.
En exploitant cette nouveauté, il devient possible de créer par exemple un SET « liste_noire » dans lequel seront stockées les adresses IP des sites à filtrer ainsi qu’un SET « liste_blanche » dans lequel seront stockées les adresses IP des sites autorisés. Trois SETS supplémentaires sont créés afin d’instaurer des niveaux de filtrage pour les usagers :
1. utilisateurs_non_filtres : pour les usagers ayant accès à tous les sites
2. utilisateurs_liste_noire : pour interdire certains sites aux usagers
3. utilisateurs_liste_blanche : pour n’autoriser que certains sites aux usagers
Le principe est le suivant : on répartit les utilisateurs du réseau de consultation dans un des trois SETS en fonction du niveau de filtrage qu’on leur a fixé. Les règles à ajouter dans le pare-feu ne traitent alors plus que des SETS contenant les adresses IP des utilisateurs de cette façon, on dirige chaque SET vers le chemin souhaité :
autoriser tout le trafic pour le SET utilisateurs_non_filtres
bloquer l’accès à un site si un usager du SET utilisateurs_liste_noire demande l’adresse IP d’un site présent dans le SET liste_noire sinon autoriser la connexion
bloquer l’accès à un site si un usager du SET utilisateurs_liste_blanche demande l’adresse IP d’un site non présent dans le SET liste_blanche sinon autoriser la connexion
Une fois ces règles en place, il est nécessaire d’ajouter les adresses IP des utilisateurs qui se connectent au réseau de consultation dans le bon SET en fonction de leur niveau de filtrage, et de supprimer des SETS les utilisateurs qui se déconnectent. De cette manière, il est possible de faire cohabiter des usagers avec des niveaux de filtrage différents au sein d’un même réseau de consultation et d’un même pare-feu.
Chaque utilisateur sera aiguillé vers le niveau de filtrage qui lui correspond. Ce niveau étant défini par l’administrateur lors de la création des comptes.
Conclusion : Grâce aux SETS, il est maintenant possible de rendre un pare-feu dynamique sans pour autant le surcharger de règles spécifiques à chaque utilisateur. Les SETS sont aiguillés vers le filtrage qui leur est destiné. Les adresses IP des utilisateurs sont supprimées ou ajoutées dans les SETS correspondant, respectivement lors de leur connexion ou déconnexion. Nous obtenons ainsi un gain de fonctionnalité sans contrainte sur la réactivité du pare-feu.