Virtualisation xen advanced
From UnixWiki
Contents |
[edit] Compilation du noyau
[edit] préparation à la compilation
Le projet Xen est fournit avec un noyau standard pour pouvoir mettre en place rapidement la virtualisation. Cependant, il se peut que les paramètres de compilation de ce noyau ne corresponde pas à votre configuration. Le problème le plus typique que l'on rencontre lorsqu'on utilise un noyau précompilé est le manque de certains drivers en rapport avec le matériel. Dans ce cas, il sera nécessaire de recompiler les deux noyaux: celui du système hôte (vmlinuz-xen0) et celui du système invité (vmlinuz-xenU).
Même si ces deux noyaux sont issus à priori des mêmes sources, ils comporteront obligatoirement des options de compilation différentes, tout du moins celles qui sont relatives à la technologie Xen. De plus le noyau du domU faisant appel aux ressources du dom0, il ne contiendra que des drivers fictifs pour les ressources tels que le réseau. Un seul driver réseau sera nécessaire sur le domU, alors que le dom0 sera compilé pour tenir compte de la configuration matérielle, comme on l'aurait fait pour compiler un noyau sans xen.
Habituellement, lorsqu'on souhaite compiler un noyau modifié, la manipulation consiste à décompresser les sources du noyau officiel, à appliquer le patch, à choisir les options, puis à lancer la compilation. Si vous récupérez les sources officielles de Xen, vous devrez utiliser une procédure différente, et nous recommandons de suivre rigoureusement les instructions fournies par les développeurs. Un fichier README se trouvant dans la racine des sources fournies donne la liste des étapes à suivre.
Il existe cependant une façon de se ramener à une méthode de compilation du noyau tout à fait classique. Les développeurs de la distribution Gentoo ont écrit des scripts ebuild (les scripts qui sont à la base du système de gestion du packages de gentoo). Ces scripts génèrent un arbre des sources du noyau linux modifiées pour la technologie Xen, comme si on avait appliqué un patch. Pour obtenir ces sources, il faut lancer la commande suivante:
echo "sys-kernel/xen-sources" > /etc/portage/package.unmask ACCEPT_KEYWORDS="~x86" emerge sys-kernel/xen-sources
Le package étant masqué à l'heure de la version 3.0.0 de xen, il est nécessaire de dire à l'outil emerge qu'il faut ignorer ce marquage en ajoutant le nom du package dans le fichier package.unmask, et définir la macro ACCEPT_KEYWORDS.
Pour ceux qui veulent utiliser la méthode de compilation traditionnelle du noyau, j'ai préparé un patch qui s'applique pour ajouter le support de Xen-3.0 aux sources de linux-2.6.12.6. Il est basé sur les sources de xen qui sont disponibles quotidiennement, et qui permettent de bénéficier des dernières corrections de bugs. Le patch est disponible à l'adresse suivante: http://www.knutefla.info/download/xen/
Précisons que cette opération nécessite beaucoup de place. A titre informatif, la compilation des outils et des deux noyaux pour xen-3.0.0 a occupé 487 Mo sur mon disque.
Cette option nécessite naturellement de disposer des outils de développement sur votre système Linux (gcc, make, binutils, ...) ainsi que des paquets suivants: libcurl-dev, zlib-dev, python-dev en version 2.2 au supérieure.
Il se peut aussi que vous rencontriez des erreurs de compilation signalant qu'un fichier d'en-tête (fichier d'extension .h) est manquant. Dans ce cas, il est probable que certains packages de votre distribution ne soient pas installés. Généralement, un paquet du type package-dev.deb est absent, alors que le paquet package.deb est bien présent.
[edit] étapes de la compilation
Voici les étapes à suivre pour compiler le noyau pour xen, et les programmes associés faisant partie du projet:
- Téléchargez le fichier xen-3.0.0-src.tgz sur le site officiel
- Décompressez ce fichier dans /usr/src de préférence
tar xfzp xen-3.0.0-src.tgz -C /usr/src
- Supprimer les dossiers correspondants aux architectures qui ne vous intéressent pas, dans le dossier que vous venez de décompresser (les dossier de netbsd et freebsd)
- Il faut d'abord compiler le tout une première fois, avec les paramètres par défaut. Cette opération prend pas mal de temps, et cela lancera le téléchargement des sources officielles du noyau qui seront ensuite modifiées par les scripts. Lancez ces deux commandes:
make world make install
- Les fichiers compilés se trouvent dans le sous dossier dist du dossier des sources de xen. Il s'agit du dossier qui est fourni lorsqu'on télécharge la version précompilée de xen.
Il va maintenant falloir personnaliser la configuration des noyaux:
- Placez-vous dans le dossier du noyau du système hôte, et lancez le programme qui vous permettra de choisir les options:
cd linux-2.6-xen0 make ARCH=xen xconfig
Si vous ne souhaitez-pas travailler en mode graphique, remplacez xconfig par menuconfig dans la ligne précédente.
- Faites de même avec le noyau des systèmes invités:
cd linux-2.6-xenU make ARCH=xen xconfig
- Pour lancer la compilation de l'ensemble des sources, placez vous dans la racine du dossier des sources de xen, et tapez les deux commandes suivantes:
make world make install
A la fin de la compilation, vous trouverez dans le dossier "dist" les deux noyaux compilés, et tous les fichiers faisant partie du projet xen (scripts, fichiers de configuration, ...) que l'on trouve dans la version précompilée fournie en téléchargement sur le site officiel.
[edit] Sécuriser des systèmes xen
[edit] Sécurité réseau
Beaucoup de personnes utilisent Xen pour sécuriser au maximum leur réseau. La virtualisation permet d'enfermer chaque serveur dans un domU, afin que le piratage d'un service (ex: le serveur de mails) ne permette pas au pirate d'avoir la main sur tous les autres services.
Il faut donc avoir en rête que la sécurité sur le système hôte est primordiale. En effet, un individu qui aurait la main sur dom0 pourra alors faire ce qu'il veut sur tous les domU. C'est pour cette raison qu'il faut impérativement sécuriser fortement le dom0. Il est donc impératif d'ouvrir le minimum de ports sur le dom0, et d'installer le minimum de logiciels. Rappelons que chaque port ouvert, et chaque service installé est une chance de plus, du point de vue du pirate, pour s'introduire sur le système.
Voici une suggestion pour un système sécurisé: le système hôte fera partie de deux sous réseaux: celui en rapport avec le monde extérieur (disons 192.168.0.0/24) et le réseau sur lequel seront connectés sous les invités (192.168.1.0/24). L'hôte disposera de deux interfaces principales, une pour chaque sous réseau. L'interface réelle eth0 permettra de communiquer avec le réseau 192.168.0.0 et l'extérieur. En revanche, le pont sur lequel seront reliées toutes les interfaces vifx.y appartiendra au réseau 192.168.1.0.
Arbitrairement, on peut fixer les adresses 192.168.0.1 et 192.168.1.1 à dom0, qui jouera le rôle de routeur entre les deux sous réseau. Il faudra donc installer iptables, s'assurer que le noyau de dom0 est compilé avec les modules de filtrage de netfilter, et écrire les règles pour gérer le trafic. La chaîne INPUT devra être la plus restrictive possible, pour réduire les chances qu'aura un pirate de s'introduire sur le système hôte. De plus, la chaîne FORWARD assurera le filtrage des paquets qui atteindront les systèmes invités.
Nous ne rentrerons pas dans les détails de l'utilisation d'iptables pour filtrer le trafic du réseau. Pour cela, il existe des tutoriels et des livres très complets.
[edit] Sécurité des données
Pour sécuriser l'accès aux données, vous pouvez commencer restreindre les accès des partitions aux domU. Ainsi, chaque système invité pourra être installé sur une seule partition, et sera le seul à y avoir accès. Si certaines données ne sont pas amenées à évoluer, vous pouvez les isoler sur une partition indépendante, et y donner l'accès à un invité en lecture seule. Ainsi n'importe quelle intrusion sur ce système hôte ne permettra jamais à l'individu de modifier les données.
Vous pouvez aussi jouer sur les systèmes de fichiers pour sécuriser l'accès aux partitions. En effet, vous pouvez installer vos fichiers sur une partition au format XFS, et faire en sorte qu'un seul noyau domU supporte le XFS. Comme les autres noyaux utilisés sur les autres systèmes ne supportent pas les partitions au format XFS, vous pouvez être sur qu'ils n'auront pas accès aux fichiers du disque.
