Loadbalancing et qualité de service
Équilibrage de charge
1. Comment optimiser le trafic ?
Afin de sécuriser la totalité d’une infrastructure, il est possible de filtrer les adresses IP sources et destinations, ainsi que les ports de protocoles de communication sous-jacents, des différents trafics UDP et TCP. À cet égard, nous aurons recours à un routeur pare-feu, capable de restreindre les connexions simultanées, selon des règles fixées par le système d’exploitation initial. Parmi les logiciels évolués de sécurité, il existe une suite logicielle qu’il est important ici de détailler : pfsense, issue du monde FreeBSD, existant au format ISO et permettant d’effectuer le type de filtrage mentionné ci-dessus. Cet outil renforce encore plus la politique de sécurité de l’entreprise, car il favorise l’utilisation de fonctions d’une très grande étendue, à l’aide d’une interface très intuitive et d’une grande souplesse. Parmi les nombreuses fonctionnalités de cet outil, il en est une qui nous intéresse tout particulièrement : l’équilibrage de charge, parfois aussi appelé la répartition de charge ou loadbalancing. Cela consiste à distribuer une tâche à un pool de machines en cluster ou de périphériques permettant de :
-
Lisser le trafic réseau en répartissant la charge globale vers différents équipements.
-
S’assurer de la disponibilité des équipements, en n’envoyant les données qu’aux équipements en mesure de répondre (ou à ceux offrant le meilleur temps de réponse).
Ce type de mécanisme s’appuie sur un élément, appelé répartiteur de charge (ou loadbalancer), chargé de distribuer le travail entre différentes machines. Il existe plusieurs méthodes pour mettre en œuvre ce genre de fonction :
-
via un commutateur de niveau 4
-
via un serveur utilisant un algorithme de type round-robin
C’est cette seconde option qui nous intéressera dans la suite de ce chapitre. Il s’agit en effet de mettre en relation le trafic LAN d’entreprise, avec un double canal de communication vers l’extérieur...
Configuration de pfsense
1. Configuration de base
Lorsque les fonctionnalités ont été définies, il doit être possible de se connecter à l’adresse d’accès pfsense, mentionnée précédemment, via un navigateur comme Firefox, Safari ou Iceweasel, en ayant au préalable modifié, comme décrit ci-dessus, l’adresse IP.
La première chose que l’utilisateur visualise est le choix de contrat de licence. En effet, par défaut, pfsense autorise une interconnexion au Cloud afin d’effectuer des sauvegardes de dix postes (ou dix machines, de façon générale). Cette capacité peut être étendue en optant pour le contrat Gold, dont le lien est surligné ci-dessous :
Passé cet écran, les choses sérieuses commencent véritablement. Il faut saisir le nom de la machine pfsense, son domaine ainsi que le (ou les) nom(s) de serveur(s) DNS :
ATTENTION : pour certaines configurations, l’option cochée ici autorisant les serveurs de noms à modifier les enregistrements DHCP doit être décochée. En effet, cela peut provoquer des conflits, car d’un point de vue fonctionnel le DNS des clients n’est plus celui du routeur pfsense, mais un autre, inaccessible depuis l’interface réseau LAN présentée ici.
Ensuite, nous renseignerons le nom du serveur de temps fournissant la référence officielle d’horodatage aux autres équipements du réseau. Cela consiste alors à remplacer la valeur proposée, par défaut ci-dessous, par celle correspondant au serveur NTP de l’entreprise :
2. Configuration d’interface réseau
Vient alors le moment de configurer l’interface WAN afin de fournir une adresse DHCP d’entreprise à ce point d’entrée :
En théorie, il faut alors modifier aussi l’interface LAN. Cependant, celle-ci ayant déjà été modifiée par nos soins précédemment, passons directement à la suite de la configuration. Dans le cas où cela n’aurait pas été fait, il faut également fournir une adresse de contact pour l’interface réseau Local Area Network, par exemple en réutilisant la même...
Sécurisation de pfsense
1. Déploiement d’un tunnel VPN site-à-site
Un VPN (ou Virtual Private Network) de site-à-site (également nommé LAN-to-LAN) est un tunnel permettant de joindre deux réseaux de type LAN distants, de sorte qu’ils puissent communiquer entre eux, comme s’ils étaient sur le même brin réseau, simplement séparés par un routeur. Ce genre de fonctionnalité réseau se trouve lorsqu’il s’agit de relier des agences d’une même filiale, ou entre différents sites d’une même entreprise. Le tunnel VPN est alors tracé au travers d’Internet afin de joindre les deux réseaux tout en sécurisant les flux via un chiffrement. Avec un outil comme pfsense, cela devient facile de connecter deux sites routeurs via les interfaces externes des deux sites déclarés dans le pool :
Ainsi, chacun des serveurs pfsense disposera d’une interface WAN (192.168.1.0/24) et d’une interface LAN (172.16.X.0/24) afin que les clients des deux plateformes puissent communiquer entre eux, au travers de ce tunnel. Pour configurer le premier serveur (d’après l’exemple, 172.16.1.10), ouvrir le menu VPN - IPSec, pour autoriser le flux IPSec :
Cocher alors la case Enable IPSec et sauvegarder. Nous devons, à partir de là, cliquer sur le bouton d’ajout d’une nouvelle configuration IPSec, demandant de compléter un certain nombre d’options. Comme l’intérêt réside ici dans le fait de créer un tunnel VPN simple, nous nous contenterons de renseigner l’adresse IP du partenaire VPN (il s’agit de l’adresse WAN de l’autre plateforme pfsense : 192.168.1.12), ainsi qu’une description :
Dans la seconde partie de cette fenêtre, nous remplirons seulement le champ Pre-Shared-Key, en ayant pris soin de sélectionner la valeur Mutual PSK pour le champ Authentication method :
Nous pouvons également en profiter pour sélectionner l’algorithme de chiffrement (dont la valeur par défaut proposée par l’assistant est 3DES en 112 ou 168 bits), l’algorithme de hachage (par défaut, il s’agit de SHA1) et le groupe Diffie Helmann. Ceci dit, pour une utilisation simple, les valeurs proposées...
Qualité de service
1. Généralités
Dans le monde de la haute disponibilité et de la virtualisation, il existe un dernier aspect à traiter, pour balayer la totalité de l’éventail des fonctionnalités et disposer de l’ensemble des possibilités liées aux clusters et autres machines virtuelles : la qualité de service. Depuis la version 2.2 du noyau, Linux supporte la qualité de service. On trouve cette notion généralement abrégée en QoS (pour l’abréviation anglo-saxonne Quality of Services). Cela désigne la capacité d’un serveur (ou d’un ensemble de serveurs, dans le cas d’un cluster), à fournir ou distribuer un service, en conformité avec des exigences spécifiées et réglementées :
-
temps de réponse
-
bande passante
Ce mode de fonctionnement s’applique essentiellement aux réseaux à commutation de paquets (c’est-à-dire sur des réseaux utilisant des routeurs), et permettant alors de garantir un niveau acceptable de perte de paquets de façon contractuelle, pour un usage bien précis : voix sur IP, vidéoconférence, Fibre Channel sur IP...
Ce type de réseau est évidemment à opposer aux réseaux à commutation de circuits comme les réseaux téléphoniques commutés où un circuit dédié à la communication perdure durant la totalité d’une conversation. Sur Internet, il n’est pas possible de prédire le chemin qui sera emprunté par les différents paquets.
Mais on peut se demander ce qu’est un niveau de service acceptable et comment le définir. Cette notion (Service Level en anglais) permet de décrire le niveau d’exigence vis-à-vis de la capacité d’un réseau à distribuer un service de point à point selon un trafic précisé. De ce fait, trois niveaux de QoS sont à distinguer :
-
Meilleur effort (ou best effort) : aucune distinction entre les différents flux du réseau et ne garantissant rien à ce niveau. On appelle cela également le Lack of QoS.
-
Service différencié (aussi appelé differenciated service ou soft...
Intégration d’un bac à sable
1. Le sandbox
Lorsque l’on travaille sous GNU/Linux et que l’on est amené à installer un certain nombre d’outils et d’applications, il peut s’avérer utile d’empêcher ceux-ci, de diffuser de l’information vers l’extérieur, tout particulièrement lorsqu’on utilise un navigateur (quel qu’il soit : Firefox, Chromium, IceWeasel, ou autres). En effet, comment se protéger des failles du navigateur lui-même ? Lorsqu’une telle erreur de conception est découverte, n’importe qui peut alors limiter ou empêcher l’exécution des processus donnant l’accès aux données et aux ressources demandées par l’utilisateur. Pourtant, ce type de protection est supporté par la couche noyau du système : Linux. Lorsque l’on a parlé précédemment des mécanismes proposés par le noyau Linux permettant d’isoler les processus, tout en restreignant l’accès aux ressources afin de créer des containers, on peut se servir de ce même principe pour créer ce que l’on appelle "un bac à sable" (aussi appelé sandbox). Ainsi, l’utilisateur pourra travailler en toute sérénité sans sortir de son aire de jeu, et surtout sans se préoccuper des autorisations préalables. Pour comprendre comment cela fonctionne, il faut revenir au temps des premiers processeurs qui ne permettaient de faire fonctionner qu’un seul programme. Ce dernier disposait alors de l’intégralité des ressources de la machine ainsi que de la totalité de la mémoire vive présente. Puis, très rapidement, les processeurs sont montés en puissance et en gammes, permettant de fait, l’amélioration de la rapidité d’exécution. On a alors pu faire exécuter en parallèle plusieurs segments de programmes distincts. Cela donnait l’impression alors que les programmes tournaient en même temps. Seulement, dans ce genre de modèle, tous les programmes du système partagent le même espace mémoire et peuvent, de fait, "polariser" la mémoire et modifier le fonctionnement d’un autre programme...