Vous êtes ici : Accueil / Debian GNU/Linux / Système / Xen / Configurer xen-tools sur Debian

Configurer xen-tools sur Debian

Par Pierre-Yves Landuré Dernière modification 19/01/2014 14:17

xen-tools est un outil de création automatisée de domU Xen. Cet article met en place un modèle de domU proposant la sauvegarde avec Backup Manager, l'accès SSH facilité et la mise en place d'une sécurité minimale.

Ce guide est testé sur:

  • Debian 6.0 Squeeze
  • Debian 7.0 Wheezy

Prérequis

Ce guide nécessite:

Paramètres

Récupérez l'adresse IP du dom0. Dans une configuration en mode NAT, l'adresse est imposée à 10.0.0.127, mais dans le cas d'une configuration en mode Bridge, l'adresse IP de l'interface physique (ici eth0) est utilisée:

MAINDOM_IP="10.0.0.127"
if [ $(command grep "^[^#]*bridge" '/etc/xen/xend-config.sxp' | command wc --lines) -gt 0 ]; then
  MAINDOM_IP="$(command ifconfig eth0 | command grep "inet " | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"
fi

Vérifiez l'adresse IP détectée:

command echo "L'adresse IP de ce serveur pour les DomU est : ${MAINDOM_IP}"

Remarque : Si l'adresse obtenue n'est pas correcte, renseignez une valeur correcte :

MAINDOM_IP="192.168.1.5"

Installation

Préparation de l'environnement

Installez les logiciels nécessaires:

command apt-get install xen-tools

Créez l'interface dummy0 si nécessaire:

if [ -z "$(command ifconfig | command grep "${MAINDOM_IP}")" ]; then
MAINDOM_RANGE="$(command echo ${MAINDOM_IP} | command sed -e 's/\(.*\)\.[0-9]*/\1/')"
command modprobe dummy
command echo "dummy" >> '/etc/modules'
command echo "
# Xen main interface.
auto dummy0
iface dummy0 inet static
address ${MAINDOM_IP}
netmask 255.255.255.0
network ${MAINDOM_RANGE}.0
broadcast ${MAINDOM_RANGE}.255" \
  >> '/etc/network/interfaces'
command ifup dummy0
fi

Préparation de l'architecture de sauvegarde

Ce guide propose une architecture de sauvegarde basée sur Backup Manager. Les machines virtuelles (domU) rapatrient les sauvegardes dans le dossier " /var/archives" de la machine hôte (dom0). Assurez-vous de l'existence de ce dossier:

command mkdir --parents '/var/archives'
command chown root:backup '/var/archives'
command chmod ug+rwx '/var/archives'

Configurez Backup Manager pour que le dossier '/var/archives' soit ouvert aux machines virtuelles, et que les archives des domU soient purgées en même temps que celles du dom0

command sed -i -e 's/[#]*\(.*BM_REPOSITORY_GROUP=\).*$/\1"backup"/' \
            -e 's/[#]*\(.*BM_REPOSITORY_CHMOD=\).*$/\1"770"/' \
            -e 's/[#]*\(.*BM_ARCHIVE_STRICTPURGE=\).*$/\1"false"/' \
         '/etc/backup-manager.conf'

Créez l'utilisateur xen-backup utilisé par les domU pour uploader les sauvegardes dans le dom0:

command adduser --system --shell '/bin/sh' --home '/var/lib/xen-backup' --disabled-password 'xen-backup'

Ajoutez l'utilisateur aux groupes backup et ssh-users:

command adduser 'xen-backup' 'backup'
if [ -n "$(command grep 'ssh-users' '/etc/group')" ]; then
  command adduser 'xen-backup' 'ssh-users'
fi

Créez une clef RSA pour l'identification sans mot de passe au compte xen-backup:

command mkdir --parents '/var/lib/xen-backup/.ssh/'
command ssh-keygen -t rsa -C "upgrade account key" -N "" -f '/var/lib/xen-backup/.ssh/id_rsa' command cat '/var/lib/xen-backup/.ssh/id_rsa.pub' \     >> '/var/lib/xen-backup/.ssh/authorized_keys' command chown -R xen-backup:nogroup '/var/lib/xen-backup/.ssh'

Autorisez l'accès au serveur SSH par les domU si Knockd est installé:

SSH_PORT="$(command grep '^Port' '/etc/ssh/sshd_config' \
    | command sed -e 's/^Port[\t ]*//g')"
if [ -e '/etc/network/if-up.d/iptables-ssh-reject' ]; then
  command echo "#"\!"/bin/bash
# Allow SSH access from domU
command iptables -C INPUT ! -s 10.0.0.0/24 -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP > '/dev/null' \\
|| command iptables -A INPUT ! -s 10.0.0.0/24 -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP" \
   > '/etc/network/if-up.d/iptables-ssh-reject'
command chmod +x '/etc/network/if-up.d/iptables-ssh-reject'
while command iptables -D INPUT -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP; do echo; done
/etc/network/if-up.d/iptables-ssh-reject
fi

Configuration du serveur SMTP

Attention: Ce qui suit peut casser la configuration du serveur SMTP du dom0. Si la configuration d'Exim 4 est personnalisée, et que le mode réseau de Xen est NAT,  veillez à ce que le serveur SMTP écoute sur l'adresse 10.0.0.127, et accepte le relai des emails en provenance de 10.0.0.0/24.

 

Configurez le serveur SMTP pour relayer les emails provenant des domUs:

MAINDOM_RANGE="$(command echo ${MAINDOM_IP} | command sed -e 's/\(.*\)\.[0-9]*/\1/')"
command sed -i \
-e "s|dc_local_interfaces=.*\$|dc_local_interfaces='127.0.0.1;${MAINDOM_IP}'|" \ -e "s|dc_relay_nets=.*\$|dc_relay_nets='${MAINDOM_RANGE}.0/24'|" \ '/etc/exim4/update-exim4.conf.conf'

Mettez à jour la configuration d'Exim 4:

command update-exim4.conf
/etc/init.d/exim4 restart

Configuration

Assignation d'espace disque

Par sécurité, augmentez à 1Go la taille du Swap des domU créés:

command sed -i -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\11Gb\2/' '/etc/xen-tools/xen-tools.conf'

Remarque : Si vous disposez de peu d'espace disque, vous pouvez diviser par 2 la taille du swap et du root (c'est à dire passer respectivement de 1 Go et 4 Go à 512 Mo et 2 Go):

command sed -i -e 's/^\(size[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\12Gb\2/' \
            -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\1512Mb\2/' \
         '/etc/xen-tools/xen-tools.conf'

Paramètres réseau

Dans le cas où Xen utilise un réseau nat, configurez les paramètres réseau pour la création de machine virtuelles utilisant une adresse IP fixe:

if [ $(command grep '^[^#]*nat' '/etc/xen/xend-config.sxp' | command wc --lines) -gt 0 ]; then
  command sed -i \
-e 's/^[# ]*\(gateway[ ]*=\).*$/\1 10.0.0.128/' \ -e 's/^[# ]*\(netmask[ ]*=\).*$/\1 255.255.255.0/' \ '/etc/xen-tools/xen-tools.conf' fi

Remarque : Dans le cas où Xen utilise un bridge, configurez manuellement les paramètres réseau local dans "/etc/xen-tools/xen-tools.conf".

Utilisation de volumes logiques

Configurez xen-tools pour créer les disques des domU à l'aide de LVM. Détectez le premier groupe de volumes LVM du système:

LVM_VG="$(command vgdisplay \
  | command grep "VG Name" \
  | command head --lines=1 \
  | command cut --characters=25-)"

Ajustez la configuration de l'outil:

command sed -i -e "s/^# \(lvm = \).*/\1${LVM_VG}/" '/etc/xen-tools/xen-tools.conf'

Sélection du noyau

Configurez la détection automatique du kernel utilisé par les domU:

command sed -i -e 's/^\(kernel =\).*\$/\1 \/boot\/vmlinuz-`uname -r`/' \
            -e 's/^\(initrd =\).*\$/\1 \/boot\/initrd.img-`uname -r`/' \
            '/etc/xen-tools/xen-tools.conf'

Correction du problème "clocksource/0: Time went backwards"

Afin d'éviter que les domU deviennent inaccessibles après un redémarrage du Dom0 à cause de l'erreur "clocksource/0: Time went backwards", ajoutez l'option "extra = 'clocksource=xen'" au modèles de configuration des domU:

command sed -i -e "/^on_crash/a\\
\\
# Preventing clocksource/0: Time went backwards\\
extra = 'clocksource=xen'" \
    '/etc/xen-tools/xm.tmpl'

Configuration initiale des domU

Créez un rôle pour mettre en place des domU pré-configurés avec:

  • Installation des paquets locales, sudo, ntp, cron-apt, rkhunter, vim, screen, backup-manager et fail2ban
  • Mises à jour automatisées par lot.
  • Mise en place de l'architecture de sauvegarde avec backup-manager.

Accès sans mot de passe aux domU

Créez une clef RSA pour le compte root du dom0 si vous souhaitez accéder facilement aux comptes root des domU par SSH:

if [ ! -e "${HOME}/.ssh/id_rsa" ]; then
  command ssh-keygen -t rsa -f "${HOME}/.ssh/id_rsa"
fi

Mises à jour par lot

Créez une clef RSA pour l'identification sans mot de passe aux comptes "xen-upgrade" des domU:

command mkdir --parents '/etc/xen-tools/ssh-keys'
command ssh-keygen -t rsa -C "upgrade account key" -N "" -f '/etc/xen-tools/ssh-keys/xen-upgrade-rsa'

Installez l'outil de mise à jour des domU par lot:

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/xen-apt-get' \
    --no-check-certificate --output-document='/usr/bin/xen-apt-get'
command chmod +x '/usr/bin/xen-apt-get'

Mettez à jour l'ensemble des domU actifs avec:

# command xen-apt-get update
# command xen-apt-get upgrade

Mise en place du rôle

Mettez en place le fichier de configuration du rôle "automatic":

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/automatic' \
    --no-check-certificate --output-document='/etc/xen-tools/role.d/automatic'
command chmod +x '/etc/xen-tools/role.d/automatic'

Créez un squelette de fichiers de configuration pour l'initialisation des domU:

command mkdir --parents '/etc/xen-tools/skel/root'
command mkdir --parents '/etc/xen-tools/skel/root/.ssh'
command mkdir --parents '/etc/xen-tools/skel/etc/default'
command mkdir --parents '/etc/xen-tools/skel/etc/exim4'
command mkdir --parents '/etc/xen-tools/skel/etc/cron.d'
command mkdir --parents '/etc/xen-tools/skel/etc/cron.daily' command mkdir --parents '/etc/xen-tools/skel/etc/apt/apt.conf.d' command mkdir --parents '/etc/xen-tools/skel/etc/xen-data' command mkdir --parents '/etc/xen-tools/skel/usr/bin'

Initialisez le squelette des domU avec la configuration du dom0:

command cp '/root/.bashrc' '/etc/xen-tools/skel/root/'
if [ -e /root/.vimrc ]; then
  command cp '/root/.vimrc' '/etc/xen-tools/skel/root/'
fi
command cp '/etc/timezone' '/etc/xen-tools/skel/etc/'
command cp '/etc/localtime' '/etc/xen-tools/skel/etc/'
command cp '/etc/locale.gen' '/etc/xen-tools/skel/etc/'
command cp '/etc/environment' '/etc/xen-tools/skel/etc/'
command cp '/etc/default/locale' '/etc/xen-tools/skel/etc/default/'

Ajoutez la clef publique SSH du dom0 aux hôtes connu des domU:

command ssh-keyscan -H -t rsa "${MAINDOM_IP}" >> '/etc/xen-tools/skel/root/.ssh/known_hosts'

Autorisez l'identification sans mot de passe du compte root du dom0 sur le compte root des domU:

if [ -e "${HOME}/.ssh/id_rsa.pub" ]; then
    command cat "${HOME}/.ssh/id_rsa.pub" \
        >> "/etc/xen-tools/skel/root/.ssh/authorized_keys"
fi

Configurez la redirection des emails envoyés par les domU vers le dom0:

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/update-exim4.conf.conf' \
    --output-document='/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf'
command sed -i -e "s/dc_smarthost=.*\$/dc_smarthost='${MAINDOM_IP}'/" \
         '/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf'
echo "root@$(command hostname --fqdn)" > '/etc/xen-tools/skel/root/.email'

Ajoutez l'outil d'administration de Backup Manager aux domU:

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/backup-manager/backup-manager-tools' \
    --quiet --no-check-certificate --output-document='/etc/xen-tools/skel/usr/bin/backup-manager-tools'
command chmod +x '/etc/xen-tools/skel/usr/bin/backup-manager-tools'

Téléchargez la configuration par défaut du Backup Manager pour les machines virtuelles:

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/backup-manager.conf' \
    --no-check-certificate --output-document='/etc/xen-tools/skel/etc/backup-manager.conf'
command sed -i -e "s|[#]*\(.*BM_UPLOAD_SSH_HOSTS=\).*$|\1\"${MAINDOM_IP}\"|" \
         '/etc/xen-tools/skel/etc/backup-manager.conf'

Ajoutez au squelette la configuration cron de Backup Manager:

command echo '#!/bin/sh
# cron script for backup-manager
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager' \
    > '/etc/xen-tools/skel/etc/cron.daily/backup-manager'
command chmod +x '/etc/xen-tools/skel/etc/cron.daily/backup-manager'

Configurez le port du serveur SSH du dom0:

SSH_PORT="$(command grep '^Port' '/etc/ssh/sshd_config' \
    | command sed -e 's/^Port[\t ]*//g')"
command sed -i \ -e "s/[#]*\(.*BM_UPLOAD_SSH_PORT=\).*\$/\1\"${SSH_PORT}\"/" \ '/etc/xen-tools/skel/etc/backup-manager.conf'

Ajoutez au squelette la clef privée d'identification au compte xen-backup du dom0:

command cp '/var/lib/xen-backup/.ssh/id_rsa' '/etc/xen-tools/skel/etc/xen-data/'

Remerciements